<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Toolbox</title>
</head>
<body style="display:none;">
  <!-- ========= -->
  <!--   HTML    -->
  <!-- ========= -->


  
  <div id="container">
    <div id="expressioneditor-container">
    
    </div>
   <div id="containerdata" ></div>

    <div class="modal" id="LabelModal" role="dialog" aria-labelledby="myModalLabel">
      <div class="modal-dialog" role="document">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            <h4 class="modal-title tr" id="myModalLabel">Select Label</h4>
          </div>
          <div class="modal-body">
            <select class="form-control" id="LabelNameInput" placeholder="Label">
            </select>
            <span id="NoLabelFound" class="tr">No label found. Create one with Set label action.</span>

          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-primary labelok standartbutton tr" data-dismiss="modal">Ok</button>
            <button type="button" class="btn btn-default standartbutton tr" data-dismiss="modal">Cancel</button>
          </div>
        </div>
      </div>
    </div>

    <div class="modal " id="TimeoutModal" role="dialog" aria-labelledby="myModalLabel">
      <div class="modal-dialog" role="document">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            <h4 class="modal-title tr" id="myModalLabel">Maximum time to perform an action.</h4>
          </div>
          <div class="modal-body">
            <div class="row">
              <div class="col-lg-12">
                <div class="input-group">
                  <input type="number" id="TimeoutValue" class="form-control"/>
                  <span class="input-group-btn">
                    <button class="btn btn-default tr" type="submit">seconds</button>
                  </span>
                </div>
              </div>
            </div>
            <div class="row">
              <div class="col-lg-12">
               <span class="tr" style="font-size:small;color:gray">Use 'Timeout' action to set default timeout.</span>
              </div>
            </div>
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-primary timeoutok standartbutton tr" data-dismiss="modal">Ok</button>
            <button type="button" class="btn btn-default timeoutdefault standartbutton tr" data-dismiss="modal">Default</button>
            <button type="button" class="btn btn-default standartbutton tr" data-dismiss="modal">Cancel</button>
          </div>
        </div>
      </div>
    </div>


    <div class="modal text-center" id="WaitingModal" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-keyboard="false" data-backdrop="static">
    <div class="vertical-alignment-helper">
        <div class="modal-dialog vertical-align-center">
            <div class="modal-content">
                <div class="modal-body" style="margin-top:10px;margin-bottom:10px"><span class="tr">Executing Action</span>: <span class="tr text-danger" id="WaitingActionName">Unknown</span>
                
                <p style="margin-top:30px"><span id="InterruptMessage" class="tr" style="display:none">Trying to interrupt ...</span><a href="#" id="WaitingDisable" class="btn btn-default tr">Interrupt</a></p>
                </div>
                
            </div>
        </div>
    </div>
</div>

    

  </div>

  <!-- ========= -->
  <!-- TEMPLATES -->
  <!-- ========= -->

  <script type="text/template" id="targetfields">
    <span id="target-data" style="display:none">
      <%= _.template($('#input_constructor').html())({id:"TargetUrl", description:tr("Target url"), default_selector: "string", disable_int:true, value_string: "*", help: {description: tr("Change this parameter if you want to apply action only to certain urls. * symbol means any number of any characters. You can use several actions with different \"Target Url\" parameters. For example, set one proxy to *instagram.com* urls and another to *google.com* urls. Or set one proxy for *instagram.com* urls and another for all rest with *"), examples:[{code:"*",description:tr("Any url")},{code:"*google.com*",description:tr("Any url which contains google.com")}]}}) %>
      <%= _.template($('#input_constructor').html())({id:"TargetTabNumber", description:tr("Target tab number"), default_selector: "string", value_string: "*", value_number: 0, help: {description: tr("Change this parameter if you want to apply action only to certain tabs. * means any tabs. Numbering starts from 0. You can use several actions with different \"Target tab number\" parameters. For example, set one proxy to 0 tab and another to 1 tab. Or set one proxy for 0 tab and another for all rest with *"), examples:[{code:"*",description:tr("Any tab")},{code:"0",description:tr("Only first tab")}]}}) %>
    </span>
  </script>

  <script type="text/template" id="movefields">
    <div id="move-data" style="display:none" class="container-fluid moveandclick">

      <%= _.template($('#input_constructor').html())({id:"Speed", description:tr("Speed"), default_selector: "expression", disable_int:true, disable_string:true, value_string: "100", help: {description: tr("Mouse movement speed as floating point value, if you change this, don't forget to change gravity and deviation proportionally.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Gravity", description:tr("Gravity"), default_selector: "expression", disable_int:true, disable_string:true, value_string: "6", help: {description: tr("Floating point value which sets force of cursor attraction to strait line between starting and ending points. If you set this value too big, cursor will move by straight line, if you set it too low, cursor will move chaotically on the screen.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Deviation", description:tr("Deviation"), default_selector: "expression", disable_int:true, disable_string:true, value_string: "2.5", help: {description: tr("Floating point value which sets force of cursor deviation from strait line between starting and ending points. Think of it as a wind, which blows cursor away from the line - the shortest path between two points.")}}) %>
    </div>
  </script>

  <script type="text/template" id="emulationfields">
    <div id="emulation-data" style="display:none" class="container-fluid">

      <%= _.template($('#info').html())({color: "gray", description: tr("<b>Idle emulation</b>. This section allows to configure idle emulation which will take place before current action. Idle emulation allows to browse of the current page as if the user is exploring it or searching for something on it.")}) %>
      <%= _.template($('#info').html())({color: "gray", description: tr("This section allows to configure idle emulation only for this individual action. Use <a href=\"#!/IdleEmulationSetGeneralSettings\">Enable automatic idle emulation</a> action to configure emulation generally. Use <a href=\"#!/IdleEmulationNew\">idle emulation</a> action to start emulation instantly. Specified settings from this section will override any default or general settings, and for unspecified, default or general settings will be used.")}) %>
      <%= _.template($('#input_constructor').html())({id:"time",description:tr("Maximum emulation time"),default_selector:"string",variants:[{value:"disable",description:tr("Disable emulation")},{value:"short",type:"string",description:tr("Short emulation time")},{value:"medium",type:"string",description:tr("Average emulation time")},{value:"long",type:"string",description:tr("Long emulation time")},{value:"30",type:"int",description:tr("30 sec")},{value:"{min: 15, max: 30}",type:"expression",description:tr("From 15 to 30 sec")}],value_string:"",min_number:1,max_number:999999,help:{description:tr("Maximum execution time of emulation before action.")+" "+tr("As a value can be specified as one of the three presets \"short\", \"medium\" or \"long\", or the exact value in seconds.")+" "+tr("And also you can disable emulation by specifying \"disable\".")+" "+tr("The exact emulation time will be determined immediately before the action depending on the emulation state."),examples:[{code:"short",description:tr("Short emulation time")},{code:"medium",description:tr("Average emulation time")},{code:"long",description:tr("Long emulation time")},{code:"disable",description:tr("Disable emulation")},{code:"30",description:tr("30 sec")},{code:"{min: 15, max: 30}",description:tr("From 15 to 30 sec")}]}})%>
      <%= _.template($('#input_constructor').html())({id:"accuracy",description:tr("Actions accuracy"),default_selector:"string",variants:["low","medium","high"],disable_int:true,value_string:"",help:{description:tr("Accuracy of actions is a parameter that determines the degree of detail of the algorithm's actions on the page. With high accuracy, the algorithm works with fewer elements by pointing the cursor precisely from one element to another. At low accuracy, the algorithm works with more elements performing many aimless movements."),examples:[{code:"low",description:tr("The probability of misses, delays and pointing to random coordinates is increased")},{code:"medium",description:tr("The parameters responsible for the accuracy of actions have average values")},{code:"high",description:tr("The probability of misses, delays and pointing to random coordinates is reduced")}]}})%>
      <%= _.template($('#input_constructor').html())({id:"intensity",description:tr("Actions intensity"),default_selector:"string",variants:["low","medium","high"],disable_int:true,value_string:"",help:{description:tr("Intensity of actions is a parameter controls the level of algorithm activity during emulation. If the intensity is high, the algorithm will interact with the page more frequently and dynamically. At low intensity, on the contrary, the algorithm will behave more restrained and patient."),examples:[{code:"low",description:tr("The probability of sleeping and the probability of short cursor movements is increased, the cursor speed is reduced")},{code:"medium",description:tr("The parameters responsible for the intensity of actions have average values")},{code:"high",description:tr("The probability of long cursor movements and page scrolling is increased, while the probability of sleeping is reduced")}]}})%>
      <%= _.template($('#block_start').html())({id:"Additional", smaller_fonts: true, name: tr("Actions performed"), description: tr("Using the parameters from this block, you can select what actions will be performed during emulation.")}) %>
        <%= _.template($('#input_constructor').html())({id:"sleep",description:tr("Sleep"),default_selector:"string",disable_int:true,value_string:"",variants:[{value:"enable",description:tr("Perform")},{value:"disable",description:tr("Don't perform")}],help:{description:tr("Sleep random time."),examples:[{code:"enable",description:tr("Perform")},{code:"disable",description:tr("Don't perform")}]}})%>
        <%= _.template($('#input_constructor').html())({id:"longElementMove",description:tr("Long move to element"),default_selector:"string",disable_int:true,value_string:"",variants:[{value:"enable",description:tr("Perform")},{value:"disable",description:tr("Don't perform")}],help:{description:tr("Movement to a random element, with a large search radius for elements."),examples:[{code:"enable",description:tr("Perform")},{code:"disable",description:tr("Don't perform")}]}})%>
        <%= _.template($('#input_constructor').html())({id:"shortElementMove",description:tr("Short move to element"),default_selector:"string",disable_int:true,value_string:"",variants:[{value:"enable",description:tr("Perform")},{value:"disable",description:tr("Don't perform")}],help:{description:tr("Movement to a random element, with a small search radius for elements."),examples:[{code:"enable",description:tr("Perform")},{code:"disable",description:tr("Don't perform")}]}})%>
        <%= _.template($('#input_constructor').html())({id:"scroll",description:tr("Scroll"),default_selector:"string",disable_int:true,value_string:"",variants:[{value:"enable",description:tr("Perform")},{value:"disable",description:tr("Don't perform")}],help:{description:tr("Scroll at random distance."),examples:[{code:"enable",description:tr("Perform")},{code:"disable",description:tr("Don't perform")}]}})%>
        <%= _.template($('#input_constructor').html())({id:"randomMove",description:tr("Random movement"),default_selector:"string",disable_int:true,value_string:"",variants:[{value:"enable",description:tr("Perform")},{value:"disable",description:tr("Don't perform")}],help:{description:tr("Cursor movement to random coordinates."),examples:[{code:"enable",description:tr("Perform")},{code:"disable",description:tr("Don't perform")}]}})%>
        <%= _.template($('#input_constructor').html())({id:"microMove",description:tr("Micro movement"),default_selector:"string",disable_int:true,value_string:"",variants:[{value:"enable",description:tr("Perform")},{value:"disable",description:tr("Don't perform")}],help:{description:tr("Small movements of the cursor, simulating raising the mouse."),examples:[{code:"enable",description:tr("Perform")},{code:"disable",description:tr("Don't perform")}]}})%>
        <%= _.template($('#input_constructor').html())({id:"goingBeyond",description:tr("Going beyond"),default_selector:"string",disable_int:true,value_string:"",variants:[{value:"enable",description:tr("Perform")},{value:"disable",description:tr("Don't perform")}],help:{description:tr("Going beyond the screen and returning back."),examples:[{code:"enable",description:tr("Perform")},{code:"disable",description:tr("Don't perform")}]}})%>
        <%= _.template($('#input_constructor').html())({id:"moveAlongText",description:tr("Movement along text"),default_selector:"string",disable_int:true,value_string:"",variants:[{value:"enable",description:tr("Perform")},{value:"disable",description:tr("Don't perform")}],help:{description:tr("Slowly moving the cursor over an element with text from left to right to emulate reading."),examples:[{code:"enable",description:tr("Perform")},{code:"disable",description:tr("Don't perform")}]}})%>
      <%= _.template($('#block_end').html())() %>
      <%= _.template($('#block_start').html())({id:"manualSetting", smaller_fonts: true, name: tr("Manual parameter setting"), description: tr("Using the parameters from this block, you can manually configure some emulation parameters. Specified parameters will be taken into account and default settings will be used for unspecified ones.")}) %>
        <%= _.template($('#input_constructor').html())({id:"longMax",description:tr("Long movements"),default_selector:"string",variants:["35%","50%","80%"],value_string:"",min_number:1,max_number:100,help:{description:tr("The radius of searching for elements during a long movement, measured as a percentage of the screen diagonal."),examples:[{code:"35%"},{code:"50%"},{code:"80%"}]}})%>
        <%= _.template($('#input_constructor').html())({id:"shortMax",description:tr("Short movements"),default_selector:"string",variants:["15%","25%","35%"],value_string:"",min_number:1,max_number:100,help:{description:tr("The radius of searching for elements during a short movement, measured as a percentage of the screen diagonal."),examples:[{code:"15%"},{code:"25%"},{code:"30%"}]}})%>
        <%= _.template($('#input_constructor').html())({id:"miss",description:tr("Misses on an element"),default_selector:"string",variants:[{value:"disable",description:tr("Disable misses")},{value:"low",description:tr("The chance of a miss and its distance is less")},{value:"medium",description:tr("The chance of a miss and its distance have average values")},{value:"high",description:tr("The chance of a miss and its distance is greater")}],disable_int:true,value_string:"",help:{description:tr("The mode of performing a miss on an element. The chance of a miss and its distance depend on it."),examples:[{code:"low",description:tr("The chance of a miss and its distance is less")},{code:"medium",description:tr("The chance of a miss and its distance have average values")},{code:"high",description:tr("The chance of a miss and its distance is greater")},{code:"disable",description:tr("Disable misses")}]}})%>
        <%= _.template($('#input_constructor').html())({id:"delay",description:tr("Delay before hover"),default_selector:"string",variants:[{value:"disable",description:tr("Disable delay")},{value:"low",description:tr("The chance of delay and its duration is less")},{value:"medium",description:tr("The chance of delay and its duration have average values")},{value:"high",description:tr("The chance of delay and its duration is greater")}],disable_int:true,value_string:"",help:{description:tr("The mode of performing a delay before hover. The chance of a delay and its duration depends on it."),examples:[{code:"low",description:tr("The chance of delay and its duration is less")},{code:"medium",description:tr("The chance of delay and its duration have average values")},{code:"high",description:tr("The chance of delay and its duration is greater")},{code:"disable",description:tr("Disable delay")}]}})%>
        <%= _.template($('#input_constructor').html())({id:"targetScroll",description:tr("Scroll to target"),default_selector:"string",variants:[{value:"disable",description:tr("Disable scrolling to target")},{value:"low",description:tr("Scrolling is slower, the pauses between several spins of the wheel is longer")},{value:"medium",description:tr("The scrolling speed and the duration of pauses between several spins of the wheel have average values")},{value:"high",description:tr("Scrolling is faster, the pauses between several spins of the wheel is shorter")}],disable_int:true,value_string:"",help:{description:tr("The mode of performing a scroll to target. The scrolling settings and whether it will be executed depend on it."),examples:[{code:"low",description:tr("Scrolling is slower, the pauses between several spins of the wheel is longer")},{code:"medium",description:tr("The scrolling speed and the duration of pauses between several spins of the wheel have average values")},{code:"high",description:tr("Scrolling is faster, the pauses between several spins of the wheel is shorter")},{code:"disable",description:tr("Disable scrolling to target")}]}})%>
        <%= _.template($('#input_constructor').html())({id:"targetDelay",description:tr("Delay before click"),default_selector:"string",variants:[{value:"disable",description:tr("Disable delay")},{value:"low",description:tr("The chance of delay and its duration is less")},{value:"medium",description:tr("The chance of delay and its duration have average values")},{value:"high",description:tr("The chance of delay and its duration is greater")}],disable_int:true,value_string:"",help:{description:tr("The mode of performing a delay before click. The chance of a delay and its duration depends on it."),examples:[{code:"low",description:tr("The chance of delay and its duration is less")},{code:"medium",description:tr("The chance of delay and its duration have average values")},{code:"high",description:tr("The chance of delay and its duration is greater")},{code:"disable",description:tr("Disable delay")}]}})%>
        <%= _.template($('#input_constructor').html())({id:"filters",description:tr("Selecting an element to hover"),default_selector:"string",variants:[{value:"all",description:tr("Don't filter elements")},{value:"link",description:tr("Links")},{value:"input",description:tr("Input fields")},{value:"clickable",description:tr("Clickable elements")},{value:"header",description:tr("Headings")},{value:"text",description:tr("Texts")},{value:"image",description:tr("Images")},{value:"icon",description:tr("Icons")}],disable_int:true,value_string:"",help:{description:tr("The mode for selecting elements for hovering, by which elements will be filtered for long and short movements."),examples:[{code:"link",description:tr("Links")},{code:"input",description:tr("Input fields")},{code:"clickable",description:tr("Clickable elements")},{code:"header",description:tr("Headings")},{code:"text",description:tr("Texts")},{code:"image",description:tr("Images")},{code:"icon",description:tr("Icons")},{code:"all",description:tr("Don't filter elements")}]}})%>
        <%= _.template($('#input_constructor').html())({id:"hoverMode",description:tr("Hover position"),default_selector:"string",variants:[{value:"random",description:tr("Random position")},{value:"tocenter",description:tr("Position close to the center")},{value:"randomorcenter",description:tr("Random position or close to the center")}],disable_int:true,value_string:"",help:{description:tr("The position on the element to which hovering will be performed."),examples:[{code:"random",description:tr("Random position")},{code:"tocenter",description:tr("Position close to the center")},{code:"randomorcenter",description:tr("Random position or close to the center")}]}})%>
        <%= _.template($('#input_constructor').html())({id:"maxRepeatSkip",description:tr("Re-hovering over an element"),default_selector:"int",disable_string:true,variants:[{value:"0",type:"int",description:tr("The element can be re-hovered immediately")},{value:"1",type:"int",description:tr("The element can be re-hovered after one iteration of move to element, from the search of which this element will be excluded")},{value:"3",type:"int",description:tr("The element can be re-hovered after 3 iterations of move to element, from the search of which this element will be excluded")},{value:"-1",type:"int",description:tr("The element can be re-hovered only after it goes out of visibility")}],value_number:"",min_number:-1,max_number:999999,help:{description:tr("The number of iterations of move to element after which the element can be hovered again. Also, the element can be hovered again if it goes out of visibility while scrolling."),examples:[{code:"0",description:tr("The element can be re-hovered immediately")},{code:"1",description:tr("The element can be re-hovered after one iteration of move to element, from the search of which this element will be excluded")},{code:"3",description:tr("The element can be re-hovered after 3 iterations of move to element, from the search of which this element will be excluded")},{code:"-1",description:tr("The element can be re-hovered only after it goes out of visibility")}]}})%>
        <%= _.template($('#input_constructor').html())({id:"overlapByPoints",description:tr("Overlap by points"),default_selector:"int",disable_string:true,variants:[{value:"1",type:"int",description:tr("An element will be considered accessible if at least one of the points on it is not overlapped")},{value:"2",type:"int",description:tr("An element will be considered accessible if at least 2 points on it are not overlapped")},{value:"3",type:"int",description:tr("An element will be considered accessible if at least 3 points on it are not overlapped")},{value:"4",type:"int",description:tr("An element will be considered accessible if at least 4 points on it are not overlapped")},{value:"5",type:"int",description:tr("The element will be considered accessible only if all 5 points are not overlapped")}],value_number:"",min_number:1,max_number:5,help:{description:tr("The number of points on the element by which it will be determined whether the found element is overlapped, a maximum of 5 points: top right, top left, center, bottom right, bottom left."),examples:[{code:"1",description:tr("An element will be considered accessible if at least one of the points on it is not overlapped")},{code:"2",description:tr("An element will be considered accessible if at least 2 points on it are not overlapped")},{code:"3",description:tr("An element will be considered accessible if at least 3 points on it are not overlapped")},{code:"4",description:tr("An element will be considered accessible if at least 4 points on it are not overlapped")},{code:"5",description:tr("The element will be considered accessible only if all 5 points are not overlapped")}]}})%>
        <%= _.template($('#input_constructor').html())({id:"reverseScroll",description:tr("Reverse scroll chance"),default_selector:"string",variants:[{value:"disable",description:tr("Disable reverse scrolling")},{value:"low",description:tr("The chance of reverse scrolling is less")},{value:"medium",description:tr("The chance of reverse scrolling have average values")},{value:"high",description:tr("The chance of reverse scrolling is greater")},{value:"5",type:"int",description:tr("The chance of reverse scrolling 5 percent")}],value_string:"",help:{description:tr("Chance of a reverse scroll drop. As a value can be specified as one of the four presets \"disable\", \"low\", \"medium\" or \"high\", or an exact number from 0 to 100."),examples:[{code:"low",description:tr("The chance of reverse scrolling is less")},{code:"medium",description:tr("The chance of reverse scrolling have average values")},{code:"high",description:tr("The chance of reverse scrolling is greater")},{code:"disable",description:tr("Disable reverse scrolling")},{code:"5",description:tr("The chance of reverse scrolling 5 percent")}]}})%>
        <% if(typeof(additionalEmulation) != "undefined" && additionalEmulation){ %>
          <%= _.template($('#input_constructor').html())({id:"additionalEmulation",description:tr("Additional emulation"),default_selector:"string",disable_int:true,value_string:"",variants:[{value:"enable",description:tr("Perform")},{value:"disable",description:tr("Don't perform")}],help:{description:tr("Perform additional emulation during action execution.")+" "+tr("Additional emulation is small actions such as sleep, mouse movement, and in rare cases scrolling performed before, during, and/or after the target action. This emulation may also include improvements to emulate the target action, such as text type stuttering, typing speed changes, and improved hover position selection."),examples:[{code:"enable",description:tr("Perform")},{code:"disable",description:tr("Don't perform")}]}})%>
        <% } %>
      <%= _.template($('#block_end').html())() %>
    </div>
  </script>

  <script type="text/template" id="scrollparamsfields">
    <div id="scroll-params-data" style="display:none" class="container-fluid">

      <%= _.template($('#info').html())({color: "gray", description: tr("Using the parameters from this block, you can configure page scrolling at your discretion by changing the scrolling speed, pause time, and cursor movement while scrolling.")}) %>
      <%= _.template($('#input_constructor').html())({id:"scrollSpeed", description:tr("Scroll speed"), default_selector: "expression", disable_int:true, disable_string:true, value_string: "100", help: {description:tr("The speed of scrolling, as a number. The higher the number, the faster the scrolling, and the lower the number, the slower the scrolling."),examples:[{code:"70"},{code:"100"},{code:"120"}]}}) %>
      <%= _.template($('#input_constructor').html())({id:"minPause",description:tr("Minimum pause"),default_selector:"int",disable_string:true,value_number:100,min_number:1,max_number:999999,help:{description:tr("Minimum pause between several spins of the wheel, in milliseconds."),examples:[{code:"100"},{code:"300"},{code:"500"}]}})%>
      <%= _.template($('#input_constructor').html())({id:"maxPause",description:tr("Maximum pause"),default_selector:"int",disable_string:true,value_number:400,min_number:1,max_number:999999,help:{description:tr("Maximum pause between several spins of the wheel, in milliseconds."),examples:[{code:"200"},{code:"500"},{code:"1000"}]}})%>
      <%= _.template($('#input_constructor').html())({id:"moveChance",description:tr("Move chance"),default_selector:"expression",disable_int:true,disable_string:true,value_string:"0.2",help:{description:tr("Chance of performing a mouse movement during scrolling, as a floating point number, with a value from 0 to 100."),examples:[{code:"0.2"},{code:"5"},{code:"25"},{code:"0",description:tr("Don't move the mouse while scrolling")}]}})%>
      <%= _.template($('#checkbox').html())({id: "moveInScrollDirection", title: tr("Move in scroll direction"), help: {title: tr("Move in scroll direction"), description: tr("If enabled, the mouse movement will be in the scrolling direction and only in rare cases in the opposite direction."), examples: [{code: tr("Activated"), description: tr("Mouse movement in scroll direction")}, {code: tr("Deactivated"), description: tr("Mouse movement in a random direction")}]}}) %>
      <%= _.template($('#input_constructor').html())({id:"moveBeyond",description:tr("Screen border"),default_selector:"string",disable_int:true,variants:[{value: "random", description: tr("The mode will be selected randomly before scrolling starts")},{value: "avoid", description: tr("Don't go beyond the boundaries, the cursor will rest against them")},{value: "goandreturn", description: tr("The cursor may go out of boundaries, but when exiting it will be returned to the screen")}],value_string:"avoid",help:{description:tr("The mode of interaction of the mouse cursor with the borders of the screen when the mouse moves."),examples:[{code:"random",description:tr("The mode will be selected randomly before scrolling starts")},{code:"avoid",description:tr("Don't go beyond the boundaries, the cursor will rest against them")},{code:"goandreturn",description:tr("The cursor may go out of boundaries, but when exiting it will be returned to the screen")}]}})%>
      <%= _.template($('#input_constructor').html())({id:"moveMinDistance",description:tr("Move minimum distance"),default_selector:"int",disable_string:true,value_number:5,min_number:0,max_number:999999,help:{description:tr("Minimum mouse movement distance, in pixels."),examples:[{code:0},{code:20},{code:40}]}})%>
      <%= _.template($('#input_constructor').html())({id:"moveMaxDistance",description:tr("Move maximum distance"),default_selector:"int",disable_string:true,value_number:35,min_number:1,max_number:999999,help:{description:tr("Maximum mouse movement distance, in pixels."),examples:[{code:20},{code:35},{code:50}]}})%>
      <%= _.template($('#input_constructor').html())({id:"moveSpeed", description:tr("Move speed"), default_selector: "expression", disable_int:true, disable_string:true, value_string: "100", help: {description: tr("Mouse movement speed as floating point value, if you change this, don't forget to change gravity and deviation proportionally.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"moveGravity", description:tr("Move gravity"), default_selector: "expression", disable_int:true, disable_string:true, value_string: "6", help: {description: tr("Floating point value which sets force of cursor attraction to strait line between starting and ending points. If you set this value too big, cursor will move by straight line, if you set it too low, cursor will move chaotically on the screen.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"moveDeviation", description:tr("Move deviation"), default_selector: "expression", disable_int:true, disable_string:true, value_string: "2.5", help: {description: tr("Floating point value which sets force of cursor deviation from strait line between starting and ending points. Think of it as a wind, which blows cursor away from the line - the shortest path between two points.")}}) %>
    </div>
  </script>

  <script type="text/template" id="multiselect">

    <div class="container-fluid multiselect">
      
      <div class="col-xs-12 multiselectborder" >
        <div class="multiselecttitle">
             <span class="tr">Multiparsing mode is on. Click on items inside browser to add "must include" or "must exclude" elements. This will tweak the selection.</span>
             <br/>
             
             <a onclick="BrowserAutomationStudio_OpenUrl('https://youtu.be/PQSQmJRVKvk');return false" class="tr-ru" href="#"><i class="fa fa-youtube-play" aria-hidden="true"></i> Как это работает?</a>
             <a onclick="BrowserAutomationStudio_OpenUrl('https://youtu.be/5XxXsgPj75U');return false" class="tr-en" href="#"><i class="fa fa-youtube-play" aria-hidden="true"></i> How it works?</a>

        </div>
        <div class="multiselectinclude">
            <span class="multiselectincludesign"> </span>
            <span class="tr">Elements that selection must include:</span> <strong id="multiselectincludenumber">0</strong>
        </div>
        <div class="multiselectexclude">
            <span class="multiselectexcludesign"> </span>
            <span class="tr">Elements that should not be included:</span> <strong id="multiselectexcludenumber">0</strong>
        </div>
        <div class="multiselectclearlinkcontainer">
            <a href="#" onclick="_MultiSelectManager.PathManuallyRest();return false;" class="multiselectreset"><i class="fa fa-trash-o" aria-hidden="true"></i> <span class="multiselectclearicon tr">Clear elements</span></a>
        </div>
      </div>

    </div>

  </script>

  <script type="text/template" id="expressioneditor">
    

    <div id="expressioneditor-list"></div>
    <div id="expressioneditor-constructor">
      
      <div id="expressioneditor-overlay">
        <div class="expressioneditor-overlay-title"><h2><span class="tr">Enter Value</span>:</h2></div>
        <div class="expressioneditor-overlay-data"><%= _.template($('#input_constructor').html())({id:"ExpressionValue", description:tr(""), default_selector: "string",disable_editor:true,min_number:-999999}) %></div>
        <div class="expressioneditor-overlay-buttons">
          <a href="#" class="btn btn-success btn-sm expressioneditor-button-accept" id="expressioneditor-valueok" ><span class="tr">OK</span></a><a href="#" id="expressioneditor-valuecancel" class="btn btn-danger btn-sm expressioneditor-button-accept" ><span class="tr">CANCEL</span></span></a>
        </div>
      </div>

      <div id="expressioneditor-overlay-confirm">
        <div class="expressioneditor-overlay-title"><h2><span class="tr">Confirm Changes</span>:</span></h2></div>
        <div class="expressioneditor-overlay-olddata"><span class="tr">Replace old value</span> <span id="expressioneditor-old-value"></span> <span class="tr">with new one</span>:</div>
        <div class="expressioneditor-overlay-data"><%= _.template($('#input_constructor').html())({id:"ExpressionValueConfirm", description:tr(""), default_selector: "expression",disable_editor:true,disable_int:true,disable_string:true}) %></div>
        <div class="expressioneditor-overlay-buttons">
          <a href="#" class="btn btn-success btn-sm expressioneditor-button-accept" id="expressioneditor-confirmok" ><span class="tr">OK</a><a href="#" id="expressioneditor-confirmcancel" class="btn btn-danger btn-sm expressioneditor-button-accept" ><span class="tr">CANCEL</span></a>
        </div>
      </div>

      <div class="expressioneditor-container">
        
        <button type="button" class="btn btn-info expressioneditor-add-string btn-sm"><span class="tr">STRING</span> +</button>
        <button type="button" class="btn btn-info expressioneditor-add-int btn-sm"><span class="tr">INT</span> +</button>
        <button type="button" class="btn btn-info expressioneditor-add-expression btn-sm"><span class="tr">EXPRESSION</span> +</button>
        
        <span id="expressioneditor-expression"></span>
        <div class="expressioneditor-bottom-titlebar">
           <a href="#" class="btn btn-success btn-sm expressioneditor-button-accept" id="expressioneditor-ok" ><span class="tr">ACCEPT</span> &gt;</a>   <a href="#" id="expressioneditor-cancel" class="btn btn-danger btn-sm expressioneditor-button-accept" ><span class="tr">CANCEL</tr></a>
        </div>
        <div class="expressioneditor-navigator">
        </div>
      </div>
    </div>
  </script>

  <script type="text/template" id="expressioneditor-list-item">
    <div><a href="#" class="expressioneditor-tool" data-name="<%= name %>"><%= name_translate %></a> : <%= description %></div>
  </script>

  <script type="text/template" id="checkbox">
    <div class="col-xs-12 <%= (typeof(additional_classes) == 'string') ? additional_classes : '' %>"
      <%= (typeof(visible_if_checked) == "string") ? "data-visible-if-checked='" + visible_if_checked + "' " : "" %>
      <%= (typeof(visible_if_unchecked) == "string") ? "data-visible-if-unchecked='" + visible_if_unchecked + "' " : "" %>
    >
      <form class="form-horizontal">
         <div class="form-group">
           <span 
           <% if(typeof(dont_preserve) != "boolean" || !dont_preserve){ %>
            data-preserve="true" 
          <%}%>
          data-preserve-type="check" data-preserve-id="<%= id %>"  class="nice-form-group">
            <input type="checkbox" id="<%= id %>" data-visibility-trigger="<%= id %>"
            
            <%= (typeof(checked) == "boolean" && checked) ? "checked='checked' data-default='true'" : "data-default='false'" %>
            
            /> 
            <label for="<%= id %>"> <%= title %></label> 
            <% if(typeof(help) == "object" && help){ %>
              <i style="margin-left:5px;cursor: pointer" class="fa fa-question-circle help-input" data-toggle="popup" data-additional-type="select" data-html="true" title="<%= _.escape(_.template($('#help_popup').html())({title:help.title,description:help.description,examples:help.examples})) %>"></i>
            <% } %>
           </span>
         </div>
       </form>
    </div>
  </script>

  <script type="text/template" id="checkbox_inline">
    <div>
      <span data-preserve="true" data-preserve-type="check" data-preserve-id="<%= id %>" class="nice-form-group">
      <input type="checkbox" id="<%= id %>" data-visibility-trigger="<%= id %>"
      
      <%= (typeof(checked) == "boolean" && checked) ? "checked='checked' data-default='true'" : "data-default='false'" %>
      
      /> 
      <label for="<%= id %>"> <%= title %></label> 
      <% if(typeof(help) == "object" && help){ %>
        <i style="margin-left:5px;cursor: pointer" class="fa fa-question-circle help-input" data-toggle="popup" data-additional-type="checkboxinline" data-html="true" title="<%= _.escape(_.template($('#help_popup').html())({title:help.title,description:help.description,examples:help.examples})) %>"></i>
      <% } %>
      </span>
    </div>
  </script>

  <script type="text/template" id="description">
    <div class="col-xs-12"
      <%= (typeof(visible_if_checked) == "string") ? "data-visible-if-checked='" + visible_if_checked + "' " : "" %>
      <%= (typeof(visible_if_unchecked) == "string") ? "data-visible-if-unchecked='" + visible_if_unchecked + "' " : "" %>
    >
      <form class="form-horizontal">
         <div class="form-group">
           
          <span style="margin:15px"> <%= name %></span> 
          <% if(typeof(help) == "object" && help){ %>
            <i style="margin-left:5px;cursor: pointer" class="fa fa-question-circle help-input" data-toggle="popup" data-additional-type="select" data-html="true" title="<%= _.escape(_.template($('#help_popup').html())({title:help.title,description:help.description,examples:help.examples})) %>"></i>
          <% } %>
          
         </div>
       </form>
    </div>

  </script>

  <script type="text/template" id="radio">
    <div class="col-xs-12"
      <%= (typeof(visible_if_checked) == "string") ? "data-visible-if-checked='" + visible_if_checked + "' " : "" %>
      <%= (typeof(visible_if_unchecked) == "string") ? "data-visible-if-unchecked='" + visible_if_unchecked + "' " : "" %>
    >
      <div class="form-horizontal">
         <div class="form-group">
           <span data-preserve="true" data-preserve-type="check" data-preserve-id="<%= id %>" class="nice-form-group">
            <input type="radio" id="<%= id %>" name="<%= name %>" data-visibility-trigger="<%= id %>"
            
            <%= (typeof(checked) == "boolean" && checked) ? "checked='checked' data-default='true'" : "data-default='false'" %>
            
            /> 
            <label for="<%= id %>"> <%= title %></label> 
            <% if(typeof(help) == "object" && help){ %>
              <i style="margin-left:5px;cursor: pointer" class="fa fa-question-circle help-input" data-toggle="popup" data-additional-type="select" data-html="true" title="<%= _.escape(_.template($('#help_popup').html())({title:help.title,description:help.description,examples:help.examples})) %>"></i>
            <% } %>
           </span>
         </div>
       </div>
    </div>
  </script>

  <script type="text/template" id="combobox">
    <div class="col-xs-12"
      <%= (typeof(visible_if_checked) == "string") ? "data-visible-if-checked='" + visible_if_checked + "' " : "" %>
      <%= (typeof(visible_if_unchecked) == "string") ? "data-visible-if-unchecked='" + visible_if_unchecked + "' " : "" %>
    >
      <div class="form-horizontal">
         <div class="form-group">
          <div class="combobox-container align-vertically">
            <span 
             <% if(typeof(dont_preserve) != "boolean" || !dont_preserve){ %>
              data-preserve="true" 
             <% } %>
             data-preserve-type="select" data-preserve-id="<%= id %>">
              <select class="combobox" id="<%= id %>" placeholder="<%= (typeof(title) == "string" ? _.escape(title) : "") %>"
                <%= (typeof(search) == "boolean" && search) ? "data-use-search='true' " : "" %>
                <%= (typeof(onchange) == "string" && onchange) ? "onchange='" + _.escape(onchange) + "' " : "" %>
                >
                  <% for(let item of items){ %>
                    <option 
                      value="<%= _.escape(item.value) %>"
                      <%= (typeof(item.selected) == "boolean" && item.selected) ? "selected='selected' data-default='true' " : "" %>
                      <% if(typeof(item.data) == "object"){ %>
                        <% for(let key in item.data){ %>
                          data-<%= key %>="<%= _.escape(item.data[key]) %>"
                        <% } %>
                      <% } %>
                      <% if(typeof(item.title) == "string"){ %>
                        data-html="<span title='<%= _.escape(item.title) %>' style='width: calc(100% + 14px); margin: -5px -7px -5px -7px; padding: 5px 7px 5px 7px;'><%= _.escape(item.name) %></span>"
                      <% } %>
                      ><%= _.escape(item.name) %></option>  
                  <% } %>
              </select>
            </span>
            <% if(typeof(title) == "string" && title){ %>
              <label style="margin-bottom: 0px;margin-left:10px;font-size:smaller;color:#555" for="<%= id %>"><%= _.escape(title) %></label>
            <% } %>
            <% if(typeof(help) == "object" && help){ %>
              <i style="margin-left:10px;cursor: pointer;" class="fa fa-question-circle help-input" data-toggle="popup" data-additional-type="combobox" data-html="true" title="<%= _.escape(_.template($('#help_popup').html())({title:(help.title || title),description:help.description,examples:help.examples})) %>"></i>
            <% } %>
          </div>
        </div>
      </div>
    </div>

  </script>

  <script type="text/template" id="combobox_stretch">
    <div class="col-xs-12"
      <%= (typeof(visible_if_checked) == "string") ? "data-visible-if-checked='" + visible_if_checked + "' " : "" %>
      <%= (typeof(visible_if_unchecked) == "string") ? "data-visible-if-unchecked='" + visible_if_unchecked + "' " : "" %>
    >
      <div class="form-horizontal">
         <div class="form-group">
          <div class="col-xs-12">
            <div class="input-group">
              <span 
               <% if(typeof(dont_preserve) != "boolean" || !dont_preserve){ %>
                data-preserve="true" 
               <% } %>
               data-preserve-type="select" data-preserve-id="<%= id %>">
                <select class="combobox" id="<%= id %>" placeholder="<%= _.escape(title) %>"
                  <%= (typeof(search) == "boolean" && search) ? "data-use-search='true' " : "" %>
                  <%= (typeof(onchange) == "string" && onchange) ? `onchange='${_.escape(onchange)}' ` : "" %>
                  >
                    <% for(let item of items){ %>
                      <option 
                        value="<%= _.escape(item.value) %>"
                        <%= (typeof(item.selected) == "boolean" && item.selected) ? "selected='selected' data-default='true' " : "" %>
                        <% if(typeof(item.data) == "object"){ %>
                          <% for(let key in item.data){ %>
                            data-<%= key %>="<%= _.escape(item.data[key]) %>"
                          <% } %>
                        <% } %>
                        <% if(typeof(item.title) == "string"){ %>
                          data-html="<span title='<%= _.escape(item.title) %>' style='width: calc(100% + 14px); margin: -5px -7px -5px -7px; padding: 5px 7px 5px 7px;'><%= _.escape(item.name) %></span>"
                        <% } %>
                        ><%= _.escape(item.name) %></option>  
                    <% } %>
                </select>
              </span>
              <span class="input-group-addon input-description"><%= title %>
                <% if(typeof(help) == "object"){ %>
                  <i style="cursor: pointer;" class="fa fa-question-circle help-input" data-toggle="popup" data-html="true" title="<%= _.escape(_.template($("#help_popup").html())({title:(help.title || title),description:help.description,examples:help.examples})) %>" ></i>
                <% } %>
              </span>
            </div>
          </div>
        </div>
      </div>
    </div>

  </script>


  <script type="text/template" id="block_start">
    <span 
      <%= (typeof(visible_if_checked) == "string") ? "data-visible-if-checked='" + visible_if_checked + "' " : "" %>
      <%= (typeof(visible_if_unchecked) == "string") ? "data-visible-if-unchecked='" + visible_if_unchecked + "' " : "" %>
    >
      <div style="height:0px;clear: both;margin-bottom:-4px">&nbsp;</div>


      <div style="margin-left: 15px; background-color: #333; padding: left:10px; padding-left: 10px; border-radius: 2px; margin-top: 3px; margin-bottom: 4px; margin-right: 15px;">
        <i id="<%= id %>Icon" class="fa fa-caret-right" style="opacity: 0.5;margin-right:3px;margin-left:3px;width: 8px;"></i>
        <input type="checkbox" id="<%= id %>Check" onchange="if($('#<%= id %>Block').css('display') == 'none'){$('#<%= id %>Block').css('display', 'table-cell');} else {$('#<%= id %>Block').css('display', 'none');}$('#<%= id %>Icon').toggleClass('fa-caret-right').toggleClass('fa-caret-down')" style="margin-top: 6px;display:none" /> 
        <label for="<%= id %>Check" style="<%= (typeof(smaller_fonts) == 'boolean' && smaller_fonts) ? 'font-size: smaller;color: #4b4b4b;' : '' %> padding-top: 5px;padding-bottom: 5px;margin-bottom: 0px !important;width: calc(100% - 40px);cursor:pointer" ><%= name %></label>
      </div>

      <span id="<%= id %>Block" style="display:none;width: 100vw;padding-left:10px;">
          <% if(description){ %>
            <div class="block_info_gray"><%= description %></div>
          <% } %>
  </script>

  <script type="text/template" id="block_end">
      </span>
    </span>
  </script>

  <script type="text/template" id="info">
    <div style="height:0px;clear: both;">&nbsp;</div>
    <div class="block_info_<%= color %>"><%= description %></div>
  </script>


  <script type="text/template" id="ip_information">

    <%= _.template($('#block_start').html())({id: "IpInfo", name: tr("IP information"), description: tr("Options below will define method to obtain information about IP. Default settings will work fine.")}) %>

      <%= _.template($('#input_constructor').html())({id:"IpInfoMethod", description:tr("IP info method"), default_selector: "string", disable_int:true, value_string: "database", variants: ["database<br/><span style='color:gray;font-size:small'>" + tr("Use internal IP database") + "</span>","ip-api.com<br/><span style='color:gray;font-size:small'>" + tr("Use ip-api.com service") + "</span>","custom function<br/><span style='color:gray;font-size:small'>" + tr("Сustom BAS function to obtain IP information") + "</span>"], help: {description: tr("Method which will be used to obtain information about IP."),examples:[{code:"database",description:tr("Use internal database, it is fast and always available. Even though the database is constantly being updated, this method may not be the most accurate compared to the others.")},{code:"ip-api.com",description:tr("Use ip-api.com service. Free version has limit - 45 requests from single IP. Pro version is not limited to request number but costs 15$ per month.")},{code:"custom function",description:tr("Use custom BAS function to obtain IP information.")}]}}) %>

      <%= _.template($('#input_constructor').html())({id:"IpApiKey", description:tr("ip-api.com key. Can be blank."), default_selector: "string", disable_int:true, help: {description: tr("Key from the ip-api.com service, pro version. Key available after purchase. This parameter is used only if \"IP info method\" is set to \"ip-api.com\" value."), examples:[{code:tr("Empty string"),description:tr("Use free version")},{code:tr("Key"),description:tr("Use pro version")}]}}) %>

      <div class="container-fluid executefunction">
        <div class="col-xs-12" style="margin-bottom: 5px;padding-right: 0px;">
          
          <div class="input-group">
            
            <span data-preserve="true" data-preserve-type="text" data-preserve-id="FunctionName">
              <input class="form-control function-input" type="text" id="FunctionName" placeholder="Custom IP information function">
              <ul class="dropdown-menu input-field-dropdown dropdown-align dropdown-black" data-toggle="dropdown">
                <li>
                  <a tabindex="-1" href="#" class="func" data-result-target="#FunctionName">
                    <span class="tr">Select function</span>
                  </a>
                </li>
              </ul>
            </span>        

            <span class="input-group-addon input-description">
              <span class="tr">Custom IP information function</span>

              <i style="cursor: pointer;" class="fa fa-question-circle help-input" data-toggle="popup" data-html="true" title="<%= _.escape(_.template($('#help_popup').html())(
                {
                  title:tr('Custom IP information function'),
                  description:tr('Custom BAS function, which takes IP string as input(&quot;Ip&quot; input parameter) and returns JSON with IP information. This parameter is used only if &quot;IP info method&quot; is set to &quot;custom function&quot; value.'),
                  examples:[
                  { code: `{
                    <div style='margin-left:5px'>valid: true,</div>
                    <div style='margin-left:5px'>city: "Frankfurt am Main",</div>
                    <div style='margin-left:5px'>country: "DE",</div>
                    <div style='margin-left:5px'>dstoffset: -120,</div>
                    <div style='margin-left:5px'>offset: -60,</div>
                    <div style='margin-left:5px'>timezone: "Europe/Berlin",</div>
                    <div style='margin-left:5px'>longitude: 8.6843,</div>
                    <div style='margin-left:5px'>latitude: 50.1188</div>
                  }`, description: tr('JSON example, which must return custom function.') },
                ]
                }
              )) %>" ></i>

            </span>
          </div>
          
        </div>
        
      </div>

      <%= _.template($('#block_end').html())() %>
  </script>

  <script type="text/template" id="___none">
  </script>

  <script type="text/template" id="main">
    <div class="leftactionpaneltitledrop" style="display:none">
      <i class="fa fa-trash-o" aria-hidden="true"></i>
    </div>
    <div class="container-fluid search-bar-container">
      <div class="search-bar">
        <input type="text" class="search-input" id="searchinput" placeholder="What to search?">
        <span class="search-control search-icon">
          <i class="fa fa-fw fa-search" aria-hidden="true"></i>
        </span>
        <span class="search-pagination" id="pagination">
          <button type="button" class="search-control search-page-button" id="prevpage">
            <i class="fa fa-fw fa-chevron-left" aria-hidden="true"></i>
          </button>
          <span class="search-page-label">
            <span class="text-dark" id="currpage"></span>
            <span class="text-gray">-</span>
            <span class="text-gray" id="lastpage"></span>
          </span>
          <button type="button" class="search-control search-page-button" id="nextpage">
            <i class="fa fa-fw fa-chevron-right" aria-hidden="true"></i>
          </button>
          </span>
        <button type="button" class="search-control search-clear-button" id="searchclear">
          <i class="fa fa-fw fa-times" aria-hidden="true"></i>
        </button>
        </div>
      </div>
    <div class="search">
      <span class="results-recent"></span>
      <span class="results-empty"></span>
      <ol class="results-list" id="results"></ol>
    </div>
    <div class="actions">
      <div class="leftpanel">
        <button type="button" id="showbookmarks" class="btn btn-default btn-sm" style="margin-bottom:5px"><i class="fa fa-bookmark" aria-hidden="true"></i></button>
        <button type="button" id="showhistory" class="btn btn-default btn-sm"><i class="fa fa-history" aria-hidden="true"></i></button>
      </div>
      <div class="leftactionpanel" style="display:none">
        
        <div class="leftactionpaneltitle"></div>
        <div class="leftactionpaneltitlebody" style="margin-top:3px;margin-bottom:3px">

        </div>
        
      </div>
      <div class="container-fluid mainscreen" >
        <div class="panel-group" style="margin-bottom: 0px;">
            <% var group = null; %>


            <% _.each(data, function(task) { %>
                <% if(typeof(task.type) != "undefined" && task.type == "group") { %>
                  <% group = task.name; %>
                  <span data-group="<%= task.name %>" data-group-all="<%= task.name %>"  ondragstart="return false;" ondrop="return false;">
                    <a href="#" data-group="<%= task.name %>" data-group-all="<%= task.name %>" class="groupshow" style="color:black" >
                      <div class="panelgrid text-center panelgrid-<%= group %>" data-toggle-none="tooltip" data-placement-none="auto" title-none="<%=task.info%>">
                        
                        <div class="panelgridtitle"><div class="panelgridtitleinner"><%= task.description %></div></div>
                        <div class="panelgridimage">
                          <span class="helper"></span>
                          <% if(typeof(task.icon) != "undefined") { %>
                            <img src="<%= task.icon %>" class="center-block img-responsive" />
                          <% } else { %>
                            <img src="../icons/module.png" class="center-block img-responsive" />
                          <% } %>
                        </div>
                      </div>
                    </a>
                    <span data-group="<%= task.name %>" style="display:none">
                      <div class="returntomaindiv">
                        <a href="#" class="returntomain"><i class="fa fa-long-arrow-left" aria-hidden="true"></i> <span class="tr" style="font-size:smaller">Return to main screen</span></a>
                      </div>
                      <hr style="margin-top:5px;margin-bottom:5px" />
                      <% if(typeof(task.info) != "undefined") { %>
                        <div class="panelgriddescription"><%= task.info %>
                        </div>
                      <% } %>
                      <div style="clear: both;"></div>

                      
                    </span>
                  </span>
                <% }else{ %>
                    <a class="toolbutton <%= ((typeof(BookmarkList) != "undefined" && BookmarkList.indexOf(task.ref) >= 0) ? "toolbookmark" : "") %>" href="#!/<%= task.ref %>" data-placement="right" title="<%= task.description %>" data-name="<%= task.name %>" data-ref="<%= task.ref %>" data-group="<%= group %>" style="display:none"  >
                      <div class="tool">
                         <span class="toolinner"><%= task.name %></span>
                      </div>
                    </a>
                <% } %>
            <% }); %>


            <% _.each(unused, function(task) { %>
              
                <span data-group="<%= task.name %>" data-group-all="<%= task.name %>"  ondragstart="return false;" ondrop="return false;">
                  <a href="#" data-group="<%= task.name %>" data-group-all="<%= task.name %>" class="groupshow" style="color:black" >
                    <div class="panelgrid panelunused text-center" data-toggle-none="tooltip" data-placement-none="auto" title-none="<%=task.name%>" data-task-name="<%= task.name %>">
                      
                      
                      
                      <div class="panelgridtitle"><div class="panelgridtitleinner"><%= task.description %></div></div>
                      <div class="panelgridimage">
                        <span class="helper"></span>
                        <% if(typeof(task.icon) != "undefined") { %>
                          <img src="<%= task.icon %>" class="center-block img-responsive" />
                        <% } else { %>
                          <img src="../icons/modules.png" class="center-block img-responsive" />
                        <% } %>
                      </div>
                      <i class="fa fa-plus-square unused-add-icon" ></i>
                    </div>
                  </a>
                </span>
              
          <% }); %>


            </div>
          </div>
        </div>
      </div>
    </div>
  </script>

  <script type="text/template" id="back">
    <div class="container-fluid back" >
      <div class="col-xs-12">
        
        <div class="action-name-container">
          <% var GroupInfo = _GobalModel.GetGroupInfo() %>

          <div style="margin-right:5px">
            <a href="#!/" id="backtohomefromtopmenu" class="tr" >Main</a>
          </div>
          
          <div style="margin-right:5px;">
            /
          </div>
          


          <% if(typeof(GroupInfo) == "object" && GroupInfo !== null && typeof(GroupInfo.description) == "string"  && GroupInfo.description.length > 0 && typeof(GroupInfo.name) == "string"  && GroupInfo.name.length > 0){ %>
            <div style="margin-right:5px;">
              <a href="#!/" id="backtomainfromtopmenu" data-group-name="<%= GroupInfo.name %>">
                <%= GroupInfo.description %>
              </a>
            </div>
            <div style="margin-right:5px;">
              /
            </div>
          <% } %>
          <div class="action-name-action-name">
            <% 
              var State = _GobalModel.get("state") 
              var Name = _GobalModel.GetPageInfo() || name
              if(typeof(State) == "string")
              {
                if(State == "threadnumber")
                {
                  Name = tr("Thread number")
                }else if(State == "successnumber")
                {
                  Name = tr("Success number")
                }else if(State == "failnumber")
                {
                  Name = tr("Fail number")
                }
              }
            %>

            <%= Name %> 
          </div>

          <% if(typeof(modal_code_id) != "undefined"){ %>
            <% if(typeof(use_modal_template) != "undefined"){ %>
              <a onclick="bootbox.alert({message: _.template($('#<%= modal_code_id %>').html())({}), size: 'large'});return false;" href="#" style="margin-top: 1px;" class="text-info"><i class="fa fa-question-circle help-input"></i>  </a>
            <% }else{ %>      
              <a onclick="bootbox.alert({message: $('#<%= modal_code_id %>').html(), size: 'large'});return false;" href="#" style="margin-top: 1px;" class="text-info"><i class="fa fa-question-circle help-input"></i>  </a>
            <% } %>  
          <% } %>  
        </div>

        
        <div class="back-container">
          <div class="back-container-left">
            <% if(typeof(only_cancel) == "undefined"){ %> <a tabindex="-1" class="btn btn-success standartbutton tr" id="ok">Ok</a> <% } %> <a tabindex="-1" class="btn btn-danger standartbutton tr" href="#!/" id="backtomain">Cancel</a>
          </div>

          <div class="back-container-middle">
        
            <% if(typeof(only_cancel) == "undefined"){ %>
              <% if(typeof(use_waiter) != "undefined"){ %>
                <a href="#" tabindex="-1" id="use-waiter" class="<%= (typeof(waiter_enabled) != "undefined" && waiter_enabled) ? "" : "use-waiter-disabled" %> trtitle" data-enabled="<%= (typeof(waiter_enabled) != "undefined" && waiter_enabled) ? "true" : "false" %>" data-toggle="tooltip" data-placement="top" title="<%= (typeof(waiter_title) != "undefined") ? waiter_title : "Wait full page load after this action" %>"><i class="fa fa-clock-o" aria-hidden="true"></i></a>

              <% } %>

              <% if(typeof(use_target) != "undefined"){ %>
                <a href="#" tabindex="-1" id="use-target" class="<%= (typeof(target_enabled) != "undefined" && target_enabled) ? "" : "use-target-disabled" %> trtitle" data-enabled="<%= (typeof(target_enabled) != "undefined" && target_enabled) ? "true" : "false" %>" data-toggle="tooltip" data-placement="top" title="Toggle target. Apply this action only to specific url or to specific tab."><i class="fa fa-dot-circle-o" aria-hidden="true"></i></a>

              <% } %>

              <% if(typeof(use_timeout) != "undefined"){ %>
                <a href="#" tabindex="-1" id="use-timeout" data-value="<%= (typeof(timeout_value) != "undefined" && timeout_value > 0) ? timeout_value : "0" %>" class="<%= (typeof(timeout_value) != "undefined" && timeout_value > 0) ? "" : "use-timeout-disabled" %> trtitle"  data-enabled="<%= (typeof(timeout_value) != "undefined" && timeout_value > 0) ? "true" : "false" %>" data-toggle="tooltip" data-placement="top" title="Maximum time to perform an action.">
                  <i class="fa fa-hourglass-end" aria-hidden="true" ><small id="timeout-is-default" class="tr" <%= (typeof(timeout_value) != "undefined" && timeout_value > 0) ? "style='display:none'" : "" %> >default </small></i><small id="timeout-val"><%= (typeof(timeout_value) != "undefined" && timeout_value > 0) ? ("" + timeout_value) : "" %></small></a>
              <% } %>

              <% if(typeof(use_move) != "undefined"){ %>
                <a href="#" tabindex="-1" id="use-move" class="<%= (typeof(move_enabled) != "undefined" && move_enabled) ? "" : "use-move-disabled" %> trtitle" data-enabled="<%= (typeof(move_enabled) != "undefined" && move_enabled) ? "true" : "false" %>" data-toggle="tooltip" data-placement="top" title="Tweak speed and other parameters for mouse move."><i class="fa fa-sliders" aria-hidden="true"></i></a>
              <% } %>
    
              <% if(typeof(use_scroll_params) != "undefined"){ %>
                <a href="#" tabindex="-1" id="use-scroll-params" class="<%= (typeof(scroll_params_enabled) != "undefined" && scroll_params_enabled) ? "" : "use-scroll-params-disabled" %> trtitle" data-enabled="<%= (typeof(scroll_params_enabled) != "undefined" && scroll_params_enabled) ? "true" : "false" %>" data-toggle="tooltip" data-placement="top" title="Tweak speed and other scrolling parameters."><i class="fa fa-sliders" aria-hidden="true"></i></a>
              <% } %>
    
              <% if(typeof(use_emulation) != "undefined"){ %>
                <a href="#" tabindex="-1" id="use-emulation" class="<%= (typeof(emulation_enabled) != "undefined" && emulation_enabled) ? "" : "use-emulation-disabled" %> trtitle" data-enabled="<%= (typeof(emulation_enabled) != "undefined" && emulation_enabled) ? "true" : "false" %>" data-toggle="tooltip" data-placement="top" title="Tweak emulation before action.">
                  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                    <path d="M9 3.5V2M5.06066 5.06066L4 4M5.06066 13L4 14.0607M13 5.06066L14.0607 4M3.5 9H2M8.5 8.5L12.6111 21.2778L15.5 18.3889L19.1111 22L22 19.1111L18.3889 15.5L21.2778 12.6111L8.5 8.5Z" stroke="#31708f" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
                  </svg>
                </a>
              <% } %>
            <% } %>
          </div>

          <% if (typeof(only_cancel) === 'undefined' && visible) { %>
            <div class="back-container-right">
              <div class="input-group-btn execute-type" id="executeType">
                <button tabindex="-1" type="button" class="btn dropdown-toggle execute-type-btn" id="executeTypeValue" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-placement="top" title="<%= tr(`By default action will be added to scenario panel and executed. Change this option if action must only be executed or only added to scenario panel.`) %>"></button>
                <ul class="dropdown-menu dropdown-black execute-type-menu dropdown-menu-right" data-auto-width="menu">
                  <li class="dropdown-item dropdown-border" >
                    <a tabindex="-1" href="#" class="btn execute-type-item" data-action="add" data-placement="top" data-toggle="tooltip" title="<%= tr(`Don't execute this action but save it to script tab.`) %>">
                      <svg class="dropdown-icon" width="20" height="16" viewBox="0 0 20 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                        <path d="M9.375 3.375H10.625V6.5H13.75V7.75H10.625V10.875H9.375V7.75H6.25V6.5H9.375V3.375Z" fill="#606060" />
                        <path d="M0.625 15.625V0.375H19.375V15.625H0.625ZM18.125 1.625H1.875V13.125H18.125V1.625Z" fill="#606060" />
                      </svg>                      
                      <span class="dropdown-text execute-type-text"><%= tr('Only add') %></span>
                    </a>
                  </li>
                  <li class="dropdown-item dropdown-border">
                    <a tabindex="-1" href="#" class="btn execute-type-item" data-action="execute" data-placement="top" data-toggle="tooltip" title="<%= tr(`Execute this action and don't save it to script tab.`) %>">
                      <svg class="dropdown-icon" width="20" height="16" viewBox="0 0 20 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                        <path fill-rule="evenodd" clip-rule="evenodd" d="M8.99974 10.516L14.8898 4.6666L14.0024 3.73242L8.99992 8.65567L6.74752 6.44294L5.86035 7.3768L8.99974 10.516Z" fill="#606060"/>
                        <path d="M0.625 15.625V0.375H19.375V15.625H0.625ZM18.125 1.625H1.875V13.125H18.125V1.625Z" fill="#606060" />
                      </svg>                      
                      <span class="dropdown-text execute-type-text"><%= tr('Only execute') %></span>
                    </a>
                  </li>
                  <li class="dropdown-item dropdown-border">
                    <a tabindex="-1" href="#" class="btn execute-type-item" data-action="executeandadd" data-placement="top" data-toggle="tooltip" title="<%= tr(`Execute this action and save it to script tab.`) %>">
                      <svg class="dropdown-icon" width="20" height="16" viewBox="0 0 20 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                        <path d="M7.41573 6.49994H8.38202H14V7.74994H8.38202H7.41573H5V6.49994H7.41573Z" fill="#606060" />
                        <path d="M15.1265 7.11752L14.2426 8.0014L10 3.75876L10.8839 2.87488L15.1265 7.11752Z" fill="#606060" />
                        <path d="M10.8838 11.3603L9.99991 10.4765L14.2426 6.23383L15.1264 7.11771L10.8838 11.3603Z" fill="#606060" />
                        <path d="M0.625 15.625V0.375H19.375V15.625H0.625ZM18.125 1.625H1.875V13.125H18.125V1.625Z" fill="#606060" />
                      </svg>                      
                      <span class="dropdown-text execute-type-text"><%= tr('Execute and add') %></span>
                    </a>
                  </li>
                </ul>
              </div>
            </div>
          <% } %>
        </div>
      </div>
    </div>
  </script>

  <script type="text/template" id="variable_constructor">
    <span data-preserve="true" data-preserve-type="var" data-preserve-id="<%= id %>"
      <%= (typeof(visible_if_checked) == "string") ? "data-visible-if-checked='" + visible_if_checked + "' " : "" %>
      <%= (typeof(visible_if_unchecked) == "string") ? "data-visible-if-unchecked='" + visible_if_unchecked + "' " : "" %>
     >
      <div class="col-xs-12">
        <form class="form-horizontal">
          <div class="form-group">
            <div class="col-xs-12">
              <div class="input-group">
                <input class="form-control variable-input" style='color:#529653;'  type="text" id="<%= id %>" placeholder="<%= description %>" value="<%= default_variable %>" data-variable-constructor="true" <%= (typeof(append_mode) != "undefined") ? "data-append-array=\"true\"" : "" %> >
                
                <ul class="dropdown-menu input-field-dropdown dropdown-align dropdown-black" data-toggle="dropdown">
                  <li class="dropdown-border">
                    <a  style="display: flex; align-items: center;  justify-content: start;" tabindex="-1" href="#" data-toggle="modal" data-result-target="#<%= id %>" class="var" data-toggle="modal" data-target="#VariableModal" data-result-target="#<%= id %>" <%= (typeof(disable_locals) != "undefined") ? "disable_locals=\"true\"" : "" %> <%= (typeof(enable_globals) != "undefined") ? "":"disable_globals=true" %> >
                      <svg class="dropdown-icon" width="16" height="16"  viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"  style="margin-right:10px">
                        <path d="M7.5 12h1V9.5H11v-1H8.5V6h-1v2.5H5v1h2.5V12z" fill="#fff" />
                        <path d="M.5 2v12h15V2H.5zm14 11h-13V5h13v8z" fill="#fff" />
                      </svg>
                      <span class="tr"  style="font-size:12px;">Insert existing variable</span>
                    </a>
                  </li>
                </ul>

                <span class="input-group-addon input-description"><%= description %>
                  <% if(typeof(help) == "object"){ %>
                    <!--<i class="fa fa-question-circle help-input" data-toggle="tooltip" data-html="true" title="<%= _.escape(_.template($("#tooltip-input").html())({title:description,description:help["description"],examples:help["examples"]})) %>" ></i>-->

                    <i style="cursor: pointer;" class="fa fa-question-circle help-input" data-toggle="popup" data-html="true" title="<%= _.escape(_.template($("#help_popup").html())({title:description,description:help["description"],examples:help["examples"]})) %>" ></i>

                  <% } %>
                </span>
              </div>
            </div>

          </div>
        </form>
      </div>
    </span>
  </script>

  <script type="text/template" id="selector_menu">
    <ul tabindex="-1" class="dropdown-menu dropdown-menu-with-breaks dropdown-menu-css-options dropdown-black selector-menu" style="font-size:smaller;">
      <% if("css1" in selector && selector["css1"].length > 0) { %>
        <li class="dropdown-border"><a tabindex="-1" href="#" class="dropdown-menu-css-item" data-selected="true"><%= selector["css1"] %></a></li>
      <% }else{ %>  
        <li class="dropdown-border"><a tabindex="-1" href="#" class="dropdown-menu-css-item"><%= selector["css"] %></a></li>
      <% } %>
      <% if("css2" in selector && selector["css2"].length > 0) { %>
        <li class="dropdown-border"><a tabindex="-1" href="#" class="dropdown-menu-css-item"><%= selector["css2"] %></a></li>
      <% } %>

      <% if("css3" in selector && selector["css3"].length > 0) { %>
        <li class="dropdown-border"><a tabindex="-1" href="#" class="dropdown-menu-css-item"><%= selector["css3"] %></a></li>
      <% } %>

      <li class="dropdown-border">
        <a tabindex="-1" href="#" data-toggle="modal" data-result-target="#selector-input" class="res" style="display: flex; align-items: center;  justify-content: start;" >
          <svg class="dropdown-icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right:10px">
            <path d="M1.5 1.5v13h13v-13h-13zm12 12h-11v-3h11v3zm0-4h-11v-3h11v3zm-1.5-6a.5.5 0 110 1 .5.5 0 010-1z" fill="#fff" />
            <path d="M12 8.5a.5.5 0 100-1 .5.5 0 000 1zM12 12.5a.5.5 0 100-1 .5.5 0 000 1z" fill="#fff" />
          </svg>
            <span class="tr" style="font-size:12px;margin-right:10px">Load from file, user input, database</span>
        </a>
      </li>

      <li class="dropdown-border">
        <a tabindex="-1" href="#" data-toggle="modal" data-result-target="#selector-input" class="var" style="display: flex; align-items: center;  justify-content: start;" >
          <svg class="dropdown-icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right:10px">
            <path d="M7.5 12h1V9.5H11v-1H8.5V6h-1v2.5H5v1h2.5V12z" fill="#fff" />
            <path d="M.5 2v12h15V2H.5zm14 11h-13V5h13v8z" fill="#fff" />
          </svg>
            <span class="tr" style="font-size:12px;margin-right:10px">Insert variable</span>
        </a>
      </li>

      
    </ul>

  </script>

  <script type="text/template" id="resource_constructor">
    <span data-preserve="true" data-preserve-type="var" data-preserve-id="<%= id %>">
      <div class="col-xs-12">
        <form class="form-horizontal">
          <div class="form-group">
            <div class="col-xs-12">
              <div class="input-group">
                <input class="form-control resource-input" type="text" id="<%= id %>" placeholder="<%= description %>" value="" data-resource-constructor="true" />

                <ul class="dropdown-menu input-field-dropdown dropdown-align dropdown-black" data-toggle="dropdown">
                  <li>
                    <a tabindex="-1" href="#" data-toggle="modal" data-result-target="#<%= id %>" class="res" data-toggle="modal" data-target="#RecourseModal" data-result-target="#<%= id %>">
                      <i class="fa fa-database"/>
                        <span class="tr">Select resource</span>
                    </a>
                  </li>
                </ul>

                <span class="input-group-addon input-description"><%= description %>
                  <% if(typeof(help) == "object"){ %>
                    <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-html="true" title="<%= _.escape(_.template($("#tooltip-input").html())({title:description,description:help["description"],examples:help["examples"]})) %>" ></i>
                  <% } %>
                </span>
              </div>
            </div>
          </div>
        </form>
      </div>
    </span>
  </script>

  <script type="text/template" id="path">
    <div class="path" >
      <% if(selector["is_image"]){ %>


      <% }else{ %>
        <% if(typeof(disable_options) == "undefined"){ %>

          <span <%= (typeof(hide_options) != "undefined") ? 'style="display:none"':'' %> >
            <%= _.template($('#block_start').html())({id: "IfElementMissingSettings", name: tr("If element missing"), smaller_fonts: true, description: tr("")}) %>
            
              <%= _.template($('#checkbox').html())({id: "checkbox-wait-element", title: tr("Wait for element."), checked: (typeof(waitelement) != "boolean" || waitelement), dont_preserve: true, help: 
                {
                  description: tr("This setting allows you to decide whether to wait for the desired element if it is not found on the page"), 
                  examples:[
                    {code:tr("Activated"),description:tr("Wait a certain time for the element to appear. The exact amount of time by default is one minute, which can be changed by clicking on the hourglass icon below.")},
                    {code:tr("Deactivated"),description:tr("Action will finish instantly no matter if element is present on page or not.")}
                  ]
                }
              }) %>
              <%= _.template($('#checkbox').html())({id: "checkbox-fail-action", title: tr("Fail thread if element not found."), smaller_fonts: true, checked: (typeof(failaction) != "boolean" || failaction), dont_preserve: true, help: 
                {
                  description: tr("If thread must be stopped with error when specified element is not present on page. You can process this error later by using 'Ignore errors' action."), 
                  examples:[
                    {code:tr("Activated"),description:tr("If element is not found on page, thread will be stopped.")},
                    {code:tr("Deactivated"),description:tr("If element is not found on page, this action will be skipped, thread execution will continue.")}
                  ]
                }
              }) %>
            <%= _.template($('#block_end').html())() %>
          </span>
        <% } %>
        
      <% } %>   

      <div class="col-xs-12">
        <form class="form-horizontal" onsubmit="return false;">
          <div class="form-group">
            <div class="col-xs-12">


              <% if(selector["is_image"]){ %>
                <table id="ImageTable">
                  <tr>
                    <td align="center">
                      <a href="#" id="ImageDataRef">
                        <img id="ImageData" style="max-width:300px;"/>
                      </a>
                    </td>
                    <td style="width:100%;" valign="top">
                      <% if(typeof(disable_options) == "undefined"){ %>
                        
                        <span <%= (typeof(hide_options) != "undefined") ? 'style="display:none"':'' %> >

                          <%= _.template($('#checkbox').html())({id: "checkbox-wait-element", title: tr("Wait for element."), checked: (typeof(waitelement) != "boolean" || waitelement), dont_preserve: true, help: 
                            {
                              description: tr("This setting allows you to decide whether to wait for the desired element if it is not found on the page"), 
                              examples:[
                                {code:tr("Activated"),description:tr("Wait a certain time for the element to appear. The exact amount of time by default is one minute, which can be changed by clicking on the hourglass icon below.")},
                                {code:tr("Deactivated"),description:tr("Action will finish instantly no matter if element is present on page or not.")}
                              ]
                            }
                          }) %>
                
                          <%= _.template($('#checkbox').html())({id: "checkbox-fail-action", title: tr("Fail thread if element not found."), checked: (typeof(failaction) != "boolean" || failaction), dont_preserve: true, help: 
                            {
                              description: tr("If thread must be stopped with error when specified element is not present on page. You can process this error later by using 'Ignore errors' action."), 
                              examples:[
                                {code:tr("Activated"),description:tr("If element is not found on page, thread will be stopped.")},
                                {code:tr("Deactivated"),description:tr("If element is not found on page, this action will be skipped, thread execution will continue.")}
                              ]
                            }
                          }) %>
                
                        </span>
                      <% } %>

                    </td>
                  </tr>
                </table>
                

              <% } else { %>
                


                <div class="input-group">
                    <input type="text" class="form-control dropdown-menu-path" aria-label="..." id="selector-input" onblur="$('#wiki-selector img').css('opacity','0.45');$('#wiki-selector img').attr('src','wiki.png')" onfocus="$('#wiki-selector img').css('opacity','0.8');$('#wiki-selector img').attr('src','wiki_red.png')" />
                    
                    <%= _.template($('#selector_menu').html())({selector:selector}) %>

                    <ul tabindex="-1" class="dropdown-menu dropdown-menu-with-breaks dropdown-menu-match-xpath-at-css-options dropdown-black" style="font-size:smaller;">
      
                      <li class="dropdown-border">
                        <a tabindex="-1" href="#" data-toggle="modal" data-result-target="#selector-input" class="res" style="display: flex; align-items: center;  justify-content: start;" >
                          <svg class="dropdown-icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right:10px">
                            <path d="M1.5 1.5v13h13v-13h-13zm12 12h-11v-3h11v3zm0-4h-11v-3h11v3zm-1.5-6a.5.5 0 110 1 .5.5 0 010-1z" fill="#fff" />
                            <path d="M12 8.5a.5.5 0 100-1 .5.5 0 000 1zM12 12.5a.5.5 0 100-1 .5.5 0 000 1z" fill="#fff" />
                          </svg>
                            <span class="tr" style="font-size:12px;margin-right:10px">Load from file, user input, database</span>
                        </a>
                      </li>
                
                      <li class="dropdown-border">
                        <a tabindex="-1" href="#" data-toggle="modal" data-result-target="#selector-input" class="var" style="display: flex; align-items: center;  justify-content: start;" >
                          <svg class="dropdown-icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right:10px">
                            <path d="M7.5 12h1V9.5H11v-1H8.5V6h-1v2.5H5v1h2.5V12z" fill="#fff" />
                            <path d="M.5 2v12h15V2H.5zm14 11h-13V5h13v8z" fill="#fff" />
                          </svg>
                            <span class="tr" style="font-size:12px;margin-right:10px">Insert variable</span>
                        </a>
                      </li>
                
                      
                    </ul>

                    <span class="input-group-addon input-description">
                      <span class="tr">Element selector</span> ( <span class="tr">found</span> <a href="#" onclick="return false;" id="PathCount" class="text-info">0</a> ) 
                      <a id="wiki-selector" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=' + ((typeof(_K) == 'string' && _K == 'ru') ? 'ru:':'') + 'how_to_search_for_element');return false" href="#">
                        <img src="wiki.png" class="wiki-link tr" data-toggle="tooltip" data-placement="top" title="<%= tr("How to search for element") %>"/> 
                      </a>
                    </span>

                    <div class="input-group-btn">
                      <button tabindex="-1" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span id="selector"><%= selector["current"] %></span> <span class="caret"></span></button>
                      <ul class="dropdown-menu dropdown-menu-with-breaks dropdown-menu-right"">
                        <li><a tabindex="-1" id="css" style="cursor:pointer">
                          <strong>css</strong> - <span class="tr type-description">Find element with css selector. &gt;CSS&gt; .element-class - find by class</span>
                          <br/><span class="tr type-description">&gt;CSS&gt; #element-id - find by id, &gt;CSS&gt; [attribute*="value part"] - find element, with attribute, that contains "value part"</span>
                        </a></li>
                        <li><a tabindex="-1" id="match" style="cursor:pointer">
                            <strong>match</strong> - <span class="tr type-description">Find by markup part. &gt;MATCH&gt;title="Search" and &gt;MATCH&gt;&lt;div title</span>
                            <br/><span class="tr type-description">will find element with markup &lt;div title="Search"&gt;Text&lt;/div&gt;</span>
                        </a></li>
                        <li><a tabindex="-1" id="xpath" style="cursor:pointer">
                          <strong>xpath</strong> - <span class="tr type-description">Find by xpath. &gt;XPATH&gt; //*[@id='element-parent'] - find el by id</span>
                          <br/><span class="tr type-description">&gt;XPATH&gt; //*[contains(@attribute,'value part')] - find element, with attribute, that contains "value part"</span></a></li>
                        <li><a tabindex="-1" id="at" style="cursor:pointer">
                            <strong>at</strong> - <span class="tr type-description">Find by coordinates. Consider using actions which works with coordinates not at selector.</span>
                        </a></li>
                        <li><a tabindex="-1" id="none" style="cursor:pointer">
                          <strong>none</strong> - <span class="tr type-description">Find root element(body). This type of selector is useful if you make screenshot of whole page.</span>
                        </a></li>
                      </ul>
                    </div>

                </div>
                
                  
                

                
              <% } %>


            </div>
          </div>
        </form>
      </div>
    </div>

    <% if(typeof(is_multiple_elements) == "boolean" && is_multiple_elements){ %>
      <div id="selector-ai" data-generation="">
        <%= _.template($('#info').html())({description: 
          `
            <span class="tr">Selector for these elements was generated by ai. Elements description</span> - "<span id="selector-ai-name"></span>". 
            <span id="selector-ai-before-update">
              <span class="tr">Ai generated selectors are not always accurate, so you can tweak current selector manually by clicking on elements inside browser.</span>
              <span class="tr">Once you have verified that the selector is correct, click on following link</span> - 
                <a href="#" onclick="$('#selector-ai').hide();_SelectorModel.set('is_ai_generated', false);return false;" class="tr">keep current selector</a>.
              
            </span>
          `, color: "red"}) %>
      </div>
    <% } else { %>    
      <div id="selector-ai" data-generation="">
        <%= _.template($('#info').html())({description: 
          `
            <span class="tr">Selector for this element was generated by ai. Element description</span> - "<span id="selector-ai-name"></span>". 
            <span id="selector-ai-before-update">
              <span class="tr">Ai generated selectors are not always accurate, so you can</span>
                <a onclick="$('#selector-ai-before-update').hide();$('#selector-ai-after-update').show();BrowserAutomationStudio_UpdateSelector();return false;" href="#" class="tr">generate new selector manually</a>
                <span class="tr">or</span>
                <a href="#" onclick="$('#selector-ai').hide();_SelectorModel.set('is_ai_generated', false);return false;" class="tr">keep current selector</a>
              <span class="tr">if it fits you</span>.
            </span>
            <span id="selector-ai-after-update" class="tr">You can now select new element in browser window.</span>
          `, color: "red"}) %>
      </div>
    <% } %>  
    
      <% if(selector["is_image"]){ %>

          <%= _.template($('#block_start').html())({id: "SearchImageBlock", name: tr("Search image settings"), smaller_fonts: true, description: tr("")}) %>
            <%= _.template($('#input_constructor').html())({id:"Scroll", description:tr("Scroll to search for image"), default_selector: "string", disable_int:true, value_string: "scroll", variants: ["scroll", "no scroll"],  
              help: {description: tr("If page will be scrolled to find image. \"no scroll\" option can save time, but if element is located on page bottom, than it won't be found. If you are sure, that element is located inside viewport, use \"no scroll\", otherwise - \"scroll\"")}
            }) %>
            <%= _.template($('#input_constructor').html())({id:"Threshold", description:tr("How well the image must fit. 100 - exactly fits, 0 - does not fit at all."), default_selector: "int", disable_string:true, value_number:80, min_number:0, max_number:100, help: {description: tr("Finding image searches for best matching picture on a screen and checks matching quality. If this quality is good enough, searching will end with success, otherwise search will be performed again and again until desired quality will be achieved. This value sets quality threshold. 80 will do almost for every task, including deformated images. Use 0 if you want search image only once. Values close to 100 will find image exactly as sample.")}}) %>
            <%= _.template($('#input_constructor').html())({id:"ImageBase64", description:tr("Image data as base64"), default_selector: "string", disable_int:true, disable_editor:true, disable_string:true, use_textarea:true, size: 4, disable_type_chooser:true, textarea_height: 74, help: {description: tr("Image data in base64 format")} }) %>
          <%= _.template($('#block_end').html())() %>
        


      <% }else{ %>
        
        
      <% } %>    

  </script>

  <script type="text/template" id="tooltip-input">
    <div style='text-align:left;min-width:200px'>
      <strong><u><%= title %></u></strong>
      <% if(typeof(description) != "undefined"){ %>
        <div style='font-style: italic;font-size:small;margin-top:5px'><%= description %></div>
      <% } %>
      <% if(typeof(examples) != "undefined"){ %>
        <% for(let i = 0; i < examples.length; i++){%>
          <% let example = examples[i]; %>
          <% if(i == 0){ %>
            <div style='margin-top:5px;' class='tr'><strong><u><%= tr('Examples : ') %></u></strong></div>
          <% } %>
          <div style='font-size:small;' > <strong> <%= example["code"] %> </strong> 
            <% if(typeof(example["description"]) != "undefined"){ %>
              - <%= example["description"] %> 
            <% } %>
          </div>

        <% } %>
      <% } %>
    </div>
  </script>

  <script type="text/template" id="help_popup">
    <div class="help-popup-container" style="text-align: left">
      <h6 class="help-popup-header help-popup-header-first"><%= title %></h6>
      <% if (typeof(description) != "undefined") { %>
        <div class="help-popup-text"><%= description %></div>
      <% } %>
      <% if (typeof(examples) !== 'undefined' && examples.length) { %>
        <h6 class="help-popup-header help-popup-header-second"><%= tr('Examples: ') %></h6>
        <% examples.forEach((example) => { %>
          <div class="help-popup-example">
            <span class="help-popup-code"><%= example.code %></span> 
            <% if (typeof(example.description) !== 'undefined') { %>
              <span class="help-popup-text">- <%= example.description %></span>
            <% } %>
          </div>
        <% }) %>
      <% } %>
    </div>
  </script>

  <script type="text/template" id="input_constructor">
    <span 
     <% if(typeof(dont_preserve) != "boolean" || !dont_preserve){ %>
      data-preserve="true" 
     <% } %>
     data-preserve-type="constr" data-preserve-id="<%= id %>" 
        <%= (typeof(visible_if_checked) == "string") ? "data-visible-if-checked='" + visible_if_checked + "' " : "" %>
        <%= (typeof(visible_if_unchecked) == "string") ? "data-visible-if-unchecked='" + visible_if_unchecked + "' " : "" %>
      >
      <% if(typeof(dont_use_top) == "undefined"){ %>
        <div class="col-xs-12">
        <form class="form-horizontal">
          <div class="form-group">
          <% } %>
            <% if(typeof(dont_use_col) == "undefined"){ %>
            <div class="col-xs-12">
            <% } %>
              <% if(typeof(use_textarea) == "undefined"){ %>
               <div class="input-group" style="width:100%">
               

              <% } %>
                <<%= (typeof(use_textarea) == "undefined") ? "input type=\"text\"" : ("textarea style=\"resize: vertical;height:" + ((typeof(textarea_height) == "undefined") ? 146 : textarea_height ) + "px\"") %>  
                class="form-control input_selector_string" id="<%= id %>" <%= (default_selector == "int") ? "style=\"display:none\"" : "" %>
                placeholder="<%= je(description).replace(/\\n/g,"&#10;") %>" 
                <%= (typeof(replace_linebreaks) != "undefined") ? "data-replace-linebreaks='true' " : "" %>
                value="<%= (typeof(value_string) != "undefined") ? value_string : ((typeof(value_expression) != "undefined") ? eval(value_expression) : "") %>" <%= (typeof(use_textarea) == "undefined") ? "/>" : (">" + ((typeof(value_string) != "undefined") ? value_string : ((typeof(value_expression) != "undefined") ? eval(value_expression) : "")) + "\<\/textarea>") %>
                <input class="form-control input_selector_number" type="number" id="<%= id %>_number" <%= (default_selector != "int") ? "style=\"display:none\"" : "" %> placeholder="<%= je(description) %>" value="<%= (typeof(value_number) != "undefined") ? value_number : 1%>" <%= (typeof(value_number) != "undefined") ? "" : "data-no-default=\"true\""%>" step="<%= (typeof(step_number) != "undefined") ? step_number : 1%>" min="<%= (typeof(min_number) != "undefined") ? min_number : 0%>" max="<%= (typeof(max_number) != "undefined") ? max_number : 10000%>" />
                
                <% if(typeof(use_textarea) != "undefined" && (typeof(help) == "object" || typeof(modal_code_id) == "string")){ %>
                  <div style="position: relative;top: -25px;left: -10px;">
                    <div style="float: right; height: 0px;">
                      <% if(typeof(help) == "object"){ %>
                        <!--<i class="fa fa-question-circle help-input" data-toggle="tooltip" data-html="true" title="<%= _.escape(_.template($("#tooltip-input").html())({title:description,description:help["description"],examples:help["examples"]})) %>" ></i>-->
                        <i style="cursor: pointer;" class="fa fa-question-circle help-input" data-toggle="popup" data-additional-type="textarea" data-html="true" title="<%= _.escape(_.template($("#help_popup").html())({title:description,description:help["description"],examples:help["examples"]})) %>" ></i>

                      <% } %>
                      <% if(typeof(modal_code_id) == "string"){ %>
                        <a onclick="bootbox.alert({message: $('#<%= modal_code_id %>').html(), size: 'large'});return false;" href="#"><i class="fa fa-question-circle help-input"></i>  </a>
                      <% } %>
                    </div>
                  </div>
                <% } %>

                <% if((typeof(variants) != "undefined" && variants != null) || typeof(disable_editor) == "undefined" || typeof(disable_resource) == "undefined" || typeof(disable_variable) == "undefined") { %>
                  <ul class="dropdown-menu dropdown-menu-with-breaks input-field-dropdown dropdown-align dropdown-black" data-toggle="dropdown" data-use-hotkeys="true">
                    <% if(typeof(variants) != "undefined") { %>
                      <% for(var i = 0;i<variants.length;i++) { %>
                        <% var variant = typeof(variants[i]) == "object" ? variants[i] : variants[i].toString() %>
                        <% var variant_value = typeof(variant) == "object" ? variant.value : variant.split('<br/>')[0] %>
                        <% var variant_type = (typeof(variant) == "object" ? variant.type : "") || "" %>
                        <% var variant_description = (typeof(variant) == "object" ? variant.description : variant.split('<br/>').slice(1).join('<br/>')) || "" %>
                        <li>
                          <a style="padding-top:5px;padding-bottom:5px;" tabindex="-1" href="#" data-toggle="modal"  data-variant="<%= variant_value %>" data-variant-type="<%= variant_type %>" data-result="<%= id %>" class="variant" >
                            <span><%= variant_value %><% if (variant_description!=="") { %><br/><% if (variant_description.indexOf("color:gray;font-size:small") < 0) { %><span style='color:gray;font-size:small'><% } %><%= variant_description %><% if (variant_description.indexOf("color:gray;font-size:small") < 0) { %></span><% } %><% } %></span>
                          </a>
                        </li>
                      <% } %>
                      <% if(typeof(disable_separator) == "undefined") { %>
                        
                      <% } %>
                    <% } %>

                    <% if(typeof(disable_editor) == "undefined") { %>
                      <li class="dropdown-border">
                        <a tabindex="-1" href="#" data-toggle="modal" data-result-target="#<%= id %>" class="edit" style="display: flex; align-items: center;  justify-content: start;">
                          <svg class="dropdown-icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right:10px">
                            <path d="M15.989 3.388V.005h-3.382v1.23H7.38v6.457H3.382v-1.23H0v3.382h3.382v-1.23H7.38v6.15h5.227v1.23h3.382v-3.382h-3.382v1.23H8.302V8.615h4.305v1.23h3.382V6.463h-3.382v1.23H8.302V2.158h4.305v1.23h3.382zM2.46 8.922H.922V7.385H2.46v1.537z" fill="#fff" />
                          </svg>
                            <span class="tr" style="font-size:12px;margin-right:10px">Create value in visual constructor</span>
                            <span style="float:right;margin-left:auto;opacity: 0.5;">F6</span>
                        </a>
                      </li>
                    <% } %>
                    <% if(typeof(disable_resource) == "undefined") { %>
                      <li class="dropdown-border">
                        <a tabindex="-1" href="#" data-toggle="modal" data-result-target="#<%= id %>" class="res" style="display: flex; align-items: center;  justify-content: start;" >
                          <svg class="dropdown-icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right:10px">
                            <path d="M1.5 1.5v13h13v-13h-13zm12 12h-11v-3h11v3zm0-4h-11v-3h11v3zm-1.5-6a.5.5 0 110 1 .5.5 0 010-1z" fill="#fff" />
                            <path d="M12 8.5a.5.5 0 100-1 .5.5 0 000 1zM12 12.5a.5.5 0 100-1 .5.5 0 000 1z" fill="#fff" />
                          </svg>
                            <span class="tr" style="font-size:12px;margin-right:10px">Load from file, user input, database</span>
                            <span style="float:right;margin-left:auto;opacity: 0.5;">F7</span>
                        </a>
                      </li>
                    <% } %>
                    <% if(typeof(disable_variable) == "undefined") { %>
                      <li class="dropdown-border">
                        <a tabindex="-1" href="#" data-toggle="modal" data-result-target="#<%= id %>" class="var" style="display: flex; align-items: center;  justify-content: start;" >
                          <svg class="dropdown-icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right:10px">
                            <path d="M7.5 12h1V9.5H11v-1H8.5V6h-1v2.5H5v1h2.5V12z" fill="#fff" />
                            <path d="M.5 2v12h15V2H.5zm14 11h-13V5h13v8z" fill="#fff" />
                          </svg>
                            <span class="tr" style="font-size:12px;margin-right:10px">Insert variable</span>
                            <span style="float:right;margin-left:auto;opacity: 0.5;">F8</span>
                        </a>
                      </li>
                    <% } %>
                  </ul>
                <% } %>

                <% if(typeof(use_textarea) == "undefined" && typeof(disable_label) == "undefined" && typeof(description) == "string" && description.length > 0){ %>
                  <span  tabindex="-1" class="input-group-addon input-description"><%= description %> 
                    <% if(typeof(help) == "object"){ %>
                      <!--<i class="fa fa-question-circle help-input" data-toggle="tooltip" data-html="true" title="<%= _.escape(_.template($("#tooltip-input").html())({title:description,description:help["description"],examples:help["examples"]})) %>" ></i>-->
                      <i style="cursor: pointer;" class="fa fa-question-circle help-input" data-toggle="popup" data-html="true" title="<%= _.escape(_.template($("#help_popup").html())({title:description,description:help["description"],examples:help["examples"]})) %>" ></i>
                    <% } %>
                     
                   </span>
                <% } %>

                
                
                <div 
                  class="input-group-btn dropdown-input-type" <%= (typeof(disable_type_chooser) != "undefined") ? "style=\"display:none\"" : "" %>>
                  <button  tabindex="-1" type="button" class="btn btn-default dropdown-toggle dropdown-input-type" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="selector" data-selector-id="<%= id %>"><%= default_selector %></span> <span class="caret"></span></button>
                  <ul class="dropdown-menu dropdown-menu-with-breaks dropdown-menu-right">
                    <% if(typeof(disable_string) == "undefined") { %>
                      <li><a class="string" class="tr" style="cursor: pointer;">
                        <strong>string</strong>
                        <span class="type-description">
                          <span class="tr">Field content will be treated as string. If you input test@gmail.com, result will be "test@gmail.com".</span>
                            <br/>
                          <span class="tr">Variables and resuorces will be replaced by values. If you input [[USERNAME]], result will be "my_username"</span>
                            <br/>
                          <span class="tr">[[USERNAME]]@gmail.com will give "my_username@gmail.com"</span>
                        </span>
                      </a></li>
                    <% } %>

                    <% if(typeof(disable_int) == "undefined") { %>
                      <li><a class="int" style="cursor: pointer;"><strong>int</strong>
                        <span class="tr type-description">Field content will be treated as number.</span></a></li>
                    <% } %>

                    <% if(typeof(disable_expression) == "undefined") { %>
                      <li><a class="expression" style="cursor: pointer;">
                        <strong>expression</strong>
                        <span class="type-description">
                            <span class="tr">Field content will be treated as javascript code. "test@gmail.com" will convert to "test@gmail.com".</span>
                             <br/> 
                            <span class="tr">Variables and resuorces will be replaced by values. If you input [[USERNAME]], result will be "my_username"</span>
                             <br/> 
                            <span class="tr">[[USERNAME]] + "@gmail.com" will give "my_username@gmail.com". 2 + 2 will give 4.</span>
                             <br/> 
                            <span class="tr">Javascript expressions can be complex. [[USERNAME]].split("_")[0] will give "my".</span>
                          </span></a></li>
                    <% } %>
                  </ul>
                </div>

              <% if(typeof(use_textarea) == "undefined"){ %>

                </div>
              <% } %>
            <% if(typeof(dont_use_col) == "undefined"){ %>
              </div>
            <% } %>

            <% if(typeof(dont_use_top) == "undefined"){ %>
            </div>

        </form>
      </div>
      <% } %>
    </span>

  </script>

  <script type="text/template" id="filter">
    <% if (typeof(hide) != "undefined" && hide) { %>
      <%= _.template($('#block_start').html())({
        id: "Filter" + id,
        name: name,
        description: (typeof(help) == "object" && help.description ? help.description : ""),
        visible_if_checked: typeof(visible_if_checked) == "string" ? visible_if_checked : undefined,
        visible_if_unchecked: typeof(visible_if_unchecked) == "string" ? visible_if_unchecked : undefined
      }) %>
    <% } %>
    <span data-preserve="true" data-preserve-type="filter" data-preserve-id="<%= id %>" 
        <%= ((typeof(hide) == "undefined" || !hide) && typeof(visible_if_checked) == "string") ? "data-visible-if-checked='" + visible_if_checked + "' " : "" %>
        <%= ((typeof(hide) == "undefined" || !hide) && typeof(visible_if_unchecked) == "string") ? "data-visible-if-unchecked='" + visible_if_unchecked + "' " : "" %>
      >
      <% if (typeof(hide) == "undefined" || !hide) { %>
        <div class="filter-header">
          <div class="filter-title">
            <div class="col-xs-12">
              <span> <%= name %></span> 
              <% if(typeof(help) == "object" && help){ %>
                <i style="margin-left:5px;cursor: pointer" class="fa fa-question-circle help-input" data-toggle="popup" data-additional-type="select" data-html="true" title="<%= _.escape(_.template($('#help_popup').html())({title:(help.title || name),description:help.description,examples:help.examples})) %>"></i>
              <% } %>
            </div>
          </div>
      <% } %>
          <div class="<%= (typeof(hide) == 'undefined' || !hide ? 'filter-controls' : 'filter-controls-hide') %>">
            <button type="button" class="btn btn-default btn-sm" onclick="_Filters.openConstructor('<%= id %>')">
              <i class="fa fa-filter" aria-hidden="true"></i> <span class="tr">Add filter</span>
            </button>
            <button type="button" class="btn btn-default btn-sm" onclick="_Filters.askClear('<%= id %>')">
              <i class="fa fa-eraser" aria-hidden="true"></i> <span class="tr">Remove all filters</span>
            </button>
          </div>
      <% if (typeof(hide) == "undefined" || !hide) { %>
        </div>
      <% } %>

      <div class="container-fluid">
        <div class="col-xs-12">
          <div class="filter-list" id="<%= id %>"></div>
        </div>
      </div>

      <ul class="dropdown-menu input-field-dropdown dropdown-black filter-contextmenu" id="filter-contextmenu-<%= id %>" style="display:none; position:absolute;">
        <li>
          <a href="#" class="filter-edit">
            <span class="tr">Edit</span>
          </a>
        </li>
        <li>
          <a href="#" class="filter-remove">
            <span class="tr">Remove</span>
          </a>
        </li>
      </ul>

      <% if(typeof(or_select) != "undefined" && or_select){ %>
        <span id="filter-logic-<%= id %>" style="display:none">
          <%= _.template($('#combobox').html())({
            id: "filter-logic-select-" + id,
            title: tr("Filter matching logic"),
            items: [
              { value: "and", selected: true, name: tr("Match all"), title: tr("All specified filters must be met (logical \"AND\")") },
              { value: "or", name: tr("Match any"), title: tr("It is sufficient for at least one of the specified filters to be met (logical \"OR\")")  }
            ],
            help: {
              description: tr("Determines how filters are applied to the data. Depending on the selected logic, the data must either match all filters simultaneously or at least one of them."),
              examples: [
                { code: tr("Match all"), description: tr("All specified filters must be met (logical \"AND\")") },
                { code: tr("Match any"), description: tr("It is sufficient for at least one of the specified filters to be met (logical \"OR\")") }
              ]
            }
          }) %>
        </span>
      <% } %>

      <div class="modal filter-modal" tabindex="-1" id="filter-modal-<%= id %>" role="dialog">
        <div class="modal-dialog modal-lg" role="document">
          <div class="modal-content">
            <div class="modal-body">
              <button type="button" class="bootbox-close-button close" data-dismiss="modal" aria-hidden="true" style="margin-top: -10px;">×</button>
              <div class="container-fluid">
                <% if(scheme.match_select){ %>
                  <%= _.template($('#combobox_stretch').html())({
                    id: "filter-mode-" + id,
                    title: tr("Filter type"),
                    items: [
                      { value: "inclusive", selected: true, name: tr("Inclusive"), title: tr("Passes only the data that meets the specified filter conditions. Any data that does not match the conditions will be excluded.") },
                      { value: "exclusive", name: tr("Exclusive"), title: tr("Passes data that does not meet the specified filter conditions, and excludes any data that matches those conditions.") }
                    ],
                    dont_preserve: true,
                    help: {
                      description: tr("Defines the filter's behavior, determining which data will be included or excluded based on the specified conditions."),
                      examples: [
                        { code: tr("Inclusive"), description: tr("Passes only the data that meets the specified filter conditions. Any data that does not match the conditions will be excluded.") },
                        { code: tr("Exclusive"), description: tr("Passes data that does not meet the specified filter conditions, and excludes any data that matches those conditions.") }
                      ]
                    }
                  }) %>
                <% } %>
                <% if(scheme.fields && Array.isArray(scheme.fields) && scheme.fields.length){ %>
                  <%= _.template($('#combobox_stretch').html())({
                    id: "filter-field-" + id,
                    title: tr("Filter field"),
                    items: _Filters.prepareFields(scheme.fields),
                    dont_preserve: true,
                    onchange: `_Filters.onFieldChange('${id}')`,
                    help: {
                      description: tr("Determines the field containing the data that will be filtered."),
                      examples: _Filters.prepareFieldExamples(scheme.fields)
                    }
                  }) %>
                <% } %>
                <%= _.template($('#combobox_stretch').html())({
                  id: "filter-type-" + id,
                  title: tr("Filtering method"),
                  items: _Filters.prepareTypes(scheme.types || (scheme.types = _Filters.getAvailableTypes(scheme.fields))),
                  dont_preserve: true,
                  onchange: `_Filters.onTypeChange('${id}')`,
                  help: {
                    description: tr("Determines the method by which the filter will check the data for matching.") + (scheme.fields && Array.isArray(scheme.fields) && scheme.fields.length ? " " + tr("Available methods depend on the type of data in the selected field.") : ""),
                    examples: _Filters.prepareTypeExamples(scheme.types)
                  }
                }) %>
                <div id="filter-value-box-<%= id %>">
                  <%= _.template($('#input_constructor').html())({
                    id: "filter-value-" + id,
                    description: tr("Value"),
                    default_selector: "string",
                    min_number: Number.MIN_SAFE_INTEGER,
                    max_number: Number.MAX_SAFE_INTEGER,
                    dont_preserve: true,
                    help: {
                      description: tr("The value used to compare against the data. This value depends on the selected filtering method and will determine whether the data matches the filter criteria.")
                    }
                  }) %>
                </div>
              </div>
            </div>
            <div class="modal-footer">
              <button type="button" class="btn btn-danger standartbutton tr" id="filter-remove-<%= id %>" onclick="" style="display:none;">Remove filter</button>
              <button type="button" class="btn btn-primary standartbutton tr" id="filter-accept-<%= id %>" onclick="_Filters.create('<%= id %>')">Add filter</button>
              <button type="button" class="btn btn-default standartbutton tr" data-dismiss="modal">Cancel</button>
            </div>
          </div>
        </div>
      </div>
    </span>

    <% if (typeof(hide) != "undefined" && hide) { %>
      <%= _.template($('#block_end').html())() %>
    <% } %>

  </script>

  <script type="text/template" id="line">
    <div class="col-xs-12" 
      <%= (typeof(visible_if_checked) == "string") ? "data-visible-if-checked='" + visible_if_checked + "' " : "" %>
      <%= (typeof(visible_if_unchecked) == "string") ? "data-visible-if-unchecked='" + visible_if_unchecked + "' " : "" %>
    >
      <form class="form-horizontal">
        <div class="form-group">
          <div class="col-xs-12">
            <div style="margin-top: 5px;margin-bottom: 5px;background-color: #555;height: 5px;margin-left: 1px;margin-right: 2px;border-radius: 1px;">&nbsp;</div>
          </div>
         </div>
       </form>
     </div>
  </script>

  <script type="text/template" id="space">
    <span 
      <%= (typeof(visible_if_checked) == "string") ? "data-visible-if-checked='" + visible_if_checked + "' " : "" %>
      <%= (typeof(visible_if_unchecked) == "string") ? "data-visible-if-unchecked='" + visible_if_unchecked + "' " : "" %>
    >
      <div style="height:0px;clear: both;margin-bottom:-4px">&nbsp;</div>

      <div style="height:10px" >
        
      </div>
    </span>
  </script>

  <script type="text/template" id="header">
    <span 
      <%= (typeof(visible_if_checked) == "string") ? "data-visible-if-checked='" + visible_if_checked + "' " : "" %>
      <%= (typeof(visible_if_unchecked) == "string") ? "data-visible-if-unchecked='" + visible_if_unchecked + "' " : "" %>
    >
      <div style="height:0px;clear: both;margin-bottom:-4px">&nbsp;</div>

      <div class="header-container">
        
        <div class="header-item"> <%= name %></div>
      </div>
    </span>

  </script>



  <script type="text/template" id="special_buttons">
    <div style="margin-left:15px">
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="CONTROL">Ctrl</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="MENU">Alt</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="SHIFT">Shift</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="BACK">Backspace</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="TAB">Tab</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="RETURN">Enter</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="ESCAPE">Escape</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="PRIOR">Page up</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="NEXT">Page down</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="END">End</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="HOME">Home</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="LEFT">Left</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="UP">Up</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="RIGHT">Right</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="DOWN">Down</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="INSERT">Insert</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="DELETE">Delete</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="MOUSESCROLLUP">Mouse wheel up</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="MOUSESCROLLDOWN">Mouse wheel down</button>
        <!--<button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="CANCEL">Cancel</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="CLEAR">Clear</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="CAPITAL">Caps Lock</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="SELECT">Select</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="PRINT">Print</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="EXECUTE">Execute</button>
        <button tabindex="-1" type="button" class="btn btn-default specialletter btn-xs" data-key="SNAPSHOT">Print screen</button>-->
    </div>
  </script>


  <script type="text/template" id="load">
    <div class="container-fluid load">
      <%= _.template($('#input_constructor').html())({id:"LoadUrl", description:tr("Url to load"), default_selector: "string", disable_int:true, help: {description: tr("Url to load. Protocol may be omitted."), examples:[{code:"google.com",description:tr("Load google.com")},{code:"instagram.com",description:tr("Load instagram.com")}]}}) %>
      <%= _.template($('#input_constructor').html())({id:"Referrer", description:tr("Referrer. Can be blank"), default_selector: "string", disable_int:true, help: {description: tr("Referrer used for current page load."), examples:[{code:"https://google.com",description:tr("Page is loaded by clicking on google search result.")},{code:tr("Empty string"),description:tr("Page is loaded by typing url in address bar.")}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Loads specified url into browser. Examples: Load google.com, Load instagram.com.</div>
      <div class="tr tooltip-paragraph-last-fold">If you encounter errors during execution of this action, try to remove wait for full page load checkbox or wrap load action in ignore error block.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", use_waiter:true,waiter_enabled: true,use_timeout: true, visible:true, wiki: "how_to_load_url"}) %>
  </script>

  <script type="text/template" id="navigateback">
    
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Loads previous url from a history list.</div>
      <div class="tr tooltip-paragraph-fold">This is the same as clicking the "Back button" in the browser.</div>
      <div class="tr tooltip-paragraph-last-fold">If current page is first, this action will load empty page.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", use_waiter:true,waiter_enabled: true,use_timeout: true, visible:true}) %>
  </script>


  <script type="text/template" id="break">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Interrupt current loop immediately. This action works only if placed inside loop(foreach, for, while actions).</div>
      <div class="tr tooltip-paragraph-fold">After launch this action stops loop immediately, no more iterations are performance, and script execution point is moved to the next action after loop.</div>
      <div class="tooltip-paragraph-last-fold"><span class="tr">Common practice is to put break inside if action and therefore stop loop only under certain condition</span> (<a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=fortypical.png');return false" class="tr">screen</a>)</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:false}) %>
  </script>

   <script type="text/template" id="continue">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Immediately finish current loop iteration and start next one. This action works only if placed inside loop(foreach, for, while actions).</div>
      <div class="tooltip-paragraph-last-fold"><span class="tr">Common practice is to put continue action inside if action and therefore stop current iteration only under certain condition</span> (<a href="#" onclick="BrowserAutomationStudio_OpenUrl('http://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=continue.png');return false" class="tr">screen</a>)</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:false}) %>
  </script>

  <script type="text/template" id="success">
    <div class="container-fluid success">
      <%= _.template($('#input_constructor').html())({id:"SuccessMessage", description:tr("Success Message"), default_selector: "string", disable_int:true, help: {description: tr("Thread final success message. This will be outputted to log and to script report.")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Finish thread with success result.</div>
      <div class="tr tooltip-paragraph-fold">Every thread started by BAS has a result status, which may be success or fail.</div>
      <div class="tr tooltip-paragraph-fold">In case if all actions executed correctly, BAS sets success result for that thread.</div>
      <div class="tr tooltip-paragraph-fold">It is important to understand this action stops only current thread not full script.</div>
      <div class="tooltip-paragraph-last-fold"><span class="tr">You can set result status to success and finished thread beforehand with this action</span> (<a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=success.png');return false" class="tr">screen</a>)</div>
    </div>
      <%= _.template($('#back').html())({action:"executeandadd", visible:false, wiki:"how_to_end_script"}) %>
  </script>

  <script type="text/template" id="fail">
    <div class="container-fluid fail">
     <%= _.template($('#input_constructor').html())({id:"FailMessage", description:tr("Fail Message"), default_selector: "string", disable_int:true, help: {description: tr("Thread final fail message. This will be outputted to log and to script report.")}}) %>
     <%= _.template($('#checkbox').html())({id: "Check", title: tr("Dont restart thread.")}) %>
    </div>

     

      <div class="tooltipinternal">
        <div class="tr tooltip-paragraph-first-fold">Finish thread with fail result.</div>
        <div class="tr tooltip-paragraph-fold">Every thread started by BAS has a result status, which may be success or fail.</div>
        <div class="tr tooltip-paragraph-fold">In case if some action fails thread execution will be interrupted and thread status will be set to failure.</div>
        <div class="tooltip-paragraph-fold"><span class="tr">You may also interrupt thread and set fail message with this action</span> (<a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=fail.png');return false" class="tr">screen</a>)</div>
        <div class="tr tooltip-paragraph-last-fold">It is important to understand this action stops only current thread not full script.</div>
      </div>
     <%= _.template($('#back').html())({action:"executeandadd", visible:false, wiki:"how_to_end_script"}) %>

  </script>

  <script type="text/template" id="die">
    <div class="container-fluid fail">
     <%= _.template($('#input_constructor').html())({id:"FailMessage", description:tr("Fail Message"), default_selector: "string", disable_int:true, help: {description: tr("Thread final fail message. This will be outputted to log and to script report.")}}) %>

     <%= _.template($('#checkbox').html())({id: "Check", title: tr("Finish script instantly.")}) %>

    </div>
     
      <div class="tooltipinternal">
        <div class="tr tooltip-paragraph-first-fold">This action finishes whole script, not just single thread, use it in case of fatal error and if script can't be continued under no circumstances. For example, if API key to some service doesn't match.</div>
        <div class="tr tooltip-paragraph-fold">BAS also uses this action internally in case of resource absence, so if, for example, user didn't set any proxy file, script will finish instantly.</div>
        <div class="tr tooltip-paragraph-last-fold">There are two modes, how this action works. First mode is instant finish, this means that script will finish at the same second as you called that action, each thread will also stop instantly even if it was in the middle of some task. Second mode is graceful finish, in this case BAS will wait until all threads will finish their tasks. Second mode is useful in case if you don't want to lose important data, for example, phone numbers or emails.</div>
        <span class="short-description tr">This action finishes whole script, not just single thread, use it in case of fatal error and if script can't be continued under no circumstances.</span>
      </div>
     <%= _.template($('#back').html())({action:"executeandadd", visible:false}) %>

  </script>

  <script type="text/template" id="label">
    <div class="container-fluid fail">
     <%= _.template($('#input_constructor').html())({id:"Label", description:tr("Label"), default_selector: "string", disable_int:true, disable_expression:true, disable_resource: true, disable_editor: true, disable_variable:true}) %>
    </div>
      <div class="tooltipinternal">
        <div class="tr tooltip-paragraph-first-fold">Set label so execution point may be transfered to that label later.</div>
        <div class="tr tooltip-paragraph-fold">Labels helps to transfer execution point between two arbitrary places inside script.</div>
        <div class="tooltip-paragraph-fold"><span class="tr">To use labels you need first to "set label"(this action) inside place where you want to move later, then you need to use "move to label" action from anywhere in the script</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=skipwithlabel.png');return false">screen</a>)</div>
        <div class="tr tooltip-paragraph-fold">With labels you can jump inside loops, conditions, functions. If you jump inside loop, then [[CYCLE_INDEX]] variable might not be correct, and after loop body will be executed, execution point will be moved outside of the loop.</div>
        <div class="tr tooltip-paragraph-fold">One of typical use example for labels maybe setting label at the thread start and returning to it on some condition.</div>
        <div class="tr tooltip-paragraph-last-fold">It is not recommended to use labels very often, if you overdo with using labels your script may become unreadable and hard to modify. It is better to use functions instead, unless you absolutely need labels.</div>
      </div>
     <%= _.template($('#back').html())({action:"executeandadd", visible:false}) %>

  </script>

  <script type="text/template" id="goto">
    
    <div class="container-fluid executefunction" style="padding-bottom:5px;display:none">
      <div class="col-xs-12">
        <form class="form-horizontal" onsubmit="return false;">
          <div class="input-group">
            <span data-preserve="true" data-preserve-type="text" data-preserve-id="LabelName">
              <input class="form-control label-input" type="text" id="LabelName" placeholder="Label">
            </span>
  
            <span class="input-group-addon input-description">
              <span class="tr">Label</span> 
            </span>
            <div class="input-group-btn">
              <button tabindex="-1" type="button" class="btn btn-default lab" data-toggle="modal" data-target="#LabelModal" data-result-target="#LabelName" ><i class="fa fa-tag"></i></button>
            </div>
          </div>
        </form>
      </div>

      
    </div>

    <div class="container-fluid" id="LabelListInfo">

    </div>

    <div id="LabelList">

    </div>


    
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Move execution point to label previously set with "Set label" action.</div>
      <div class="tr tooltip-paragraph-fold">Labels helps to transfer execution point between two arbitrary places inside script.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">To use labels you need first to "set label" inside place where you want to move later, then you need to use "move to label"(this action) from anywhere in the script</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=skipwithlabel.png');return false">screen</a>)</div>
      <div class="tr tooltip-paragraph-fold">With labels you can jump inside loops, conditions, functions. If you jump inside loop, then [[CYCLE_INDEX]] variable might not be correct, and after loop body will be executed, execution point will be moved outside of the loop.</div>
      <div class="tr tooltip-paragraph-fold">One of typical use example for labels maybe setting label at the thread start and returning to it on some condition.</div>
      <div class="tr tooltip-paragraph-last-fold">It is not recommended to use labels very often, if you overdo with using labels your script may become unreadable and hard to modify. It is better to use functions instead, unless you absolutely need labels.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:false}) %>

  </script>

  <script type="text/template" id="custom">
    <div class="container-fluid">
      <span data-preserve="true" data-preserve-type="constr" data-preserve-id="Code">
        <div id="Code" class="custom-code-editor" data-is-code-editor="true" />
      </span>
      <%= "<s" + "cript>" %>
        window.Code = {Editor: null, InitialValue: ""}

        require(['vs/editor/editor.main'], function() {
          window.Code.Editor = createCodeEditor(document.getElementById('Code'), {
            value: window.Code.InitialValue
          });
        });
      <%= "</" + "script>" %>
      <div style="text-align:center;align-items: center; display: flex !important; justify-content: center;">
          <a tabindex="-1" href="#" data-toggle="modal" data-result-target="#Code" class="var" style="margin-right:15px">
            <span style="align-items: center; display: flex !important; justify-content: center;margin-top:5px">
              <svg class="dropdown-icon" width="16" height="16"  viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"  style="margin-right:10px">
                <path d="M7.5 12h1V9.5H11v-1H8.5V6h-1v2.5H5v1h2.5V12z" fill="#337ab7" />
                <path d="M.5 2v12h15V2H.5zm14 11h-13V5h13v8z" fill="#337ab7" />
              </svg>
              <span class="tr">Insert variable</span>
            </span>
          </a>
          <a tabindex="-1" href="#" data-toggle="modal" data-result-target="#Code" class="res">
            <span style="align-items: center; display: flex !important; justify-content: center;margin-top:5px">
              <svg class="dropdown-icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right:10px">
                <path d="M1.5 1.5v13h13v-13h-13zm12 12h-11v-3h11v3zm0-4h-11v-3h11v3zm-1.5-6a.5.5 0 110 1 .5.5 0 010-1z" fill="#337ab7" />
                <path d="M12 8.5a.5.5 0 100-1 .5.5 0 000 1zM12 12.5a.5.5 0 100-1 .5.5 0 000 1z" fill="#337ab7" />
              </svg>
              <span class="tr">Load from file, user input, database</span>
            </span>
          </a>
      </div>
      <span class="short-description tr">Execute javascript code. This code can work with variables but can't work with elements in web browser.</span>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, modal_code_id:"custom-help-" + (_K || "en")}) %>
  </script>

  <script type="text/template" id="custom-help-browser-common-ru">
    <div>Выполнить javascript внутри браузера. Это означает, что доступны document, window и другие javascript объекты браузера.</div>
    <div>Действие работает точно так же, как если бы вы вводили код в консоль браузера.</div>
    <div>Вы можете использовать переменные BAS в данном действии как для чтения, так и для записи. Кроме того они могут быть любого типа, в том числе объектами и массивами.</div>
    <div>Переменные используемые в коде автоматически обновляются после выполнения действия.</div>
    <div>Ресурсы не доступны для использования в данном действии.</div>
    <br />
    <div>Во время выполнения скрипта могут возникать разные ошибки. В случае ошибки BAS прекратит выполнение скрипта.</div>
    <div>Для того чтобы обработать подобные ситуации используйте действие <b>Игнорировать ошибки</b>.</div>
    <div>В таком случае вы сможете использовать переменные [[WAS_ERROR]] и [[LAST_ERROR]], чтобы узнать, была ли ошибка, и обработать её.</div>
    <br />
    <div>Пример #1. Изменение HTML определенного элемента:</div>
    <div><pre>document.getElementById("id").innerHTML = [[ELEMENT_HTML]];</pre></div>
    <br />
    <div>Пример #2. Получение HTML определенных элементов:</div>
    <div>
      <pre style="white-space: pre-line">
        [[ELEMENT1_HTML]] = document.getElementById("id1").innerHTML;
        [[ELEMENT2_HTML]] = document.getElementById("id2").innerHTML;        
      </pre>
    </div>
    <br />
    <div>Пример #3. Установка значений для элементов `input` и `textarea`:</div>
    <div>
      <pre style="white-space: pre-line">
        document.querySelector('textarea').value = [[TEXTAREA_VALUE]].join('\r\n');
        document.querySelector('input').value = [[INPUT_VALUE]];
      </pre>
    </div>
    <br />
    <div>В данном действии вы можете писать код с использованием <i>async</i> и <i>await</i>. Действие будет ожидать завершения асинхронных операций.</div>
    <div>При использовании асинхронного кода всегда дожидайтесь завершения функций с помощью <i>await</i>.</div>
    <div>В противном случае переменные, значение которых задается в коллбэках либо в функциях then/catch/finally у класса <i>Promise</i>, не будут синхронизированы с BAS.</div>
    <div>Если в таких участках кода вам не нужно обновлять переменные, вы можете не ждать их завершения.</div>
    <br />
    <div>Простой пример. Асинхронное ожидание в течение заданного времени (2 секунды):</div>
    <div>
      <pre>await new Promise((resolve) => { setTimeout(() => resolve(), 2000); });</pre>
    </div>
    <br />
    <div>Другой пример. Получение данных со стороннего сайта с помощью функции <i>fetch</i>:</div>
    <div><pre>async function getPost(id) {
  return await fetch(`https://jsonplaceholder.typicode.com/posts/` + id)
    .then((res) => res.json());
}
[[POST]] = await getPost(1);</pre></div>
  </script>

  <script type="text/template" id="custom-help-browser-common-en">
    <div>Execute javascript inside browser. This means that document, window and other browser javascript objects are available.</div>
    <div>Action works exactly the same as if you input code into browser console.</div>
    <div>You can use BAS variables in this action for both reading and writing. Moreover, they can be of any type, including objects and arrays.</div>
    <div>Variables used in the code are automatically updated after the action is performed.</div>
    <div>Resources are not available for use in this action.</div>
    <br />
    <div>During the execution of the script, various errors may occur. If an error occurs, BAS will stop the script execution.</div>
    <div>To handle such situations, use the <b>Ignore errors</b> action.</div>
    <div>In this case, you can use the [[WAS_ERROR]] and [[LAST_ERROR]] variables to find out if there was an error and process it.</div>
    <br />
    <div>Example #1. Changing the HTML of the specific element:</div>
    <div><pre>document.getElementById("id").innerHTML = [[ELEMENT_HTML]];</pre></div>
    <br />
    <div>Example #2. Getting the HTML of the specific elements:</div>
    <div>
      <pre style="white-space: pre-line">
        [[ELEMENT1_HTML]] = document.getElementById("id1").innerHTML;
        [[ELEMENT2_HTML]] = document.getElementById("id2").innerHTML;        
      </pre>
    </div>
    <br />
    <div>Example #3. Setting the values for the `input` and `textarea` elements:</div>
    <div>
      <pre style="white-space: pre-line">
        document.querySelector('textarea').value = [[TEXTAREA_VALUE]].join('\r\n');
        document.querySelector('input').value = [[INPUT_VALUE]];
      </pre>
    </div>
    <br />
    <div>In this action you can write code using <i>async</i> and <i>await</i>. The action will wait for asynchronous operations to complete.</div>
    <div>When using asynchronous code, always wait for functions to complete using <i>await</i>.</div>
    <div>Otherwise, variables whose value is set in callbacks or in the then/catch/finally functions of the <i>Promise</i> class will not be synchronized with the BAS.</div>
    <div>If you don't need to update variables in these sections of code, you don't have to wait for them to complete.</div>
    <br />
    <div>A simple example. Wait asynchronously for a specified time (2 seconds):</div>
    <div>
      <pre>await new Promise((resolve) => { setTimeout(() => resolve(), 2000); });</pre>
    </div>
    <br />
    <div>Another example. Getting data from a third-party site using the <i>fetch</i> function:</div>
    <div><pre>async function getPost(id) {
  return await fetch(`https://jsonplaceholder.typicode.com/posts/` + id)
    .then((res) => res.json());
}
[[POST]] = await getPost(1);</pre></div>
  </script>

  <script type="text/template" id="custom-help-browser-ru">
    <%= _.template($('#custom-help-browser-common-ru').html())({}) %>
    <br />
    <div>Используйте действие <b>Выполнить код</b>, если вы хотите выполнить javascript внутри потока.</div>
  </script>

  <script type="text/template" id="custom-help-browser-en">
    <%= _.template($('#custom-help-browser-common-en').html())({}) %>
    <br />
    <div>Use <b>Execute Code</b> action if you want to run javascript inside thread.</div>
  </script>

  <script type="text/template" id="custom-help-browserscriptelement-ru">
    <%= _.template($('#custom-help-browser-common-ru').html())({}) %>
    <br />
    Используйте переменную <strong>self</strong>, которая указывает на выбранный элемент.
    <br />
    <br />
    <div>Получить код элемента, который был выбран при создании этого действия:</div>
    <div>
      <pre style="white-space: pre-line">
        [[FOUND_ELEMENT_HTML]] = self.innerHTML;
      </pre>
    </div>
    <br />
    <div>Получить атрибут, имя которого находится в переменной [[ATTRIBUTE]], и сохранить его в переменную [[RESULT]].</div>
    <div>
      <pre style="white-space: pre-line">
        [[RESULT]] = self.getAttribute([[ATTRIBUTE]])
      </pre>
    </div>
    <br />
    <div>
      Если элемент не будет найден после первой попытки, BAS продолжит ожидать его на протяжении минуты. Если на протяжении 10 секунд элемент не будет найден, в лог будет добавлено сообщение, если элемент не появится на протяжении минуты, поток завершится с ошибкой. Вы можете обработать эту ошибку если уберете настройку "Остановить поток, если элемент не найден" (вверху страницы) или если обернете данное действие в блок игнорирования ошибок. Вы также можете настроить максимальное время ожидания если нажмете на иконку песочных часов.
    </div>
    <br />
    <div>Используйте действие <b>Выполнить код</b>, если вы хотите выполнить javascript внутри потока.</div>
  </script>

  <script type="text/template" id="custom-help-browserscriptelement-en">
    <%= _.template($('#custom-help-browser-common-en').html())({}) %>
    <br />
    Use <strong>self</strong> variable, which points to selected element.
    <br />
    <br />
    <div>Get code of element that was selected when creating this action:</div>
    <div>
      <pre style="white-space: pre-line">
        [[FOUND_ELEMENT_HTML]] = self.innerHTML;
      </pre>
    </div>
    <br />
    <div>Get attribute which name is located in [[ATTRIBUTE]] variable and save it to [[RESULT]] variable.</div>
    <div>
      <pre style="white-space: pre-line">
        [[RESULT]] = self.getAttribute([[ATTRIBUTE]])
      </pre>
    </div>
    <br />
    <div>
      If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.
    </div>
    <br />
    <div>Use <b>Execute Code</b> action if you want to run javascript inside thread.</div>
  </script>

  <script type="text/template" id="custom-help-interface-ru">
    <div>Выполнить javascript код в контексте веб интерфейса.</div>
    <div>Если веб интерфейс не включен, это действие не делает ничего.</div>
    <div>Веб интерфейс можно включить через <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://bablosoft.com/bas/interface');return false">кабинет</a> премиум аккаунта.</div>
    <div>Если вы хотите запустить код в контексте BAS, используйте действие "Выполнить код".</div>
    <div>BAS также предоставляет выполнять код с помощью node.js. для этого нужно использовать модуль "Встроенные языки".</div>
    <div>Здесь вы можете поместить любой javascript код, включая код, который использует внешние библиотеки.</div>
    <div>Есть возможность использовать переменные и ресурсы.</div>
    <br/>
    <div>Пример #1. Показать оповещение.</div>
    <div><pre>alert("Message")</pre></div>
      <br/>
    <div>Пример #2. Вывод переменной БАС в консоль браузера.</div>
    <pre>console.log([[TEST_VARIABLE]])</pre>
      <br/>
    <div>BAS использует <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://getuikit.com/docs/introduction');return false">uikit</a> для рендеринга контролов, и вы также можете использовать эту библиотеку.</div>
    <br/>
    <div>Пример #3. Показать уведомление через uikit.</div>
    <pre>UIkit.notification('My message');</pre>
      <br/>

    <div>Библиотека Jquery тоже поддерживается.</div>
    <br/>
    <div>Пример #4. изменить значение текстового поля.</div>
    <pre>$("#control-id").val("Input value");</pre>
      <br/>
  </script>

  <script type="text/template" id="custom-help-interface-en">
    <div>Run javascript code in web interface context.</div>
    <div>If web interface is not enabled, this action does nothing.</div>
    <div>Web interface can be enabled through you premium account <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://bablosoft.com/bas/interface');return false">cabinet</a>. </div>
    <div>If you want to run code in BAS context, use "Execute" action.</div>
    <div>BAS also gives possibility to run custom code with node.js. See "Embedded Language" module.</div>
    <div>You can put any javascript code here, including code, which uses external libraries.</div>
    <div>Variable and resources are also allowed.</div>
    <br/>
    <div>Example #1. Show alert message.</div>
    <div><pre>alert("Message")</pre></div>
      <br/>
    <div>Example #2. Output BAS variable to console.</div>
    <pre>console.log([[TEST_VARIABLE]])</pre>
      <br/>
    <div>BAS uses <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://getuikit.com/docs/introduction');return false">uikit</a> for rendering controls, you are free to use it.</div>
    <br/>
    <div>Example #3. Show notification.</div>
    <pre>UIkit.notification('My message');</pre>
      <br/>

    <div>Jquery is also available.</div>
    <br/>
    <div>Example #4. Set input value.</div>
    <pre>$("#control-id").val("Input value");</pre>
      <br/>
  </script>

  <script type="text/template" id="custom-help-en">
    <span style="font-size:small">
      Execute custom javascript code.<br/>
      If you want to run code with node.js, use "Embedded Language" module.<br/>
      This code may contain BAS variables and resources and BAS api calls.<br/>
      Browser context(document, window, navigator) is unavailable in this action. If you want to execute javascript in browser context, use "Javascript" action.<br/>
      You can find code online and paste it here. But setTimeout and setInterval can't be used, if you want to parallelize execution use "Call function in several threads".<br/>
      Example #1. Output text to log.
      <pre>log("Message")</pre>
      <br/>
Example #2. Execute code and save result to variable.
<pre>[[RESULT]] = 2 + 2</pre>
      <br/>
      Example #3. Check if page source has error message.
      <pre>[[HAS_ERROR_MESSAGE]] = [[SAVED_PAGE_HTML]].indexOf("Ip banned")</pre>
      
      BAS api calls may be used. Api list defined <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://raw.githubusercontent.com/bablosoft/BAS/master/Engine/text/apilist.txt');return false">here</a>
      <br/>
      <br/>
      Example #4. Get page source, check it, finish thread with ip banned.
      <br/>
      <pre>page().script("document.documentElement.outerHTML")!
[[SAVED_PAGE_HTML]] = _result()
if([[SAVED_PAGE_HTML]].indexOf("Ip banned"))
{
  fail("Proxy banned")
}</pre>
      <br/>
      If api call ends with exclamation mark it is considered asynchronous, and can't be used inside conditions, loops and functions. Standart conditions, loops and functions must be replaced with custom: _if, _do, _call. You can study api syntax if you look at source code generated by BAS in script tab (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=getpagesource.png');return false">screen</a>)
    </span>
  </script>

  <script type="text/template" id="custom-help-ru">
    <span style="font-size:small">
      Выполняет заданный javascript код.<br/>
      Если вы хотите запустить код на node.js, то нужно использовать модуль "Встроенные языки".<br/>
      Этот код может содержать переменные и ресурсы и вызовы BAS api.<br/>
      Контекст браузера и переменные document, window, navigator недоступны в этом действии. Если вы хотите выполнять код в контексте браузера, используйте действие "Яваскрипт".<br/>
      Вы можете искать код онлайн и использовать в этом действии. Функции setTimeout и setInterval нельзя использовать здесь, если вы хотите распараллелить выполнение действий, то нужно использовать действие "Вызов функции в несколько потоков".<br/>
      Пример #1. Вывести собщение в лог.
      <pre>log("Сообщение")</pre>
      <br/>
Пример #2. Выполнить код и сохранить результат в перемнную.
<pre>[[RESULT]] = 2 + 2</pre>
      <br/>
      Пример #3. Проверить, содержит ли страница сообщение об ошибке.
      <pre>[[HAS_ERROR_MESSAGE]] = [[SAVED_PAGE_HTML]].indexOf("Ip banned")</pre>
      
      BAS имеет собственный api, который может быть использован в этом действии. Список апи вызовов определен <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://raw.githubusercontent.com/bablosoft/BAS/master/Engine/text/apilist.txt');return false">здесь</a>
      <br/>
      <br/>
      Пример #4. Получить код страницы, проверить есть ли там сообщение об ошибке и остановить поток в этом случае.
      <br/>
      <pre>page().script("document.documentElement.outerHTML")!
[[SAVED_PAGE_HTML]] = _result()
if([[SAVED_PAGE_HTML]].indexOf("Ip banned"))
{
  fail("Proxy banned")
}</pre>
      <br/>
      Если вызов api заканчивается на восклицательный знак, то этот вызов считается асинхронным и не может быть использован внутри условий, циклов и функций. Стандартные условия, циклы и функции нужно заменить на специальные: _if, _do, _call. Вы можете изучить синтаксис api, если вы посмотрите исходный код, сгенерированный BAS на вкладке "Скрипт" (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=getpagesource.png');return false">скрин</a>)
    </span>
  </script>

   <!-- Tools templates -->

  <script type="text/template" id="randomint">
    <div class="container-fluid randomint">
      <%= _.template($('#input_constructor').html())({id:"MinValue", description:tr("Minimum Value"), default_selector: "int", disable_string:true, value_number:0, min_number:-999999, max_number:999999}) %>
      <%= _.template($('#input_constructor').html())({id:"MaxValue", description:tr("Maximum Value"), default_selector: "int", disable_string:true, value_number:100, min_number:-999999, max_number:999999}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save Result"), default_variable: "RANDOM_NUMBER"}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Generate a random integer in a given range.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <!-- Waiters templates -->

  <script type="text/template" id="waitfullload">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Wait until page is fully loaded.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", use_timeout: true, visible:true}) %>
  </script>

  <script type="text/template" id="waitload">
    <div class="container-fluid load">
      <%= _.template($('#filter').html())({id:"urlFilters", name:tr("Filters for URL"), hide: true, or_select:true, scheme: {match_select: true, types: ['Equals', 'Starts', 'Ends', 'Contains', 'List', 'Mask', 'Regexp']}, help: {description: tr("URL filters allow you to specify conditions for selecting the URL that should be awaited for complete loading. They enable you to precisely indicate which URL's load should be awaited. If no filters are set, the action will wait for any URL to be loaded.")}}) %>
      <div style="display:none">
        <%= _.template($('#input_constructor').html())({id:"Wait", description:tr("Url"), default_selector: "string", disable_int:true}) %>
      </div>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Wait until the browser loads a URL matching the specified filters.</div>
      <div class="tr tooltip-paragraph-fold">This action waits until a URL matching the specified filters is fully loaded.</div>
      <div class="tr tooltip-paragraph-fold">This action waits only for the main URL to load. If the page at this URL contains dynamically loaded resources (such as CSS, JavaScript, or other files), the action will not wait for their loading.</div>
      <div class="tr tooltip-paragraph-fold">If no filters are specified, the action will wait until at least one URL is loaded.</div>
      <div class="tr tooltip-paragraph-fold">If the corresponding URL was loaded before this action started, the action will complete immediately.</div>
      <div class="tr tooltip-paragraph-fold">This action does not require allow cache as it uses a separate list of loaded URLs. URLs are added to this list after the corresponding request is completed.</div>
      <div class="tr tooltip-paragraph-fold">The list of loaded URLs can be cleared using the "<a href="#!/cleardata">Clear Cached Data</a>" action.</div>
      <div class="tr tooltip-paragraph-fold">You can change the maximum waiting time by clicking the hourglass icon next to the "<b>Cancel</b>" button.</div>
      <div class="tr tooltip-paragraph-last-fold">To check if a URL has been loaded without waiting for it, use the "<a href="#!/isloaded">Is Loaded</a>" action from the "<b>Network</b>" module.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd",use_timeout: true, visible:true}) %>
  </script>

  <script type="text/template" id="waiturl">
    <div class="container-fluid load">
      <%= _.template($('#input_constructor').html())({id:"Wait", description:tr("Url"), default_selector: "string", disable_int:true}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Wait until address bar contains specified URL.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd",use_timeout: true, visible:true}) %>
  </script>

  <script type="text/template" id="waitcontent">
    <div class="container-fluid load">
      <%= _.template($('#input_constructor').html())({id:"Wait", description:tr("Text"), default_selector: "string", disable_int:true}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Wait until specific text appears on the page.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd",use_timeout: true, visible:true}) %>
  </script>

  <script type="text/template" id="waitcss">
    <div class="container-fluid load">
      <%= _.template($('#input_constructor').html())({id:"Wait", description:tr("Selector"), default_selector: "string", disable_int:true}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Wait until specific CSS-selector returns a non-empty result.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd",use_timeout: true, visible:true}) %>
  </script>

  <script type="text/template" id="waitfiledownload">
     <div class="container-fluid load">
       <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To save file name"), default_variable: "DOWNLOADED_FILE_PATH"}) %>
      </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Wait for the end of the current download.</div>
    </div>
     <%= _.template($('#back').html())({action:"executeandadd",use_timeout: true, visible:true}) %>
  </script>

  <script type="text/template" id="sleep">
    <div class="container-fluid sleep">
       <%= _.template($('#input_constructor').html())({id:"sleepfrom", visible_if_checked: "sleeprandom", description:tr("Sleep from value in milliseconds"), default_selector: "int", disable_string:true, min_number: 100, value_number: 1000,max_number: 99999999}) %>
       <%= _.template($('#input_constructor').html())({id:"sleepto", visible_if_checked: "sleeprandom", description:tr("Sleep to value in milliseconds"), default_selector: "int", disable_string:true, min_number: 100, value_number: 1000,max_number: 99999999}) %>

       <%= _.template($('#input_constructor').html())({id:"sleepfromto", visible_if_unchecked: "sleeprandom", description:tr("Sleep value in milliseconds"), default_selector: "int", disable_string:true, min_number: 100, value_number: 1000}) %>
       
       <%= _.template($('#checkbox').html())({id: "sleeprandom", title: tr("Sleep random time")}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Pauses current thread for the specified number of milliseconds.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="executefunction">
    <div class="container-fluid executefunction">
      <div class="col-xs-12" style="margin-bottom: 5px;">
        
        <div class="input-group">
          
          <span data-preserve="true" data-preserve-type="text" data-preserve-id="FunctionName">
            <input class="form-control function-input" type="text" id="FunctionName" placeholder="Function name">
            <ul class="dropdown-menu input-field-dropdown dropdown-align dropdown-black" data-toggle="dropdown">
              <li>
                <a tabindex="-1" href="#" class="func" data-result-target="#FunctionName">
                  <span class="tr">Select function</span>
                </a>
              </li>
            </ul>
          </span>        

          <span class="input-group-addon input-description tr">Function name</span>
        </div>
        
      </div>
      <div id="FunctionParameters">
      </div>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Execute function and proceed with next action.</div>

      <div class="tooltip-paragraph-fold"><span class="tr">Function must be defined beforehand. BAS allows define functions through "Function Tab"</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('http://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=functionstab.png');return false">screen</a>)</div>
      <div class="tr tooltip-paragraph-fold">Function name may be selected by pressing on <i class="fa fa-dot-circle-o"></i> button.</div>
      <div class="tr tooltip-paragraph-fold">Functions are containers, which holds action list. It helps to group several actions which does same task. For example, there can be function which logins to account, function that checks account balance, etc. It makes your code clear and well organized.</div> 
      <div class="tr tooltip-paragraph-fold">Functions may be executed(with this action), this means that every action inside it will be executed sequentially.</div>
      <div class="tr tooltip-paragraph-fold">Another advantage is that one function may be executed as many times as you want from any place in the script. This helps to avoid code duplication. If you want to update function, you need to do that only once, not in every place where it used.</div>
      <div class="tr tooltip-paragraph-last-fold">If you see, that your code gets bigger, good practice would be to select script part which does common task, and move it inside new function.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:false, wiki: "functions"}) %>
  </script>

  <script type="text/template" id="getfunctionparameter">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"ParameterName",disable_editor:true, disable_variable:true, disable_resource:true, disable_separator:true, disable_type_chooser:true, description:tr("Parameter name"), variants: function_params, default_selector: "string", disable_int:true, disable_expression: true, help: {description: tr("Parameter name is used to identify parameter, could be any string.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save Result"), default_variable: "FUNCTION_PARAMETER", help: {description: tr("Variable which will contain parameter value.")}}) %>

    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get specified parameter value for current function.</div>

      <div class="tr tooltip-paragraph-fold">Every function can have any number of parameters, each of them are identified by its name.</div>

      <div class="tr tooltip-paragraph-fold">Consider following example, you have a function which loads certain url parses its content and returns result. In that case, function will have one parameter - page url, you can name it whatever you want: "Url", "Page Url", etc. "Get Function Parameter" action is used to obtain actual url value(or any other parameter value) for current function run. These parameters may be different for each function run, for example, it may be called for different urls: "url1", "url2", etc any number of times from any place inside code. With the help of functions you can call your code as many times as you want without duplicating whole code.</div>
      <div class="tooltip-paragraph-fold tr">Actual parameter values are set inside "Call function" action.</div>
      <div class="tooltip-paragraph-fold tr">In order to change function parameter definitions or add a new one, use function manager, it is located in the bottom-left corner of the interface.</div>
      <div class="tooltip-paragraph-fold tr">This action will only works if execution point is inside function, if it is placed inside "Main" function, return value will be null.</div>
      <div class="tr tooltip-paragraph-last-fold">If parameter name doesn't exist, this action will return null.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="return">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"ReturnValue", description:tr("Return value"), default_selector: "string", help: {description: tr("Value, which contains result of function work. It will be placed into variable defined in \"Call function\" action, so it can be used after function is finished. If function does not provide any return value, leave this field empty")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Immediately interrupt current function call. This action works only if placed inside function.</div>

      <div class="tr tooltip-paragraph-fold">After launch this action stops function immediately, execution point is moved to the next action after "Call Function".</div>

      <div class="tr tooltip-paragraph-fold">Action will return data specified in "Return value" parameter into variable defined in "Call Function" action. This data contains result of function work.</div>

      <div class="tr tooltip-paragraph-last-fold">Consider following example, you have a function which loads certain url, parses its content and returns result. In that case, function will have one parameter - page url, and return value, which will contain page content. With help of "Return" action you can set page content as result of function work.</div>
      
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="recaptchav3">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"Method", description:tr("Solve Method"), default_selector: "string", disable_int:true, value_string: "rucaptcha", variants: ["rucaptcha","2captcha","antigate","disable"], size: 3, help: {description: tr("Solve method is a string, you can set value directly or use variable or resource."), examples:[{code:"antigate",description:tr("Solve with http://anti-captcha.com/ service")},{code:"rucaptcha",description:tr("Solve with http://rucaptcha.com/ service")},{code:"2captcha",description:tr("Solve with http://2captcha.com/ service")},{code:"disable",description:tr("Stop intercepting recaptcha v3 requests. Site will get your real score. You can enable intercepting later again.")}]}}) %>
      <%= _.template($('#input_constructor').html())({id:"Rucaptcha", description:tr("Rucaptcha/2captcha Key. Can be blank"), default_selector: "string", disable_int:true, help: {description: tr("This is a key from service selected in 'Solve Method' field.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Action", description:tr("Action name"), default_selector: "string", disable_int:true, value_string: "*", variants: ["*"].concat(RecaptchaV3ActionList), help: {description: tr("Contains one or several recaptcha v3 actions. Several action may be separated by commas. When browser will execute one of following actions, user score request will be intercepted and sent to service selected in 'Solve Method' field. By default every request will be intercepted, tweak this field in order to send only important actions."), examples:[{code:"*",description:tr("Intercept all actions")},{code:"Action 1",description:tr("Intercept only 'Action 1', all other actions will return real browser score.")},{code:"Action 1,Action 2",description:tr("Intercept only 'Action 1' or 'Action 2', all other actions will return real browser score. NOTE: there should not be any spaces near comma.")}]}}) %>
      
      <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), description: tr("")}) %>

        <%= _.template($('#input_constructor').html())({id:"Server", description:tr("Server url. Can be blank"), default_selector: "string", disable_int:true, help: {description: tr("String which contains server url."), examples:[{code:"http://127.0.0.3:8083/"},{code:tr("Empty string"), description: tr("Use default server url, http://rucaptcha.com for rucaptcha, etc")}]}}) %>
        <%= _.template($('#input_constructor').html())({id:"Score", description:tr("Minimal score"), value_string:"0.3", default_selector: "expression", disable_int:true, disable_string:true, help: {description: tr("Minimal score to which the answer from service must meet. 0.1 - is the lowest score, 0.9 - is the highest. It depends on site, if it wants to accept certain score or not and what to do with low score browsers. 0.6 - is default value it must be acceptable for most of the sites."), examples:[{code:"0.3"},{code:"0.7"}]}}) %>
        <%= _.template($('#input_constructor').html())({id:"SendProxy", description:tr("Send current proxy to solver service"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true","false"], help: {description: tr("Forces person who solves recaptcha use proxy that you setted up with \"Proxy\" action."), examples:[{code:"true",description:tr("Send current proxy to server. Proxy value is obtained from \"Proxy\" action.")},{code:"false",description:tr("Don't send proxy. Default value.")}]}}) %>

      <%= _.template($('#block_end').html())() %>
      </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">This action solves google recaptcha 3.0.</div>
      <div class="tr tooltip-paragraph-fold">Recaptcha v3, unlike other captchas, doesn't show any image or challenges. It works silently without any user interactions. Therefore, it can be placed in several places on site, or even on each page. For each page or event where Recaptcha v3 is attached to it returns user score. User score reflects how likely the site visitor to be a bot.</div>
      <div class="tr tooltip-paragraph-fold">The site can use the result score as it sees fit. For example, site can show captcha if user score is lower than 0.4, other site may require phone verification if score is lower than 0.6 and block the user if it is lower than 0.3.</div>
      <div class="tr tooltip-paragraph-fold">This action intercepts user verification request and send it to specified service. When service will return result, it will replace browser real score with score obtained for one of the worker of selected service.</div>
      <div class="tr tooltip-paragraph-fold">IMPORTANT: This action doesn't solves any captcha by itself, instead it tells BAS to solve any following Recaptcha v3 with specified parameters. Therefore, it must be placed before any captcha methods are used.</div>
      <div class="tr tooltip-paragraph-fold">Each site has its own requirements and minimal scores, you can tweak expected minimal score by changing 'Minimal score' parameter.</div>
      <div class="tr tooltip-paragraph-fold">Recaptcha v3 may be placed on every page on site. Each page will have its own action. For example, there could be actions for visiting homepage, visiting FAQ page, and for creating new user. You can disable interception for minor actions and enable it for important one by changing 'Action name' parameter.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">In order to find exact action name on particular site, you need to visit site and trigger required action, message with action name will be shown afterwards.</span>(<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('http://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=browserautomationstudio_2019-09-12_19-21-35.png'); return false;">screen</a>). <span class="tr">Each used action will also be added to suggestions for 'Action name' parameter.</span></div>
      <div class="tr tooltip-paragraph-fold">All services requires service key which should be bought on service site and inputted into "Rucaptcha/2captcha Key" field.</div>
      <div class="tr tooltip-paragraph-last-fold">Alternatively to this action, you can try to bypass Recapthca V3. Here are things which influence on final score: mature profile with Gmail authorization and Google search history, good proxy, long history with site, that you are working with. Let us dwell on the last point more carefully. Recaptcha v3 track your activities on each site by logging every action you perform. For example, if you visit a store, do a search, visit support page and only after that will try to register account, it would be much less suspicious than trying to register account immediately, and it high likely to get a better score.</div>
      <div class="tooltip-paragraph-last-fold"><span class="tr">There is another type of recaptcha called invisible recaptcha. It works almost the same as Recaptcha v3, but instead of returning user score, it shows image if user seem to suspicious, this is equivalent of having low user score. BAS is capable of solving it also, check 'Solve Recaptcha 2.0' action.</span>(<a class="tr" href="#" onclick="BrowserAutomationStudio_OpenUrl('https://www.youtube.com/watch?v=ltWy6O9jsTo'); return false;">video</a>).</div>
    
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </div>
  </script>
  

  <script type="text/template" id="executefunctioninseveralthreads">
    <div class="container-fluid">
      <div class="col-xs-12" style="margin-bottom: 5px;">
        
        <div class="input-group">
          <span data-preserve="true" data-preserve-type="text" data-preserve-id="FunctionName">

            <input class="form-control function-input" type="text" id="FunctionName" placeholder="Function name">
            
            <ul class="dropdown-menu input-field-dropdown dropdown-align dropdown-black" data-toggle="dropdown">
              <li>
                <a tabindex="-1" href="#" class="func" data-result-target="#FunctionName">
                  <span class="tr">Select function</span>
                </a>
              </li>
            </ul>
          </span> 

          <span class="input-group-addon input-description tr">Function name</span>
        </div>
        
      </div>

      <%= _.template($('#input_constructor').html())({id:"ThreadNumber", description:tr("Thread number"), default_selector: "int", disable_string:true, disable_string:true, min_number: 1, value_number:10, help: {description: tr("Thread number as integer. BAS will create specified here number of threads after action start.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"SuccessNumber", description:tr("Success number"), default_selector: "int", disable_string:true, disable_string:true, min_number: 1, value_number:100, help: {description: tr("Maximum success number as integer. BAS will stop this action and all new thread created by it after maximum success number is reached.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"FailNumber", description:tr("Fail number"), default_selector: "int", disable_string:true, disable_string:true, min_number: 1, value_number:100, help: {description: tr("Maximum fail number as integer. BAS will stop this action and all new thread created by it after maximum fail number is reached.")}}) %>


    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Execute function specified number of times with specified number of threads. You can think of it as running another script inside current thread.</div>
      <div class="tr tooltip-paragraph-fold">After BAS encounters this action it starts specified number of threads and runs selected function inside them. Thread which called this actions stops until specified number of success or specified number of fails will be reached, but other threads continue execution.</div>
      <div class="tr tooltip-paragraph-fold">Recently started threads don't know about variables or browser state of thread, who started them, so data exchange between starter thread and recently created can only be performed with global variables or resources.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Example #1. You have a script which parses a list of links and want to get its content. Of cource, you can create a loop, iterate over them and parse. But in this case links will be processed one by one - sequentially. With this action you can process them in parallel. Create resource, write all links there and call parsing functions in several threads</span> (<span class="tr-en"><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://www.youtube.com/watch?v=vgzMX3F-EQI');return false">video</a></span><span class="tr-ru"><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://www.youtube.com/watch?v=Pal3HsU_UTA');return false">видео</a></span>)</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Example #2. You need call some function before script start and another after script finish. In that case you can set "Thread number", "Success number" and "Fail number" to 1 in main script. Create 3 functions: MainScript, OnStart and OnEnd and call OnStart and OnEnd with one thread, MainScript function should be called with thread and success and fail number same as whole script</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=onstartonend.png');return false">screen</a>)</div>
      <div class="tr tooltip-paragraph-last-fold">This action never fails even if fail number is reached, so you don't need to wrap it in ignore errors block.</div>
      <div class="tr tooltip-paragraph-last-fold">Call "End Script" inside specified function to stop this action manually.</div>
    </div>

    <%= _.template($('#back').html())({action:"executeandadd", visible:false}) %>
  </script>


  <script type="text/template" id="setheader">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"Name", description:tr("Header Name"), default_selector: "string", disable_int:true, value_string: "User-Agent", variants: ["User-Agent","Accept-Language"], size: 3, help: {description: tr("Request header name. Header name must contain one or several words separated with dash."),examples:[{code:"User-Agent",description:tr("Set 'User-Agent' header.")},{code:"Accept-Language",description:tr("Set 'Accept-Language' header.")}]}}) %>
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Header Value"), default_selector: "string", disable_int:true, value_string: "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0", help: {description: tr("Request header value. This could be arbitrary string.")}}) %>
      <%= _.template($('#targetfields').html())({}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Set request header for subsequent browser requests.</div>
      <div class="tr tooltip-paragraph-fold">Current action is deprecated. To ensure header authenticity, it is recommended to use the "<a href="#!/FingerprintSwitcher_Apply">Apply fingerprint</a>" action. Additionally, the "<b>Referrer</b>" should be specified in the "<a href="#!/load">Load</a>" action for the required Urls.</div>
      <div class="tr tooltip-paragraph-fold">This action will set an extra HTTP header that will be sent with every browser request made after this action.</div>
      <div class="tr tooltip-paragraph-last-fold">To disable all headers set by this action, use the "<a href="#!/reset">Reset</a>" action. However, it clears all browser data, not just the headers.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="clickCaptchaBrowser">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({ id: 'imageData', description: tr('Captcha picture data encoded in base64'), value_string: '', default_selector: 'string', disable_int: true, help: {
        description: tr('Data in base64 format can be obtained from screenshot action or from read file action.')
      }}) %>
      <%= _.template($('#input_constructor').html())({ id: 'serviceName', description: tr('Service name'), variants: [ 'rucaptcha', '2captcha' ], value_string: 'rucaptcha', default_selector: 'string', disable_int: true, help: {
        description: tr('Captcha solving service name'),
        examples: [
          { code: 'rucaptcha', description: tr('Solve captcha using https://rucaptcha.com/ service') },
          { code: '2captcha', description: tr('Solve captcha using https://2captcha.com/ service') },
        ]
      }}) %>
      <%= _.template($('#input_constructor').html())({ id: 'serviceKey', description: tr('Service key'), disable_int: true, default_selector: 'string', help: { description: tr('Captcha solving service key. You can get it in your personal account of selected captcha solving service') } }) %>
      <%= _.template($('#input_constructor').html())({ description: tr('Captcha description. Can be empty.'), value_string: '', default_selector: 'string', disable_int: true, id: 'textInstructions', help: {
        description: tr('If captcha has any description, it can be added with this field.'),
        examples: [
          { code: tr('Select all images where there is a plane') },
          { code: tr('Select all images where there is a boat') }
        ]
      }}) %>
      <%= _.template($('#variable_constructor').html())({ id: 'clickCoordinatesList', description: tr('Click coordinates'), default_variable: 'COORDINATES_LIST', help: {
        description: tr('List containing the coordinates of the points to be clicked. Each item in this list contains <code>X</code> and <code>Y</code> coordinates of one particular point. For example, if the service returns a list of the form <code>[[1,2], [3,5]]</code>, then there are only two points to click. The first point is located at position 1 horizontally and at position 2 vertically. The second point is used in the same way. After getting such a list, you can process it with loops like <code>for</code> or <code>foreach</code>. Inside the loop, you need to call an action that will perform a click on the coordinates, such as the <code>Click</code> action.<br>For the <code>X</code> coordinate you can use a construction like this - <code>[[COORDINATES_LIST]][pointIndex][0]</code>.<br>For the <code>Y</code> coordinate you can use a construction like this - <code>[[COORDINATES_LIST]][pointIndex][1]</code>.'),
        examples: [
          { code: '[ [120, 59], [91, 5], [59, 12] ]', description: tr('There are three points to click on the coordinates - X1 = 120, Y1 = 59. X2 = 91, Y2 = 5. X3 = 59, Y3 = 12.') },
          { code: '[ [15, 380], [1, 1] ]', description: tr('There are two points to click on the coordinates - X1 = 15, Y1 = 380. X2 = 1, Y2 = 1.') },
          { code: '[ [12, 24] ]', description: tr('There is one point to click on the coordinates - X1 = 12, Y1 = 24.') },
        ]
      }}) %>
      <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), description: tr("")}) %>
        <%= _.template($('#input_constructor').html())({ description: tr('Task solution check interval'), default_selector: 'int', value_number: 5000, disable_string: true, id: 'taskWaitTimeout', help: {
          description: tr('Task solution check interval in milliseconds. With this parameter you can control the length of the pause between each new check of the captcha solution.'),
          examples: [
            { code: '600', description: tr('Wait for 600 milliseconds') },
            { code: '10000', description: tr('Wait for 10 seconds') },
            { code: '5000', description: tr('Wait for 5 seconds') }
          ]
        }}) %>
        <%= _.template($('#input_constructor').html())({ description: tr('Task solution check delay'), default_selector: 'int', value_number: 5000, disable_string: true, id: 'taskWaitDelay', help: {
          description: tr('Task solution check delay in milliseconds. With this parameter you can control the length of the pause between sending the task to the service and the start of waiting for a solution. Most often, captcha-solving services specify the required waiting time, in other cases you can specify any value convenient for you.'),
          examples: [
            { code: '600', description: tr('Wait for 600 milliseconds') },
            { code: '10000', description: tr('Wait for 10 seconds') },
            { code: '5000', description: tr('Wait for 5 seconds') }
          ]
        }}) %>
        <%= _.template($('#input_constructor').html())({ description: tr('Service URL'), default_selector: 'string', disable_int: true, value_string: '', id: 'serviceUrl', help: {
          description: tr('Service URL. Can be blank. You can use this option if the service you want is not on the list of available services. In this case, specify the name of the service that works on a similar API and use the address you need.'),
          examples: [
            { code: tr('Empty string'), description: tr('Use default service URL, http://rucaptcha.com for RuCaptcha, etc') },
            { code: 'http://127.0.0.1:8083', description: tr('Use custom service URL with port 8083') },
            { code: 'http://127.0.0.3:8080', description: tr('Use custom service URL with port 8080') },
          ]
        }}) %>
      <%= _.template($('#block_end').html())() %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Solve any type of captcha that requires clicking on images.</div>
      <div class="tr tooltip-paragraph-fold">For <code>ReCaptcha</code> and <code>HCaptcha</code> solving it is recommended to use the <code>Solve Recaptcha 2.0</code> and <code>Solve HCaptcha</code> actions from the browser context menu, if it's possible. It is easier to use, and the captcha can be solved faster. Also, these actions can perform automatic submit of the solution. Use this action if other options don't suit you for some reason.</div>
      <div class="tr tooltip-paragraph-fold">This action allows you to solve any captcha that requires you to click on images according to specific instructions. These can be <code>ReCaptcha</code>, <code>HCaptcha</code> and other types. To solve such captchas, you need to send an image to the service containing elements to be clicked. If there is a description on the captcha or next to it, it is recommended to send it along with the image to avoid incorrect solutions.</div>
      <div class="tr tooltip-paragraph-fold">This action doesn't perform automatic coordinate clicks, unlike the <code>Solve captcha with clicks</code> action from the browser context menu, which does everything without your interaction. It's much easier to use.</div>
      <div class="tr tooltip-paragraph-fold">After the service solves the captcha, you will receive a list of coordinates on which you should click. In order to perform clicks, this list must be passed through any loop, such as <code>for</code> or <code>foreach</code>, and at each iteration call the <code>Click</code> actiom for each pair of <code>X</code> and <code>Y</code> coordinates. After the clicks are done, you need to continue manually. That is, you have to do your own solution confirmation or move on to the next image.</div>
      <div class="tr tooltip-paragraph-fold">All services requires a service key which which must be obtained on the service website and entered in the <code>Service key</code> field.</div>
      <div class="tr tooltip-paragraph-fold">To perform clicks on the received coordinates, you need to take into account the position of the element whose screenshot you are sending relative to the page, as well as scrolling vertically and horizontally. Therefore, the simplest option would be to use a similar action for a specific element from the context menu of the browser, where clicks will be performed automatically.</div>
      <div class="tr tooltip-paragraph-fold">An important point - this action does not automatically confirm the solution of the captcha. You have to do it yourself. For example, if you solve <code>ReCaptcha2</code> using this method, you should click the checkbox yourself, and after clicking on the coordinates, click the <code>Next</code> or <code>Done</code> button.</div>
      <div class="tr tooltip-paragraph-fold">The <code>Task solution check interval</code> parameter is responsible for the frequency of sending requests to the service to check the captcha solution. The more you set the value, the longer BAS will wait before sending the next request. It is recommended to use a delay of at least 5 seconds.</div>
      <div class="tr tooltip-paragraph-fold">The <code>Task solution check delay</code> parameter is responsible for the duration of waiting before the BAS starts checking the captcha. First, the captcha sent to the service, then the BAS will wait for the specified time, after which the task status check itself will begin. Most services recommend waiting at least 5 seconds.</div>
      <div class="tr tooltip-paragraph-fold">If the required service is not in the list of available ones, but it works through an API similar to the selected service, then you can specify required server URL in the <code>Service URL</code> field located in the additional settings.</div>
      <div class="tr tooltip-paragraph-fold">If you use programs such as <code>CapMonster</code>, <code>XEvil</code> or similar software, you must fill in the <code>Service URL</code> field in accordance with the documentation for this software.</div>
      <div class="tr tooltip-paragraph-last-fold">Detailed documentation for solving such captchas can be found <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://2captcha.com/2captcha-api#coordinates');return false">here</a>.</div>
    </div>
    <%= _.template($('#back').html())({ action: 'executeandadd', visible: true, name: tr('Solve captcha with clicks') }) %>
  </script>

  <script type="text/template" id="solvecaptcha">
    <div class="container-fluid solvecaptcha">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Captcha picture data encoded in base64"), default_selector: "expression", disable_int:true, disable_string:true, help: {description: tr("Data in base64 format can be obtained from screenshot action or from read file action.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Method", description:tr("Solve Method"), default_selector: "string", disable_int:true, value_string: "manual", variants: ["manual","antigate","rucaptcha","2captcha","capmonster","dbc", "captchasniper"], size: 3, help: {description: tr("Solve method is a string, you can set value directly or use variable or resource."), examples:[{code:"manual",description:tr("Image is solved directly by person who uses BAS.")},{code:"antigate",description:tr("Solve with http://anti-captcha.com/ service")},{code:"rucaptcha",description:tr("Solve with http://rucaptcha.com/ service")},{code:"2captcha",description:tr("Solve with http://2captcha.com/ service")},{code:"capmonter",description:tr("Use capmonster")},{code:"dbc",description:tr("Use http://deathbycaptcha.com/ service")}]}}) %>
      
      <%= _.template($('#input_constructor').html())({id:"Antigate", description:tr("Antigate/Rucaptcha/2captcha/DBC Key. Can be blank"), default_selector: "string", disable_int:true, help: {description: tr("This key is needed only if you are using services to solve captcha. It is not needed in manual, capmonster and captchasniper modes. In case of deathbycaptcha this field must contain dbc_login:dbc:password.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Server", description:tr("Server url. Can be blank"), default_selector: "string", disable_int:true, help: {description: tr("String which contains server url."), examples:[{code:"http://127.0.0.3:8083/"},{code:tr("Empty string"), description: tr("Use default server url, http://rucaptcha.com for rucaptcha, etc")}]}
}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save Result"), default_variable: "CAPTCHA_RESULT", help: {description: tr("String with captcha result")}}) %>
    </div>

    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">This action solves image captcha(not recaptcha) and works only if you have image data formatted as base64 string.</div>
      <div class="tr tooltip-paragraph-fold">Captcha text is saved to variable and can be used later.</div>
      <div class="tr tooltip-paragraph-fold">If you want to take captcha from element on screen, you should click on it and use "Solve Captcha" action.</div> 
      <div class="tr tooltip-paragraph-last-fold">If you want to solve recaptcha, click on recaptcha checkbox inside browser and choose "Solve Recaptcha 2.0" action.</div>
    </div>

    <%= _.template($('#back').html())({action:"executeandadd",use_timeout: true, visible:true,wiki: "how_to_solve_captcha"}) %>
  </script>
  
  <script type="text/template" id="javascript">
      <div class="container-fluid javascript">
        <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "SAVED_SCRIPT_RESULT", help: {description: tr("Variable with result of javascript execution. Type of variable is always string, if expression is evaluated to other type, it will be converted. If exception will occur during script execution, than empty string will return.")}}) %>
        <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Script Text"), default_selector: "string", disable_int:true, help: {description: tr("Script that will be executed in browser. Type of that value should be string. If you set type to expression, than script will be evaluated in BAS context first and than result of that evaluation will be send to browser. Using expression is usefull if you want to create script dynamically, but you need to use string type in most cases."), examples:[{code:"window.innerWidth",description:tr("Get window width")},{code:"document.readyState == \"complete\"",description:tr("Check if page is loading")}, {code:"let links = document.getElementsByTagName(\"a\"); links.length",description:tr("Find number of links on page")}, {code:"document.getElementById([[ID]]).click()",description:tr("Click on element with id from [[ID]] variable")}]}}) %>
        
      </div>
      <div class="tooltipinternal">
        <div class="tr tooltip-paragraph-first-fold">Execute javascript inside browser. This means that document, window and other browser javascript objects are available.</div>
        <div class="tr tooltip-paragraph-fold">Action works exactly the same as if you input code into browser console and output result into variable.</div>
        <div class="tr tooltip-paragraph-fold">You can also use resources and variables here but only in read mode. Following code will work document.getElementById([[ID]]).innerHTML, but you can't do like this <strike>[[RESULT]] = document.getElementById([[ID]]).innerHTML</strike>.</div> 
        <div class="tr tooltip-paragraph-fold">This action is deprecated. It is recommended to use the new <a href="#!/browserjavascript">Javascript</a> action.</div>
        <div class="tr tooltip-paragraph-last-fold">Use <a href="#!/custom">Execute Code</a> action if you want to run javascript inside thread.</div>
      </div>
      <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "how_to_execute_javascript_on_page_and_save_result"}) %>
  </script>

  <script type="text/template" id="browserjavascript">
    <div class="container-fluid">
      <span data-preserve="true" data-preserve-type="constr" data-preserve-id="Code">
        <div id="Code" class="browser-code-editor" data-is-code-editor="true" />
      </span>
      <%= "<s" + "cript>" %>
        window.Code = {Editor: null, InitialValue: ""}
    
        require(['vs/editor/editor.main'], function() {
          window.Code.Editor = createCodeEditor(document.getElementById('Code'), {
            value: window.Code.InitialValue
          });
        });
      <%= "</" + "script>" %>
      <div style="text-align: center">
        <a tabindex="-1" href="#" data-toggle="modal" data-result-target="#Code" class="var"  disable_globals="true">
          
          <span style="align-items: center; display: flex !important; justify-content: center;margin-top:5px;">
            <svg class="dropdown-icon" width="16" height="16"  viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"  style="margin-right:10px">
              <path d="M7.5 12h1V9.5H11v-1H8.5V6h-1v2.5H5v1h2.5V12z" fill="#337ab7" />
              <path d="M.5 2v12h15V2H.5zm14 11h-13V5h13v8z" fill="#337ab7" />
            </svg>
            <span class="tr">Insert variable</span>
          </span>
        </a>
      </div>
      <span class="short-description tr">Execute javascript inside browser. This means that document, window and other browser javascript objects are available.</span>
    </div>
    <%= _.template($('#back').html())({ action: "executeandadd", visible: true, use_timeout: true, use_modal_template:true, modal_code_id: "custom-help-browser-" + (_K || "en") }) %>
  </script>

  <script type="text/template" id="onloadjavascript">
      <div class="container-fluid javascript">
        <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Script Text"), default_selector: "string", disable_int:true, disable_editor:true, use_textarea:true, size: 8, disable_type_chooser:true, help: {description: tr("Script which must be executed at page start. May contain variables or resources."), examples:[{code:"window.secret = 123",description:tr("Set global variable in browser context")},{code:"Object.defineProperty(navigator,\"platform\", {  get: () => \"MacIntel\" });",description:tr("Set navigator.platform")}]}
}) %>
      </div>
      <div class="tooltipinternal">
        <div class="tr tooltip-paragraph-first-fold">This action sets script which must be executed inside every page and every frame immediately after page is created. Unlike javascript action, script defined here is executed at the very beginning of page load, which gives possibility to change browser internals like window.navigator. Action should be called before page load.</div>
        <span class="short-description tr">This action sets script which must be executed inside every page and every frame immediately after page is created.</span>
      </div>
      <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="parseline">
    <div class="container-fluid parseline">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Line"), default_selector: "string", disable_int:true, help: {description: tr("Line with several elements separated with \":\" or \",\" or \";\""), examples:[{code:"login:password"},{code:"id,name,login"}]}
}) %>
      <%= _.template($('#variable_constructor').html())({id:"VariablesList", description:tr("Variables To Save Result"), default_variable: "USERNAME,PASSWORD", append_mode:true, help: {description: tr("List of variables separated by commas. Results will be written into that variables.")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Parses line, which contains several elements. Elements are separated with one of following symbols: ":", ";", ",".</div>
      <div class="tr tooltip-paragraph-fold">This action is deprecated. It is recommended to use the new <a href="#!/parse_csv_string">Parse CSV string</a> action.</div>
      <div class="tr tooltip-paragraph-fold">For example, if you apply this action to line email@gmail.com:mypass1 and set "Variables To Save Result" param to USERNAME,PASSWORD, than this action will set [[USERNAME]] variable to email@gmail.com and [[PASSWORD]] variable to mypass1.</div>
      <div class="tr tooltip-paragraph-fold">If "Variables To Save Result" will contain more variables, than number of elements in string, than extra variables will be left unchanged.</div>
      <div class="tr tooltip-paragraph-fold">Use "Parse String" action if you want to get list as a result.</div>
      <div class="tr tooltip-paragraph-last-fold">This action also may parse strings in csv format.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
    
  </script>

  <script type="text/template" id="reset">
      <span data-preserve="true" data-preserve-type="check" data-preserve-id="Check">
      </span>
      <div class="tooltipinternal">
        <div class="tr tooltip-paragraph-first-fold">Clear all browser data: proxy, user agent, headers, BAS cache filters, BAS cache data, cookies.</div>
        <div class="tr tooltip-paragraph-last-fold">Don't call this action on thread start, BAS will clear data at the beginning of thread automatically.</div>
      </div>
      <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "how_to_clear_cookies_and_restart_browser"}) %>
  </script>

  <script type="text/template" id="openfile">
    <div class="container-fluid openfile">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("File path to set as result of open file dialog"), default_selector: "string", disable_int:true, help: {description: tr("This parameter is a string with file path. Slash type is not important. It also could be a json array with several files, see examples. In that case BAS acts like if user would selected several files."), examples:[{code:"C:\\file\\path.txt"},{code:"C:/file/path.txt"},{code:"[\"C:/file/path1.txt\", \"C:/file/path2.txt\"]"}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Uploading file is performed in two steps: setting next open file dialog result with this action and clicking on element which triggers file upload, like "Upload" button.</div>
      <div class="tr tooltip-paragraph-fold">You must always call this action before starting upload, otherwise BAS won't know which file it need to send to browser.</div>
      <div class="tr tooltip-paragraph-last-fold">Use resource with type FilesFromDirectory to upload all files from folder and distribute them across threads.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "how_to_use_open_file_dialog"}) %>
  </script>


  <script type="text/template" id="dragfile">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("File path to start drag"), default_selector: "string", disable_int:true, help: {description: tr("This parameter is a string with file path. Slash type is not important."), examples:[{code:"C:\\file\\path.txt"},{code:"C:/file/path.txt"}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">This action is alternative to "Open File Result" with only difference - it drag file into browser instead of opening dialog.</div>
      <div class="tr tooltip-paragraph-fold">Calling this action is the same as start dragging file into ordinary browser.</div>
      <div class="tr tooltip-paragraph-last-fold">Dont forget to drop it with Drop or Drop On Element action.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="promptresult">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Prompt user input result"), default_selector: "string", disable_int:true, help: {description: tr("Any string")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Prompt window displays a dialog with an optional message prompting the user to input some text. It is outdated functionality and most sites don't use it any more. BAS allows to input text into that window automatically, to do that you must call this action before prompt window will appear.</div>
      <div class="tr tooltip-paragraph-fold">Principle is the same as in "Open File Result", first you call action which sets result and than trigger dialog, BAS will recognize it and input previously setted up value.</div>
      <div class="tr tooltip-paragraph-last-fold">Prompt window browser documentation <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt');return false">link</a>.</div>
      <span class="short-description tr">Prompt window displays a dialog with an optional message prompting the user to input some text. It is outdated functionality and most sites don't use it any more.</span>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="httpauth">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"Login", description:tr("Http auth login"), default_selector: "string", disable_int:true, help: {description: tr("Site login, could be any string")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Password", description:tr("Http auth password"), default_selector: "string", disable_int:true, help: {description: tr("Site password, could be any string")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">HTTP authentication provides method for user to input site login and password. It is rarely used nowadays, but some sites still rely on it. During authentication process browser shows window and user must input authentication data there. This process can be automated, all you need to do is to call this action before window is triggered.</div>
      <div class="tr tooltip-paragraph-fold">Good idea would be to put it to the start of the script.</div>
      <div class="tr tooltip-paragraph-last-fold">In case if this action will be called after window popup, authentication process will fail.</div>
      <span class="short-description tr">HTTP authentication provides method for user to input site login and password. It is rarely used nowadays, but some sites still rely on it.</span>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="getcookiesforurl">
      <div class="container-fluid">
        <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Url"), default_selector: "string", disable_int:true}) %>
        <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "COOKIES_FOR_URL"}) %>
      </div>
      <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="savecookies">
    <div class="container-fluid">
          <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "SAVED_COOKIES", help: {description: tr("Variable in which, after executing the action, a JSON string containing the retrieved cookies will be written.")}}) %>
          <%= _.template($('#input_constructor').html())({id:"Domain", description:tr("Domain"), default_selector: "string", disable_int:true, help: {description: tr("Domain or domain mask for which cookies should be retrieved. In the mask, the \"*\" character matches any number of characters, and \"?\" matches a single character (does not match a dot). Matching is case-insensitive. If the mask starts with \"^\", strict mode is enabled: the pattern is matched exactly, without adding \"*\" at the beginning and end. You can specify multiple domains (or masks) as a list or in a comma-separated string. If no value is specified, the action will retrieve cookies for all domains."), examples:[{code:"example.com"},{code:"site*.com"},{code:"^strict.net"},{code:"example.com,sub?.site.com"},{code:"[\"test.com\", \"*.domain.org\"]"},{code:tr("Empty string"),description:tr("Get cookies for all domains")}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Save browser cookies into variable.</div>
      <div class="tr tooltip-paragraph-fold">This action will get cookies from the browser and save them as a JSON string to the specified variable.</div>
      <div class="tr tooltip-paragraph-fold">In the "<b>Domain</b>" parameter, you can specify one or more domains (or domain masks) for which to retrieve cookies. If no value is specified, all available cookies will be retrieved.</div>
      <div class="tr tooltip-paragraph-fold">Most of sites uses cookies to store user data, like user authorisation. This means, that by storing cookies after authorisation on some site and restore them later you can implement autologin.</div>
      <div class="tr tooltip-paragraph-fold">Cookie values is just a string, so you may save it to file, or database and use them later.</div>
      <div class="tr tooltip-paragraph-fold">However, not all websites use cookies for storing authentication; they may rely on localStorage or other mechanisms. Therefore, a more universal solution is to use <a href="#!/UseProfile">profiles</a>, which already include cookies, localStorage, and other data.</div>
      <div class="tr tooltip-paragraph-fold">The cookie JSON string is an object with a single property, "<b>cookies</b>" which is an array containing a list of all received cookies.</div>
      <div class="tr tooltip-paragraph-fold">Each individual element of this array is an object with the following properties:</div>
      <div class="tr tooltip-paragraph-fold"><b>name</b> - The name of the cookie.</div>
      <div class="tr tooltip-paragraph-fold"><b>value</b> - The value of the cookie.</div>
      <div class="tr tooltip-paragraph-fold"><b>domain</b> - The domain to which the cookie is assigned.</div>
      <div class="tr tooltip-paragraph-fold"><b>path</b> - The path for which the cookie is valid.</div>
      <div class="tr tooltip-paragraph-fold"><b>expires</b> - A floating-point number representing the cookies expiration time in Unix timestamp format, or <code>-1</code> if the cookie is session.</div>
      <div class="tr tooltip-paragraph-fold">The cookie expiration date can be determined by multiplying the value of the "<b>expires</b>" property by 1000 and using the resulting value in the "<a href="#!/datetime_msecondstodate">Milliseconds To Date</a>" action.</div>
      <div class="tr tooltip-paragraph-fold"><b>size</b> - An integer representing the size of the cookie in bytes.</div>
      <div class="tr tooltip-paragraph-fold"><b>httpOnly</b> - A flag indicating whether the cookie is accessible only via HTTP (true/false).</div>
      <div class="tr tooltip-paragraph-fold"><b>secure</b> - A flag indicating that the cookie is transmitted only over HTTPS (true/false).</div>
      <div class="tr tooltip-paragraph-fold"><b>session</b> - A flag indicating whether the cookie is a session cookie (true/false).</div>
      <div class="tr tooltip-paragraph-fold">And other more specific properties. A list of all properties and their descriptions can be found <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://chromedevtools.github.io/devtools-protocol/tot/Network/#type-Cookie'); return false;">here</a>.</div>
      <div class="tr tooltip-paragraph-last-fold">If you need to modify cookies or extract specific values from them, use actions from the "<b>JSON</b>" module.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="restorecookies">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Cookies"), default_selector: "string", disable_int:true, help: {description: tr("A JSON string containing the cookies to be set in the browser. If the value is not specified and adding to existing cookies is disabled, the action will clear all cookies in the browser."), examples:[{code:tr("Empty string"),description:tr("Clear cookies")}]}}) %>
      <%= _.template($('#block_start').html())({id:"Advanced", name: tr("Additional settings"), description: tr("")}) %>
        <%= _.template($('#checkbox').html())({id:"Append", title: tr("Add cookies to existing ones"), help: {title: tr("Add cookies to existing ones"), description: tr("If enabled, the specified cookies will be added to the existing cookies, rather than replacing them."), examples: [{code: tr("Activated"), description: tr("Add the specified cookies to existing ones")}, {code: tr("Deactivated"), description: tr("Replace existing cookies with the specified ones")}]}}) %>
      <%= _.template($('#block_end').html())() %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Set cookies for browser.</div>
      <div class="tr tooltip-paragraph-fold">This action will overwrite the browser cookies with the values from the specified JSON string or add them to the existing ones if the corresponding parameter is activated in the additional settings.</div>
      <div class="tr tooltip-paragraph-fold">If the "<b>Cookies</b>" parameter is not specified and the "<b>Add cookies to existing ones</b>" parameter in the additional settings is not activated, this action will completely clear all cookies in the browser.</div>
      <div class="tr tooltip-paragraph-fold">Most of sites uses cookies to store user data, like user authorisation. This means, that by storing cookies after authorisation on some site and restore them later you can implement autologin.</div>
      <div class="tr tooltip-paragraph-fold">Cookie values is just a string, so you may save it to file, or database and use them later.</div>
      <div class="tr tooltip-paragraph-fold">However, not all websites use cookies for storing authentication; they may rely on localStorage or other mechanisms. Therefore, a more universal solution is to use <a href="#!/UseProfile">profiles</a>, which already include cookies, localStorage, and other data.</div>
      <div class="tr tooltip-paragraph-fold">The cookie JSON string is an object with a single property, "<b>cookies</b>" which is an array containing a list of all cookies.</div>
      <div class="tr tooltip-paragraph-fold">Each individual element of this array is an object with the following properties:</div>
      <div class="tr tooltip-paragraph-fold"><b>name</b> - The name of the cookie.</div>
      <div class="tr tooltip-paragraph-fold"><b>value</b> - The value of the cookie.</div>
      <div class="tr tooltip-paragraph-fold"><b>domain</b> - The domain to which the cookie is assigned.</div>
      <div class="tr tooltip-paragraph-fold"><b>path</b> - The path for which the cookie is valid.</div>
      <div class="tr tooltip-paragraph-fold"><b>expires</b> - A floating-point number representing the cookies expiration time in Unix timestamp format, or <code>-1</code> if the cookie is session.</div>
      <div class="tr tooltip-paragraph-fold"><b>size</b> - An integer representing the size of the cookie in bytes.</div>
      <div class="tr tooltip-paragraph-fold"><b>httpOnly</b> - A flag indicating whether the cookie is accessible only via HTTP (true/false).</div>
      <div class="tr tooltip-paragraph-fold"><b>secure</b> - A flag indicating that the cookie is transmitted only over HTTPS (true/false).</div>
      <div class="tr tooltip-paragraph-fold"><b>session</b> - A flag indicating whether the cookie is a session cookie (true/false).</div>
      <div class="tr tooltip-paragraph-last-fold">And other more specific properties. A list of all properties and their descriptions can be found <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://chromedevtools.github.io/devtools-protocol/tot/Network/#type-Cookie'); return false;">here</a>.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="scroll">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"X", description:tr("Scroll x position"), default_selector: "int", disable_string:true, help: {description: tr("Integer value, offset from the left edge of the page")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Y", description:tr("Scroll y position"), default_selector: "int", disable_string:true, help: {description: tr("Integer value, offset from the top edge of the page"), examples:[{code:"0",description:tr("Scroll to top")},{code:"500",description:tr("Scroll page, so 500 px will be visible")},{code:"9999999",description:tr("Scroll to page bottom")}]}}) %>
      <%= _.template($('#checkbox').html())({id: "Check", title: tr("Use mouse wheel or touch")}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Scroll browser. The objective of this action is to make specified coordinates visible.</div>
      <div class="tr tooltip-paragraph-fold">It doesn't move left top corner of screen to desired position, just ensures that certian position is visible on screen. If coordinates are already visible, than this action will do nothing, otherwise it will scroll viewport in such way, that coordinates are located as close as possible to screen center.</div>
      <div class="tr tooltip-paragraph-fold">If you want to make certain element visible, use "Scroll to element" instead.</div> 
      <div class="tr tooltip-paragraph-fold">If "Use mouse wheel or touch" is checked, scrolling will be emulated as if it will be done by a real user. Mouse wheel will be used in desktop environment and touch screen in mobile. If checkbox is unchecked, scroll will be performed instantly.</div> 
      <div class="tr tooltip-paragraph-last-fold">If you want to scroll to page bottom, use following settings "Scroll x position" = 0, "Scroll y position" = 999999.</div>
    </div>

    <%= _.template($('#back').html())({action:"executeandadd", use_waiter:true, use_timeout: true, visible:true, wiki: "how_to_scroll_page"}) %>
  </script>

  <script type="text/template" id="html">
      <div class="container-fluid">
        <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "SAVED_PAGE_HTML", help: {description: tr("Variable where page source will be saved.")} }) %>
      </div>
      <div class="tooltipinternal">
        <div class="tr tooltip-paragraph-first-fold">Get page source and save it to variable. This action saves current source with all changes but not the initial returned by server.</div>
        <div class="tr tooltip-paragraph-last-fold">You can parse it with regular expressions or xpath.</div>
      </div>

      <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "how_to_get_page_source"}) %>
  </script>

  <script type="text/template" id="renderscreen">
    <div class="container-fluid renderscreen">
      <%= _.template($('#input_constructor').html())({id:"X", description:"X", default_selector: "int", disable_string:true, value_number:0, help: {description: tr("Integer value, offset from the left edge of the page")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Y", description:"Y", default_selector: "int", disable_string:true, value_number:0, help: {description: tr("Integer value, offset from the top edge of the page")}}) %>

      <%= _.template($('#input_constructor').html())({id:"Width", description:tr("Width"), default_selector: "int", disable_string:true, value_number:100, help: {description: tr("Image width. Can't be bigger that window width.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Height", description:tr("Height"), default_selector: "int", disable_string:true, value_number:100, help: {description: tr("Image height. Can't be bigger that window height.")}}) %>
 
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save as base64 png"), default_variable: "RENDER_RESULT", help: {description: tr("After action will finish, this variable will contain base64 encoded image data, you can use it as captcha or write to file.")}}) %>

 
    </div>

    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">This action makes screenshot of selected screen part and saves it to png image encoded as base64 string.</div>
      <div class="tr tooltip-paragraph-fold">If selected area is not visible, page will be scrolled.</div>
      <div class="tr tooltip-paragraph-fold">X and Y coordinates are calculated in absolute displacement from page edges.</div> 
      <div class="tr tooltip-paragraph-fold">If you want to make screenshot of certain element, click on it and select "Screenshot" action.</div>
      <div class="tr tooltip-paragraph-last-fold">If you want to make screenshot of whole page, click on any browser element and use "Screenshot" action with &gt;CSS&gt; body selector.</div>
    </div>


    <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "how_to_make_screenshot"}) %>
  </script>

<script type="text/template" id="cachemaskallow">
    <div class="container-fluid">
      <%= _.template($('#filter').html())({id:"urlFilters", name:tr("Filters for URL"), hide: true, or_select:true, scheme: {match_select: true, types: ['Equals', 'Starts', 'Ends', 'Contains', 'List', 'Mask', 'Regexp']}, help: {description: tr("URL filters allow you to define conditions for selecting requests whose data should be cached. They enable you to precisely specify which URLs' requests will be intercepted and stored, helping to limit the volume of cached data. If no filters are set, the function will save data for all requests of the selected type.")}}) %>
      <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), description: tr("")}) %>
        <%= _.template($('#input_constructor').html())({id:"methods", description:tr("Request type"), default_selector:"string", disable_int: true, variants: [{value:"ALL", description:tr("Save data for all types of HTTP requests")},"GET","HEAD","POST","PUT","DELETE","CONNECT","OPTIONS","TRACE","PATCH"], value_string: "ALL", help: {description: tr("The type of HTTP request for which data should be saved. You can specify multiple types as a list or a comma-separated string, or use the string \"<b>ALL</b>\" to save data for all request types."), examples:[{code:"POST"},{code:"PUT"},{code:"PUT, POST"},{code:"ALL",description:tr("Save data for all types of HTTP requests")}]}}) %>
        <%= _.template($('#input_constructor').html())({id:"limit", description:tr("Number of actuations"), default_selector:"int", disable_string:true, value_number:0, min_number:0, help: {description: tr("The maximum number of requests for which data will be saved.") + " " + tr("If not specified or set to zero, there will be no limit."), examples: [{code:2},{code:5},{code:0,description:tr("Don't limit the number of actuations")},{code:tr("Empty value"),description:tr("Don't limit the number of actuations")}]}}) %>
      <%= _.template($('#block_end').html())() %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Replacement ID"), default_variable: "REPLACEMENT_ID_CACHE_ALLOW", help: {description: tr("Variable in which, after successful execution of the action, the ID of the created filtering function will be written. Using this ID, you can stop the function or get its statistics."), examples:[{code:"CACHECTRL_762937805"},{code:"CACHECTRL_756637936"},{code:"CACHECTRL_1132544774"}]}}) %>
      <div style="display:none">
        <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Match"), default_selector: "string", disable_int:true, value_string: "*"}) %>
      </div>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Add page content to cache if URL matches specified filters. Works only on pages which will be loaded next after this action call.</div>
      <div class="tr tooltip-paragraph-fold">This action creates a filtering function that will intercepts requests matching the specified filters and the selected request type, saving their data for further use.</div>
      <div class="tr tooltip-paragraph-fold">If no filters are specified, the function will save the data of all requests of the selected type. Try to avoid this, and specify the most detailed filters possible to reduce the amount of cached data. Adding item to cache is resource consuming task, by limiting number of cache items you can optimize your script.</div>
      <div class="tr tooltip-paragraph-fold">All functions created by this action and the "<a href="#!/cachemaskdeny">Deny cache</a>" action are added to a common list. When a request is received, this list is checked in the order of addition.</div>
      <div class="tr tooltip-paragraph-fold">If no function matches the request, the request data is not saved. If exactly one matching function is found, its action (data is saved or not) is applied. If there are multiple matching functions, the one that was added last will be executed.</div>
      <div class="tr tooltip-paragraph-fold">By combining this action with the "<a href="#!/cachemaskdeny">Deny cache</a>" action, you can flexibly control which request data will be saved and which will not. This allows you to store only the necessary data, such as dynamic captcha data, an authorization token, and so on.</div>
      <div class="tr tooltip-paragraph-fold">The function can be stopped using the replacement ID obtained as a result of executing this action in the "<a href="#!/disablerules">Stop replacement</a>" action.</div>
      <div class="tr tooltip-paragraph-fold">This replacement ID can also be used in the "<a href="#!/getrulestats">Get replacement stats</a>" action to retrieve the function's execution statistics.</div>
      <div class="tr tooltip-paragraph-fold">You can also stop all filtering functions at once by using the "<a href="#!/clearmasks">Clear filters</a>" action.</div>
      <div class="tr tooltip-paragraph-fold">In additional settings, you can set a limit on the number of function executions.</div>
      <div class="tr tooltip-paragraph-fold">The response data from the last request can be retrieved using the "<a href="#!/getfromcache">Get last item from cache</a>" action.</div>
      <div class="tr tooltip-paragraph-fold">The list of all request data can be retrieved using the "<a href="#!/getallcache">Get all items from cache</a>" action.</div>
      <div class="tr tooltip-paragraph-last-fold">All saved request data can be deleted using the "<a href="#!/cleardata">Clear Cached Data</a>" action.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>
  
  <script type="text/template" id="cachemaskdeny">
    <div class="container-fluid">
      <%= _.template($('#filter').html())({id:"urlFilters", name:tr("Filters for URL"), hide: true, or_select:true, scheme: {match_select: true, types: ['Equals', 'Starts', 'Ends', 'Contains', 'List', 'Mask', 'Regexp']}, help: {description: tr("URL filters allow you to define conditions for selecting requests whose data should not be cached. They enable you to precisely specify for which URLs data saving will be prevented, helping to avoid caching unnecessary information. If no filters are set, the function will block data saving for all requests of the selected type.")}}) %>
      <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), description: tr("")}) %>
        <%= _.template($('#input_constructor').html())({id:"methods", description:tr("Request type"), default_selector:"string", disable_int: true, variants: [{value:"ALL", description:tr("Prevent saving data for all types of HTTP requests")},"GET","HEAD","POST","PUT","DELETE","CONNECT","OPTIONS","TRACE","PATCH"], value_string: "ALL", help: {description: tr("The type of HTTP request for which to prevent data from being saved. You can specify multiple types as a list or a comma-separated string, or use the string \"<b>ALL</b>\" to prevent data from being saved for all request types."), examples:[{code:"POST"},{code:"PUT"},{code:"PUT, POST"},{code:"ALL",description:tr("Prevent saving data for all types of HTTP requests")}]}}) %>
        <%= _.template($('#input_constructor').html())({id:"limit", description:tr("Number of actuations"), default_selector:"int", disable_string:true, value_number:0, min_number:0, help: {description: tr("The maximum number of requests for which data saving will be prohibited.") + " " + tr("If not specified or set to zero, there will be no limit."), examples: [{code:2},{code:5},{code:0,description:tr("Don't limit the number of actuations")},{code:tr("Empty value"),description:tr("Don't limit the number of actuations")}]}}) %>
      <%= _.template($('#block_end').html())() %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Replacement ID"), default_variable: "REPLACEMENT_ID_CACHE_DENY", help: {description: tr("Variable in which, after successful execution of the action, the ID of the created filtering function will be written. Using this ID, you can stop the function or get its statistics."), examples:[{code:"CACHECTRL_307521151"},{code:"CACHECTRL_1820405423"},{code:"CACHECTRL_1164655934"}]}}) %>
      <div style="display:none">
        <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Match"), default_selector: "string", disable_int:true}) %>
      </div>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Do not add page content to cache if URL matches specified filters. Works only on pages which will be loaded next after this action call.</div>
      <div class="tr tooltip-paragraph-fold">This action creates a filtering function that will prevent data from being saved for requests matching the specified filters and the selected request type.</div>
      <div class="tr tooltip-paragraph-fold">If no filters are specified, the function will block data saving for all requests of the selected type.</div>
      <div class="tr tooltip-paragraph-fold">All functions created by this action and the "<a href="#!/cachemaskallow">Allow cache</a>" action are added to a common list. When a request is received, this list is checked in the order of addition.</div>
      <div class="tr tooltip-paragraph-fold">If no function matches the request, the request data is not saved. If exactly one matching function is found, its action (data is saved or not) is applied. If there are multiple matching functions, the one that was added last will be executed.</div>
      <div class="tr tooltip-paragraph-fold">By combining this action with the "<a href="#!/cachemaskallow">Allow cache</a>" action, you can flexibly control which request data will be saved and which will not. This allows you to store only the necessary data, such as dynamic captcha data, an authorization token, and so on.</div>
      <div class="tr tooltip-paragraph-fold">The function can be stopped using the replacement ID obtained as a result of executing this action in the "<a href="#!/disablerules">Stop replacement</a>" action.</div>
      <div class="tr tooltip-paragraph-fold">This replacement ID can also be used in the "<a href="#!/getrulestats">Get replacement stats</a>" action to retrieve the function's execution statistics.</div>
      <div class="tr tooltip-paragraph-fold">You can also stop all filtering functions at once by using the "<a href="#!/clearmasks">Clear filters</a>" action.</div>
      <div class="tr tooltip-paragraph-last-fold">In additional settings, you can set a limit on the number of function executions.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="cachemaskclear">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Clear all cache filters.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="restrictpopups">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Restrict all popups.</div>
      <div class="tr tooltip-paragraph-fold">This action prevents new tabs from being opened when clicking on a link with the <code>target="_blank"</code> attribute, opening a link while holding the Ctrl key, or using any other methods, including JavaScript.</div>
      <div class="tr tooltip-paragraph-fold">The restriction on creating new tabs also applies to the "<a href="#!/addtab">Add Tab</a>" action, which will return an error during the restriction period.</div>
      <div class="tr tooltip-paragraph-fold">You can restrict specific popup with "<a href="#!/requestmaskdeny">Deny request</a>" action.</div>
      <div class="tr tooltip-paragraph-last-fold">To cancel this action, use the "<a href="#!/allowpopups">Allow popups</a>" action.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="restrictdownloads">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Restrict all file downloads.</div>
      <div class="tr tooltip-paragraph-fold">This action blocks the ability to download any files in the browser, providing additional protection against potentially malicious or unwanted content.</div>
      <div class="tr tooltip-paragraph-fold">You can restrict specific download with "<a href="#!/requestmaskdeny">Deny request</a>" action.</div>
      <div class="tr tooltip-paragraph-last-fold">To cancel this action, use the "<a href="#!/allowdownloads">Allow downloads</a>" action.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="allowpopups">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Allow all popups.</div>
      <div class="tr tooltip-paragraph-fold">This action removes the restriction on creating new tabs that was previously set by the "<a href="#!/restrictpopups">Restrict popups</a>" action.</div>
      <div class="tr tooltip-paragraph-last-fold">If the restriction on creating new tabs was not set, this action will do nothing.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="allowdownloads">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Allow all file downloads.</div>
      <div class="tr tooltip-paragraph-fold">This action removes the file download restriction set by the "<a href="#!/restrictdownloads">Restrict downloads</a>" action.</div>
      <div class="tr tooltip-paragraph-fold">If the file download restriction was not set, this action will do nothing.</div>
      <div class="tr tooltip-paragraph-last-fold">You can wait for the file to download and get its path using the "<a href="#!/waitfiledownload">Wait File Download</a>" action from the "<b>Waiters</b>" module.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="requestmaskdeny">
    <div class="container-fluid">
      <%= _.template($('#filter').html())({id:"urlFilters", name:tr("Filters for URL"), hide: true, or_select:true, scheme: {match_select: true, types: ['Equals', 'Starts', 'Ends', 'Contains', 'List', 'Mask', 'Regexp']}, help: {description: tr("URL filters allow you to define conditions for selecting URLs whose loading should be blocked. They enable you to precisely specify which addresses should have their requests prevented. If no filters are set, all requests matching the selected type will be blocked.")}}) %>
      <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), description: tr("")}) %>
        <%= _.template($('#input_constructor').html())({id:"methods", description:tr("Request type"), default_selector:"string", disable_int: true, variants: [{value:"ALL", description:tr("Block all types of HTTP requests")},"GET","HEAD","POST","PUT","DELETE","CONNECT","OPTIONS","TRACE","PATCH"], value_string: "ALL", help: {description: tr("The type of HTTP request that should be blocked. You can specify multiple types as a list or a comma-separated string, or use the string \"<b>ALL</b>\" to block all request types."), examples:[{code:"POST"},{code:"PUT"},{code:"PUT, POST"},{code:"ALL",description:tr("Block all types of HTTP requests")}]}}) %>
      <%= _.template($('#block_end').html())() %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Replacement ID"), default_variable: "REPLACEMENT_ID_REQUEST_DENY", help: {description: tr("Variable in which, after successful execution of the action, the ID of the created filtering function will be written. Using this ID, you can stop the function or get its statistics."), examples:[{code:"REQCTRL_323941945"},{code:"REQCTRL_1060399004"},{code:"REQCTRL_2076347053"}]}}) %>
      <div style="display:none">
        <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Match"), default_selector: "string", disable_int:true}) %>
      </div>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Deny URL loading if URL matches specified filters. By default every URL is loaded.</div>
      <div class="tr tooltip-paragraph-fold">This action creates a filtering function that will block requests matching the specified filters and the selected request type.</div>
      <div class="tr tooltip-paragraph-fold">If no filters are specified, the function will block all requests of the selected type.</div>
      <div class="tr tooltip-paragraph-fold">All functions created by this action and the "<a href="#!/requestmaskallow">Allow request</a>" action are added to a common list. When a request is created, this list is checked in the order of addition.</div>
      <div class="tr tooltip-paragraph-fold">If no function matches the request, it is executed without restrictions. If exactly one matching function is found, its action (allow or block) is applied. If there are multiple matching functions, the one that was added last will be executed.</div>
      <div class="tr tooltip-paragraph-fold">By combining this action with the "<a href="#!/requestmaskallow">Allow request</a>" action, you can flexibly control which requests are allowed and which are blocked, saving bandwidth and preventing the loading of unwanted content (such as advertisements).</div>
      <div class="tr tooltip-paragraph-fold">The function can be stopped using the replacement ID obtained as a result of executing this action in the "<a href="#!/disablerules">Stop replacement</a>" action.</div>
      <div class="tr tooltip-paragraph-fold">This replacement ID can also be used in the "<a href="#!/getrulestats">Get replacement stats</a>" action to retrieve the function's execution statistics.</div>
      <div class="tr tooltip-paragraph-last-fold">You can also stop all filtering functions at once by using the "<a href="#!/clearmasks">Clear filters</a>" action.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="requestmaskallow">
    <div class="container-fluid">
      <%= _.template($('#filter').html())({id:"urlFilters", name:tr("Filters for URL"), hide: true, or_select:true, scheme: {match_select: true, types: ['Equals', 'Starts', 'Ends', 'Contains', 'List', 'Mask', 'Regexp']}, help: {description: tr("URL filters allow you to define conditions for selecting URLs for which the request is permitted. They enable you to precisely specify which addresses should be allowed to load. If no filters are set, the allow action will apply to all requests of the selected type.")}}) %>
      <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), description: tr("")}) %>
        <%= _.template($('#input_constructor').html())({id:"methods", description:tr("Request type"), default_selector:"string", disable_int: true, variants: [{value:"ALL", description:tr("Allow all types of HTTP requests")},"GET","HEAD","POST","PUT","DELETE","CONNECT","OPTIONS","TRACE","PATCH"], value_string: "ALL", help: {description: tr("The type of HTTP request that should be allowed. You can specify multiple types as a list or a comma-separated string, or use the string \"<b>ALL</b>\" to allow all request types."), examples:[{code:"POST"},{code:"PUT"},{code:"PUT, POST"},{code:"ALL",description:tr("Allow all types of HTTP requests")}]}}) %>
      <%= _.template($('#block_end').html())() %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Replacement ID"), default_variable: "REPLACEMENT_ID_REQUEST_ALLOW", help: {description: tr("Variable in which, after successful execution of the action, the ID of the created filtering function will be written. Using this ID, you can stop the function or get its statistics."), examples:[{code:"REQCTRL_639295180"},{code:"REQCTRL_829643785"},{code:"REQCTRL_2042021025"}]}}) %>
      <div style="display:none">
        <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Match"), default_selector: "string", disable_int:true}) %>
      </div>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Allow URL loading if URL matches specified filters. By default every URL is loaded.</div>
      <div class="tr tooltip-paragraph-fold">This action creates a filtering function that will allow requests matching the specified filters and the selected request type.</div>
      <div class="tr tooltip-paragraph-fold">If no filters are specified, the function will allow all requests of the selected type.</div>
      <div class="tr tooltip-paragraph-fold">All functions created by this action and the "<a href="#!/requestmaskdeny">Deny request</a>" action are added to a common list. When a request is created, this list is checked in the order of addition.</div>
      <div class="tr tooltip-paragraph-fold">If no function matches the request, it is executed without restrictions. If exactly one matching function is found, its action (allow or block) is applied. If there are multiple matching functions, the one that was added last will be executed.</div>
      <div class="tr tooltip-paragraph-fold">By combining this action with the "<a href="#!/requestmaskdeny">Deny request</a>" action, you can flexibly control which requests are allowed and which are blocked, saving bandwidth and preventing the loading of unwanted content (such as advertisements).</div>
      <div class="tr tooltip-paragraph-fold">The function can be stopped using the replacement ID obtained as a result of executing this action in the "<a href="#!/disablerules">Stop replacement</a>" action.</div>
      <div class="tr tooltip-paragraph-fold">This replacement ID can also be used in the "<a href="#!/getrulestats">Get replacement stats</a>" action to retrieve the function's execution statistics.</div>
      <div class="tr tooltip-paragraph-last-fold">You can also stop all filtering functions at once by using the "<a href="#!/clearmasks">Clear filters</a>" action.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="requestmaskclear">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Clear all previously added request filters.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="clearmasks">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Clear all previously added cache and request filters.</div>
      <div class="tr tooltip-paragraph-fold">This action will completely and permanently stop all cache and request filtering functions previously created via the following actions: "<a href="#!/cachemaskallow">Allow cache</a>", "<a href="#!/cachemaskdeny">Deny cache</a>", "<a href="#!/requestmaskallow">Allow request</a>", or "<a href="#!/requestmaskdeny">Deny request</a>".</div>
      <div class="tr tooltip-paragraph-fold">To stop specific functions, use the "<a href="#!/disablerules">Stop replacement</a>" action.</div>
      <div class="tr tooltip-paragraph-fold">Stopping a function removes all information about it, making it impossible to retrieve statistics for these functions after this action is performed.</div>
      <div class="tr tooltip-paragraph-last-fold">If no cache or request filtering functions have been created, this action will do nothing.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="cleardata">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Delete information about all loaded URLs from the cache.</div>
      <div class="tr tooltip-paragraph-fold">This action will completely and permanently delete all cached data resulting from running functions created using the "<a href="#!/cachemaskallow">Allow cache</a>" and "<a href="#!/cachemaskdeny">Deny cache</a>" actions.</div>
      <div class="tr tooltip-paragraph-last-fold">Also, this action will clear the list of loaded URLs, which is used in the "<a href="#!/getstatus">Get Status</a>" and "<a href="#!/isloaded">Is Loaded</a>" actions.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="loadcookiesfrombrowser">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Load cookies from browser to http client.</div>
      <div class="tr tooltip-paragraph-fold">Most of sites uses cookies to store user data, like user authorisation. This means, that by storing cookies after authorisation on some site and restore them later you can implement autologin.</div>
      <div class="tr tooltip-paragraph-last-fold">If login procedure is complicated, login may be performed with browser, and everything else with http client. To do that, after login with browser use this action and authorisation state will be transfered to http client.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="loadcookiesfromhttpclient">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Load cookies from http client to browser.</div>
      <div class="tr tooltip-paragraph-fold">This action will overwrite all cookies set in the browser with cookies received from the http client.</div>
      <div class="tr tooltip-paragraph-fold">This action is useful when performing certain operations is difficult with an HTTP client but easy in a browser.</div>
      <div class="tr tooltip-paragraph-last-fold">After performing the necessary actions, the updated cookies can be transferred back to the http client using the "<a href="#!/loadcookiesfrombrowser">Load cookies from browser</a>" action.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="closebrowser">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Close browser which was created with 'Open Browser' action. This action is not mandatory for use to work with browser.</div>
      <div class="tooltip-paragraph-fold">
        <span class="tr">By default browser is created only after running first action that uses browser. After browser is created, it won't be deleted until thread end</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=browserlifetimedefault.png');return false">screen</a> ). <span class="tr">Running browser, especially in multithreaded mode, is task that consumes a lot of PC resources. So this approach may not be always effective. To avoid using browser, when you don't need it, you can explicitly specify browser lifetime with 'Open browser' and 'Close browser'</span>
  ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=browserlifetimemanual.png');return false">screen</a> ).
      </div>
      <div class="tooltip-paragraph-fold">
        <span class="tr">In case if script has at least one 'Open browser' or 'Close browser' action, then browser manual control mode is on. This means, that you must explicitly set all places where browser must be created and places where browser must be closed. If you try to use browser when it is yet not created or already closed, thread will fail with error</span> 
        ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=browserlifetimefail.png');return false">screen</a> ).
      </div>
      <div class="tr tooltip-paragraph-last-fold">It is very important to understand, that by default browser is created automatically and you don't need to call 'Open Browser' action, unless to want to control browser lifetime.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="openbrowser">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Create a browser if it has not already been created. This action is not mandatory for use to work with browser.</div>
      <div class="tooltip-paragraph-fold">
        <span class="tr">By default browser is created only after running first action that uses browser. After browser is created, it won't be deleted until thread end</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=browserlifetimedefault.png');return false">screen</a> ). <span class="tr">Running browser, especially in multithreaded mode, is task that consumes a lot of PC resources. So this approach may not be always effective. To avoid using browser, when you don't need it, you can explicitly specify browser lifetime with 'Open browser' and 'Close browser'</span>
  ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=browserlifetimemanual.png');return false">screen</a> ).
      </div>
      <div class="tooltip-paragraph-fold">
        <span class="tr">In case if script has at least one 'Open browser' or 'Close browser' action, then browser manual control mode is on. This means, that you must explicitly set all places where browser must be created and places where browser must be closed. If you try to use browser when it is yet not created or already closed, thread will fail with error</span> 
        ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=browserlifetimefail.png');return false">screen</a> ).
      </div>
      <div class="tr tooltip-paragraph-last-fold">It is very important to understand, that by default browser is created automatically and you don't need to call 'Open Browser' action, unless to want to control browser lifetime.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="getstatus">
    <div class="container-fluid getstatus">
      <%= _.template($('#filter').html())({id:"urlFilters", name:tr("Filters for URL"), hide: true, or_select:true, scheme: {match_select: true, types: ['Equals', 'Starts', 'Ends', 'Contains', 'List', 'Mask', 'Regexp']}, help: {description: tr("URL filters allow you to define conditions for selecting the URL whose HTTP request status should be retrieved. They enable you to precisely specify which URL's response status should be returned. If no filters are set, the status of the first loaded URL matching the selected request type will be returned.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "SAVED_STATUS", help: {description: tr("Variable in which, after executing the action, the numeric HTTP status of the loaded Url request will be written, or <code>0</code> if the Url was not loaded."), examples: [{code:200,description:tr("The request has succeeded.")},{code:302,description:tr("The target page resides under different url.")},{code:404,description:tr("Page not found")},{code:0,description:tr("The Url has not yet been loaded or is currently being loaded")}]}}) %>
      <div style="display:none">
        <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Match"), default_selector: "string", disable_int:true}) %>
      </div>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get request status for the URL matching the specified filters.</div>
      <div class="tr tooltip-paragraph-fold">This action will return the numeric HTTP request status for the loaded URL that matches the specified filters, or <code>0</code> if the URL has not yet been loaded or is currently being loaded.</div>
      <div class="tr tooltip-paragraph-fold">You can compare the status using the "<a href="#!/if">If</a>" action. For example, by using the expression <code>[[SAVED_STATUS]] == 200</code>, you can check whether the request was successful.</div>
      <div class="tr tooltip-paragraph-fold">If no filters are specified, the action will return the status of the first loaded URL.</div>
      <div class="tr tooltip-paragraph-fold">This action does not require allow cache as it uses a separate list of loaded URLs. URLs are added to this list after the corresponding request is completed.</div>
      <div class="tr tooltip-paragraph-fold">The list of loaded URLs can be cleared using the "<a href="#!/cleardata">Clear Cached Data</a>" action.</div>
      <div class="tr tooltip-paragraph-last-fold">List of all <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://httpstatuses.com/');return false">HTTP statuses</a>.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="isloaded">
    <div class="container-fluid isloaded">
      <%= _.template($('#filter').html())({id:"urlFilters", name:tr("Filters for URL"), hide: true, or_select:true, scheme: {match_select: true, types: ['Equals', 'Starts', 'Ends', 'Contains', 'List', 'Mask', 'Regexp']}, help: {description: tr("URL filters allow you to define conditions to determine whether a specific URL has finished loading. They enable you to precisely specify which URL should be checked for complete loading. If no filters are set, the check will be performed on any loaded URL.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "SAVED_IS_LOADED", help: {description: tr("Variable in which, after executing the action, the value <code>1</code> or <code>0</code> will be written, depending on whether the Url was loaded or not."), examples: [{"code":1,description:tr("The Url is fully loaded")},{"code":0,description:tr("The Url has not yet been loaded or is currently being loaded")}]}}) %>
      <div style="display:none">
        <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Match"), default_selector: "string", disable_int:true}) %>
      </div>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Check if a URL matching the specified filters has been loaded.</div>
      <div class="tr tooltip-paragraph-fold">This action returns <code>1</code> if the URL matching the specified filters has been fully loaded, and <code>0</code> if it is not yet loaded or is currently being loaded. This result may be used with "<a href="#!/if">If</a>" action.</div>
      <div class="tr tooltip-paragraph-fold">If no filters are specified, the action will check if at least one URL has been loaded.</div>
      <div class="tr tooltip-paragraph-fold">This action does not require allow cache as it uses a separate list of loaded URLs. URLs are added to this list after the corresponding request is completed.</div>
      <div class="tr tooltip-paragraph-fold">The list of loaded URLs can be cleared using the "<a href="#!/cleardata">Clear Cached Data</a>" action.</div>
      <div class="tr tooltip-paragraph-last-fold">To wait for a URL to load, use the "<a href="#!/waitload">Wait Url Loaded</a>" action from the "<b>Waiters</b>" module.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>
  
  <script type="text/template" id="getfromcache">
    <div class="container-fluid getfromcache">
      <%= _.template($('#filter').html())({id:"urlFilters", name:tr("Filters for URL"), hide: true, or_select:true, scheme: {match_select: true, types: ['Equals', 'Starts', 'Ends', 'Contains', 'List', 'Mask', 'Regexp']}, help: {description: tr("URL filters allow you to define conditions for selecting a specific cached request based on its address. They enable you to precisely specify which URL's latest cached response should be retrieved. If no filters are set, the latest cache item for any URL matching the selected request type will be returned.")}}) %>
      <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), description: tr("")}) %>
        <%= _.template($('#input_constructor').html())({id:"methods", description:tr("Request type"), default_selector:"string", disable_int: true, variants: [{value:"ALL", description:tr("Get cache item with any HTTP request type")},"GET","HEAD","POST","PUT","DELETE","CONNECT","OPTIONS","TRACE","PATCH"], value_string: "ALL", help: {description: tr("The type of HTTP request for which to get a cache item. You can specify multiple types as a list or a comma-separated string, or use the string \"<b>ALL</b>\" to get a cache item of any type."), examples:[{code:"POST"},{code:"PUT"},{code:"PUT, POST"},{code:"ALL",description:tr("Get cache item with any HTTP request type")}]}}) %>
        <%= _.template($('#checkbox').html())({id:"waitItem", checked: true, title: tr("Wait for cache item"), help: {title: tr("Wait for cache item"), description: tr("If activated and the required cache item is missing, the action will wait for it to appear."), examples: [{code: tr("Activated"), description: tr("Wait for the item if it's absent")}, {code: tr("Deactivated"), description: tr("Return an empty string if the item is absent")}]}}) %>
      <%= _.template($('#block_end').html())() %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "SAVED_CACHE", help: {description: tr("Variable in which, after the successful execution of the action, the retrieved data will be written.")}}) %>
      <%= _.template($('#checkbox').html())({id:"Check", title: tr("Encode in base64"), help: {title: tr("Encode in base64"), description: tr("If activated, then the retrieved data will not be decoded and will be stored in base64 string format. This is necessary for proper handling of binary files (e.g., audio, images, or video) that are not intended for text interpretation."), examples: [{code: tr("Activated"), description: tr("Save the retrieved data as a base64 string")}, {code: tr("Deactivated"), description: tr("Decode the retrieved data and save as a UTF-8 string")}]}}) %>
      <div style="display:none">
        <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Match"), default_selector: "string", disable_int:true}) %>
      </div>

    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get the latest cache item for a URL that matches the specified filters.</div>
      <div class="tr tooltip-paragraph-fold">This action won't work by itself. In order to obtain cache items, you need to use "<a href="#!/cachemaskallow">Allow cache</a>" action first, it will specify pages, that will be cached. Then you need to load page, or do actions in browser, which will trigger page load, like inputting text or clicking mouse. Only after executing "<a href="#!/cachemaskallow">Allow cache</a>" and page is loaded, you can use this action to obtain cache values.</div>
      <div class="tr tooltip-paragraph-fold">Try not to allow caching of all requests in the "<a href="#!/cachemaskallow">Allow cache</a>" action. Instead, specify the most detailed filters possible to reduce the amount of cached data. Adding item to cache is resource consuming task, by limiting number of cache items you can optimize your script.</div>
      <div class="tr tooltip-paragraph-fold">This action retrieves the last cache item that matches the specified filters and selected request type, and stores the request response data in the specified variable.</div>
      <div class="tr tooltip-paragraph-fold">For proper handling of binary data, activate the "<b>Encode in base64</b>" parameter. In this case, the data will be stored as a base64 string.</div>
      <div class="tr tooltip-paragraph-fold">You can save the resulting base64 string to a file using the "<a href="#!/filesystem_writefile">Write File</a>" action from the "<b>Filesystem</b>" module by activating the corresponding parameter there.</div>
      <div class="tr tooltip-paragraph-fold">If the retrieved data is an image, you can use this base64 string in the "<a href="#!/solvecaptcha">Solve Captcha</a>" action or in the "<b>Image processing</b>" module.</div>
      <div class="tr tooltip-paragraph-fold">By default, if the required item is not in the cache, the action will wait for it to appear. You can disable this behavior by deactivating the corresponding parameter in the additional settings.</div>
      <div class="tr tooltip-paragraph-fold">You can change the maximum waiting time by clicking the hourglass icon next to the "<b>Cancel</b>" button.</div>
      <div class="tr tooltip-paragraph-fold">If waiting is enabled but the item does not appear within the specified time, the action will end with an error, which can be handled using the "<a href="#!/ignoreerrors">Ignore Errors</a>" action.</div>
      <div class="tr tooltip-paragraph-fold">If waiting is disabled and the required item is not found, the action will return an empty string.</div>
      <div class="tr tooltip-paragraph-last-fold">By using the "<a href="#!/getallcache">Get all items from cache</a>" action, you can retrieve a list of all cache items. This list will include the complete request data, not just the response data.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", use_timeout: true, visible:true}) %>
  </script>

  <script type="text/template" id="getallcache">
    <div class="container-fluid getallcache">
      <%= _.template($('#filter').html())({id:"urlFilters", name:tr("Filters for URL"), hide: true, or_select:true, scheme: {match_select: true, types: ['Equals', 'Starts', 'Ends', 'Contains', 'List', 'Mask', 'Regexp']}, help: {description: tr("URL filters allow you to define conditions for selecting cached requests based on their address. These filters provide flexibility in retrieving cache entries by enabling you to specify exactly which URLs should have their cached data retrieved. If no filters are set, all cache items matching the selected request type will be retrieved.")}}) %>
      <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), description: tr("")}) %>
        <%= _.template($('#input_constructor').html())({id:"methods", description:tr("Request type"), default_selector:"string", disable_int: true, variants: [{value:"ALL", description:tr("Get cache items with any types of HTTP requests")},"GET","HEAD","POST","PUT","DELETE","CONNECT","OPTIONS","TRACE","PATCH"], value_string: "ALL", help: {description: tr("The type of HTTP request for which to get a cache items. You can specify multiple types as a list or a comma-separated string, or use the string \"<b>ALL</b>\" to get cache items of any type."), examples:[{code:"POST"},{code:"PUT"},{code:"PUT, POST"},{code:"ALL",description:tr("Get cache items with any types of HTTP requests")}]}}) %>
      <%= _.template($('#block_end').html())() %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "CACHE_LIST", help: {description: tr("This variable will contain list of cache items. Each cache item is object with information about request and response headers, received data, status, etc.")}}) %>
      <div style="display:none">
        <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Match"), default_selector: "string", value_string: "*", disable_int:true, help: {description: tr("An url, cache for which you want to obtain. Url can contain * symbol, which will be replaced by any symbol sequence."), examples:[{code:"*",description:tr("Get all cache")},{code:"*url/part*",description:tr("Get cache for urls, which contain url/part")},{code:"http://site.com/script.js",description:tr("Get cache for specific url")}]}}) %>
      </div>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get all cache items for a URL that matches the specified filters.</div>
      <div class="tr tooltip-paragraph-fold">This action won't work by itself. In order to obtain cache items, you need to use "<a href="#!/cachemaskallow">Allow cache</a>" action first, it will specify pages, that will be cached. Then you need to load page, or do actions in browser, which will trigger page load, like inputting text or clicking mouse. Only after executing "<a href="#!/cachemaskallow">Allow cache</a>" and page is loaded, you can use this action to obtain cache values.</div>
      <div class="tr tooltip-paragraph-fold">Try not to allow caching of all requests in the "<a href="#!/cachemaskallow">Allow cache</a>" action. Instead, specify the most detailed filters possible to reduce the amount of cached data. Adding item to cache is resource consuming task, by limiting number of cache items you can optimize your script.</div>
      <div class="tr tooltip-paragraph-fold">This action retrieves all cache items that match the specified filters and the selected request type, and saves their list in the specified variable.</div>
      <div class="tr tooltip-paragraph-fold">The resulting list can be processed using actions from the "<b>List</b>" module.</div>
      <div class="tr tooltip-paragraph-fold">If you only need to retrieve the response data of the last cache item, use the "<a href="#!/getfromcache">Get last item from cache</a>" action.</div>
      <div class="tr tooltip-paragraph-fold">Each cache item is an object with following properties:</div>
      <div class="tr tooltip-paragraph-fold"><b>status</b> - integer, contains HTTP request status.</div>
      <div class="tr tooltip-paragraph-fold"><b>request_headers</b> - list with request headers sent by browser.</div>
      <div class="tr tooltip-paragraph-fold"><b>response_headers</b> - list with response headers received from server.</div>
      <div class="tr tooltip-paragraph-fold"><b>body</b> - response body encoded with base64 encoding. Use "<a href="#!/base64">Base64 encode/decode</a>" to decode it.</div>
      <div class="tr tooltip-paragraph-fold"><b>url</b> - request url.</div>
      <div class="tr tooltip-paragraph-fold"><b>method</b> - request type.</div>
      <div class="tr tooltip-paragraph-fold"><b>post_data</b> - request post data encoded with base64.</div>
      <div class="tr tooltip-paragraph-fold"><b>is_error</b> - boolean value, indicates if there were error during request.</div>
      <div class="tr tooltip-paragraph-fold"><b>error</b> - error code as string.</div>
      <div class="tr tooltip-paragraph-fold"><b>is_finished</b> - boolean value, indicates, if request was finished.</div>
      <div class="tr tooltip-paragraph-last-fold">To retrieve the values you need from a cache item, use the actions from the "<b>JSON</b>" module.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="redirectrequests">
    <div class="container-fluid">
      <%= _.template($('#filter').html())({id:"urlFilters", name:tr("Filters for URL"), hide: true, or_select:true, scheme: {match_select: true, types: ['Equals', 'Starts', 'Ends', 'Contains', 'List', 'Mask', 'Regexp']}, help: {description: tr("URL filters allow you to set conditions for determining to which requests the URL replacement will be applied. These filters provide flexibility in processing requests, enabling you to specify exactly for which URLs the replacement will be performed based on the specified conditions.") + " " + tr("If no filters are set, the replacement will be applied to all requests that match the selected type.")}}) %>

      <%= _.template($('#block_start').html())({id: "replaceMode_block", name: tr("Replace mode"), description: tr("")}) %>

        <span id="replaceExact_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Replaces an exact match of the specified value with the new value.")}) %>
        </span>

        <span id="replaceRegexp_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Replaces URL content based on the specified regular expression.")}) %>
        </span>

        <span id="replaceAll_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Completely replaces the request URL with the new value.")}) %>
        </span>

        <span id="insertBefore_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Inserts the new value before the specified value if found.")}) %>
        </span>

        <span id="insertAfter_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Inserts the new value after the specified value if found.")}) %>
        </span>

        <span id="replaceBetween_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Replaces the content between two specified values if both are found.")}) %>
        </span>

        <%= _.template($('#combobox').html())({
          id: "replaceMode",
          items: [
            { value: "exact", name: tr("Replace exact value"), title: tr("If selected, an exact match of the specified value will be searched for, and if found, it will be replaced with the new value.") },
            { value: "regexp", name: tr("Replace with regex"), title: tr("If selected, the replacement will be performed based on the specified regular expression.") },
            { value: "all", selected: true, name: tr("Replace completely"), title: tr("If selected, the entire request URL will be completely replaced with the new value.") },
            { value: "before", name: tr("Insert before"), title: tr("If selected, an exact match with the specified value will be searched for, and if found, the new value will be inserted before it.") },
            { value: "after", name: tr("Insert after"), title: tr("If selected, an exact match with the specified value will be searched for, and if found, the new value will be inserted after it.") },
            { value: "between", name: tr("Replace between"), title: tr("If selected, an exact match of the two specified values will be searched for. If both values are found, the content between them will be replaced with the new value.") }
          ],
          help: {
            title: tr("Replace mode"),
            description: tr("Defines the method of replacing the URL in the browser request."),
            examples: [
              { code: tr("Replace exact value"), description: tr("If selected, an exact match of the specified value will be searched for, and if found, it will be replaced with the new value.") },
              { code: tr("Replace with regex"), description: tr("If selected, the replacement will be performed based on the specified regular expression.") },
              { code: tr("Replace completely"), description: tr("If selected, the entire request URL will be completely replaced with the new value.") },
              { code: tr("Insert before"), description: tr("If selected, an exact match with the specified value will be searched for, and if found, the new value will be inserted before it.") },
              { code: tr("Insert after"), description: tr("If selected, an exact match with the specified value will be searched for, and if found, the new value will be inserted after it.") },
              { code: tr("Replace between"), description: tr("If selected, an exact match of the two specified values will be searched for. If both values are found, the content between them will be replaced with the new value.") }
            ]
          }
        }) %>

      <%= _.template($('#block_end').html())() %>

      <span id="replaceExact">
        <%= _.template($('#input_constructor').html())({id:"exact", description:tr("Exact value"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The exact value that needs to be replaced."), examples: [{"code":"https://example.com/login"},{"code":"/api/v1/orders/12345"},{"code":"?status=pending&user_id=789"},{"code":"/shop/product?id=567"}]}}) %>
        <%= _.template($('#checkbox').html())({id:"replaceAllExact", title: tr("Replace all matches"), help: {title: tr("Replace all matches"), description: tr("If activated, all occurrences of the exact value will be replaced."), examples: [{code: tr("Activated"), description: tr("Replace all occurrences of the exact value")}, {code: tr("Deactivated"), description: tr("Replace only the first occurrence of the exact value")}]}}) %>
      </span>

      <span id="replaceRegexp">
        <%= _.template($('#input_constructor').html())({id:"regexp", description:tr("Regular expression"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The regular expression that will be used for replacement. It supports both regular and named groups, allowing for flexible pattern matching in complex operations."), examples: [{"code":"https?:\\\\/\\\\/example\\.com\\\\/login"},{"code":"\\\\/api\\\\/v1\\\\/users\\\\/\\d+"},{"code":"\\\\/products\\\\/(\\d+)\\\\/details"},{"code":"\\\\/users\\\\/(?&lt;userId&gt;\\d+)\\\\/orders\\\\/(?&lt;orderId&gt;\\d+)"}]}}) %>
        <%= _.template($('#block_start').html())({id: "RegexpFlags", name: tr("Regex flags"), description: tr("")}) %>
          <%= _.template($('#input_constructor').html())({id:"ignoreСase", description:tr("Ignore case"), default_selector:"string", disable_int:true, value_string:"disable", variants:[{value:"enable", description:tr("Ignore case sensitivity during the replacement")}, {value:"disable", description:tr("Consider case sensitivity during the replacement")}], help: {description: tr("If \"<b>enable</b>\" is selected, the regular expression will ignore case sensitivity during the replacement."), examples: [{code: "enable", description: tr("Ignore case sensitivity during the replacement")}, {code: "disable", description: tr("Consider case sensitivity during the replacement")}]}}) %>
          <%= _.template($('#input_constructor').html())({id:"globalSearch", description:tr("Global search"), default_selector:"string", disable_int:true, value_string:"disable", variants:[{value:"enable", description:tr("Replace all matching occurrences")}, {value:"disable", description:tr("Replace only the first matching occurrence")}], help: {description: tr("If \"<b>enable</b>\" is selected, the regular expression will replace all matching occurrences."), examples: [{code: "enable", description: tr("Replace all matching occurrences")}, {code: "disable", description: tr("Replace only the first matching occurrence")}]}}) %>
        <%= _.template($('#block_end').html())() %>
      </span>

      <span id="insertBefore">
        <%= _.template($('#input_constructor').html())({id:"before", description:tr("Value"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The value before which the new value needs to be inserted."), examples: [{"code":"?user_id="},{"code":"/products/"},{"code":"&category="}]}}) %>
      </span>

      <span id="insertAfter">
        <%= _.template($('#input_constructor').html())({id:"after", description:tr("Value"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The value after which the new value needs to be inserted."), examples: [{"code":"/details"},{"code":"&page="},{"code":"?session_id="}]}}) %>
      </span>

      <span id="replaceBetween">
        <%= _.template($('#input_constructor').html())({id:"leftValue", description:tr("Left value"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The value located before the content that needs to be replaced."), examples: [{"code":"/start/"},{"code":"?page="},{"code":"&token="},{"code":"?from="}]}}) %>
        <%= _.template($('#input_constructor').html())({id:"rightValue", description:tr("Right value"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The value positioned after the content that needs to be replaced."), examples: [{"code":"/end/"},{"code":"&sort="},{"code":"&user="},{"code":"&to="}]}}) %>
      </span>

      <%= _.template($('#input_constructor').html())({id:"newValue", description:tr("Replace to"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The new value that will be used for the replacement. If the replacement is done using a regular expression, both regular and named groups from the specified regular expression can be used in this value."), examples: [{"code":"https://new-example.com/home"},{"code":"/api/v2/users/$&"},{"code":"/new-products/$1/info"},{"code":"/clients/${userId}/purchases/${orderId}/summary"}]}}) %>

      <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), description: tr("")}) %>
        <%= _.template($('#input_constructor').html())({id:"methods", description:tr("Request type"), default_selector:"string", disable_int: true, variants: [{value:"ALL", description:tr("Applies the replacement to all types of HTTP requests")},"GET","HEAD","POST","PUT","DELETE","CONNECT","OPTIONS","TRACE","PATCH"], value_string: "ALL", help: {description: tr("The type of HTTP request to which the replacement should be applied. You can specify multiple types as a list or a comma-separated string, or use the string \"<b>ALL</b>\" to apply the replacement to all request types."), examples:[{code:"GET"},{code:"POST"},{code:"PUT"},{code:"PUT, POST"},{code:"ALL",description:tr("Applies the replacement to all types of HTTP requests")}]}}) %>
        <%= _.template($('#input_constructor').html())({id:"limit", description:tr("Number of actuations"), default_selector:"int", disable_string:true, value_number:0, min_number:0, help: {description: tr("The maximum number of requests for which the replacement will be applied.") + " " + tr("If not specified or set to zero, there will be no limit."), examples: [{code:2},{code:5},{code:0,description:tr("Don't limit the number of actuations")},{code:tr("Empty value"),description:tr("Don't limit the number of actuations")}]}}) %>
      <%= _.template($('#block_end').html())() %>

      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Replacement ID"), default_variable: "REPLACEMENT_ID_REQUEST_REDIRECT", help: {description: tr("Variable in which, after successful execution of the action, the ID of the created replacement function will be written. Using this ID, you can stop the function or get its statistics."), examples:[{code:"REQREDIR_1524510148"},{code:"REQREDIR_421979050"},{code:"REQREDIR_353397414"}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Replace the browser request URL with another URL.</div>
      <div class="tr tooltip-paragraph-fold">This action creates a replacement function that will partially or fully replace the URL of browser requests that match the specified filters and request type, using the provided replacement parameters.</div>
      <div class="tr tooltip-paragraph-fold">If no filters are specified, the function will be applied to all requests matching the selected type.</div>
      <div class="tr tooltip-paragraph-fold">The function can be stopped using the replacement ID obtained as a result of executing this action in the "<a href="#!/disablerules">Stop replacement</a>" action.</div>
      <div class="tr tooltip-paragraph-fold">This replacement ID can also be used in the "<a href="#!/getrulestats">Get replacement stats</a>" action to retrieve the function's execution statistics.</div>
      <div class="tr tooltip-paragraph-fold">In additional settings, you can set a limit on the number of function executions.</div>
      <div class="tr tooltip-paragraph-last-fold">This function modifies the request URL before it is sent, ensuring that the change is invisible on the page—meaning the original URL will remain in the address bar and cache.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
    <script>
      		$(document).ready(function(){
            setTimeout(function(){
              let changeReplaceMode = function(e){
                let replaceMode = $('#replaceMode').val();
                $('#replaceExact, #replaceExact_info').toggle(replaceMode == "exact");
                $('#replaceRegexp, #replaceRegexp_info').toggle(replaceMode == "regexp");
                $('#replaceAll_info').toggle(replaceMode == "all");
                $('#insertBefore, #insertBefore_info').toggle(replaceMode == "before");
                $('#insertAfter, #insertAfter_info').toggle(replaceMode == "after");
                $('#replaceBetween, #replaceBetween_info').toggle(replaceMode == "between");
              };
              
              $('#replaceMode').on('change', changeReplaceMode);
              
              changeReplaceMode();
            }, 0);
          });
    </script>
  </script>

  <script type="text/template" id="replacerequestcontent">
    <div class="container-fluid">
      <%= _.template($('#filter').html())({id:"urlFilters", name:tr("Filters for URL"), hide: true, or_select:true, scheme: {match_select: true, types: ['Equals', 'Starts', 'Ends', 'Contains', 'List', 'Mask', 'Regexp']}, help: {description: tr("URL filters allow you to set conditions for determining to which requests the content replacement will be applied. These filters provide flexibility in processing requests, enabling you to specify exactly for which URLs the content replacement will be performed based on the specified conditions.") + " " + tr("If no filters are set, the replacement will be applied to all requests that match the selected type.")}}) %>

      <%= _.template($('#filter').html())({id:"contentFilters", name:tr("Filters for content"), hide: true, or_select:true, scheme: {match_select: true, types: ['Equals', 'Starts', 'Ends', 'Contains', 'List', 'Mask', 'Regexp']}, help: {description: tr("Request content filters allow you to set conditions for determining to which requests the content modification will be applied. These filters provide flexibility in processing requests, enabling you to specify exactly which requests will be modified based on the specified conditions.") + " " + tr("If no filters are set, the replacement will be applied to all requests that match the selected type.")}}) %>

      <%= _.template($('#block_start').html())({id: "replaceMode_block", name: tr("Replace mode"), description: tr("")}) %>

        <span id="replaceExact_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Replaces an exact match of the specified value with the new value.")}) %></span>

        <span id="replaceRegexp_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Replaces content based on the specified regular expression.")}) %></span>

        <span id="replaceAll_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Completely replaces the content of the request with the new value.")}) %>
        </span>

        <span id="insertBefore_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Inserts the new value before the specified value if found.")}) %></span>

        <span id="insertAfter_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Inserts the new value after the specified value if found.")}) %></span>

        <span id="replaceBetween_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Replaces the content between two specified values if both are found.")}) %></span>

        <%= _.template($('#combobox').html())({
          id: "replaceMode",
          items: [
            { value: "exact", name: tr("Replace exact value"), title: tr("If selected, an exact match of the specified value will be searched for, and if found, it will be replaced with the new value.") },
            { value: "regexp", name: tr("Replace with regex"), title: tr("If selected, the replacement will be performed based on the specified regular expression.") },
            { value: "all", selected: true, name: tr("Replace completely"), title: tr("If selected, the entire content of the request will be completely replaced with the new value.") },
            { value: "before", name: tr("Insert before"), title: tr("If selected, an exact match with the specified value will be searched for, and if found, the new value will be inserted before it.") },
            { value: "after", name: tr("Insert after"), title: tr("If selected, an exact match with the specified value will be searched for, and if found, the new value will be inserted after it.") },
            { value: "between", name: tr("Replace between"), title: tr("If selected, an exact match of the two specified values will be searched for. If both values are found, the content between them will be replaced with the new value.") }
          ],
          help: {
            title: tr("Replace mode"),
            description: tr("Defines the method of replacing the content in the request body."),
            examples: [
              { code: tr("Replace exact value"), description: tr("If selected, an exact match of the specified value will be searched for, and if found, it will be replaced with the new value.") },
              { code: tr("Replace with regex"), description: tr("If selected, the replacement will be performed based on the specified regular expression.") },
              { code: tr("Replace completely"), description: tr("If selected, the entire content of the request will be completely replaced with the new value.") },
              { code: tr("Insert before"), description: tr("If selected, an exact match with the specified value will be searched for, and if found, the new value will be inserted before it.") },
              { code: tr("Insert after"), description: tr("If selected, an exact match with the specified value will be searched for, and if found, the new value will be inserted after it.") },
              { code: tr("Replace between"), description: tr("If selected, an exact match of the two specified values will be searched for. If both values are found, the content between them will be replaced with the new value.") }
            ]
          }
        }) %>

      <%= _.template($('#block_end').html())() %>

      <span id="replaceExact">
        <%= _.template($('#input_constructor').html())({id:"exact", description:tr("Exact value"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The exact value that needs to be replaced."), examples: [{"code":"{\"username\":\"guest\"}"},{"code":"order_status=processing"},{"code":"\"session_token\":\"abcdef12345\""},{"code":"shipping_address=123_Main_St"}]}}) %>
        <%= _.template($('#checkbox').html())({id:"replaceAllExact", title: tr("Replace all matches"), help: {title: tr("Replace all matches"), description: tr("If activated, all occurrences of the exact value will be replaced."), examples: [{code: tr("Activated"), description: tr("Replace all occurrences of the exact value")}, {code: tr("Deactivated"), description: tr("Replace only the first occurrence of the exact value")}]}}) %>
      </span>

      <span id="replaceRegexp">
        <%= _.template($('#input_constructor').html())({id:"regexp", description:tr("Regular expression"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The regular expression that will be used for replacement. It supports both regular and named groups, allowing for flexible pattern matching in complex operations."), examples: [{"code":"\"username\":\"john_doe\""},{"code":"\"order_id\":\\d+"},{"code":"\"quantity\":\"(\\d+)\""},{"code":"\"price\":\"(?&lt;price&gt;\\d+\\.\\d{2})\""}]}}) %>
        <%= _.template($('#block_start').html())({id: "RegexpFlags", name: tr("Regex flags"), description: tr("")}) %>
          <%= _.template($('#input_constructor').html())({id:"ignoreСase", description:tr("Ignore case"), default_selector:"string", disable_int:true, value_string:"disable", variants:[{value:"enable", description:tr("Ignore case sensitivity during the replacement")}, {value:"disable", description:tr("Consider case sensitivity during the replacement")}], help: {description: tr("If \"<b>enable</b>\" is selected, the regular expression will ignore case sensitivity during the replacement."), examples: [{code: "enable", description: tr("Ignore case sensitivity during the replacement")}, {code: "disable", description: tr("Consider case sensitivity during the replacement")}]}}) %>
          <%= _.template($('#input_constructor').html())({id:"globalSearch", description:tr("Global search"), default_selector:"string", disable_int:true, value_string:"disable", variants:[{value:"enable", description:tr("Replace all matching occurrences")}, {value:"disable", description:tr("Replace only the first matching occurrence")}], help: {description: tr("If \"<b>enable</b>\" is selected, the regular expression will replace all matching occurrences."), examples: [{code: "enable", description: tr("Replace all matching occurrences")}, {code: "disable", description: tr("Replace only the first matching occurrence")}]}}) %>
          <%= _.template($('#input_constructor').html())({id:"multiline", description:tr("Multiline mode"), default_selector:"string", disable_int:true, value_string:"disable", variants:[{value:"enable", description:tr("Enable multiline mode for regular expression")}, {value:"disable", description:tr("Disable multiline mode for regular expression")}], help: {description: tr("If \"<b>enable</b>\" is selected, the regular expression will treat the content as multiple lines, allowing the start (^) and end ($) anchors to match the start and end of each line, rather than the entire content."), examples: [{code: "enable", description: tr("Enable multiline mode for regular expression")}, {code: "disable", description: tr("Disable multiline mode for regular expression")}]}}) %>
        <%= _.template($('#block_end').html())() %>
      </span>

      <span id="insertBefore">
        <%= _.template($('#input_constructor').html())({id:"before", description:tr("Value"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The value before which the new value needs to be inserted."), examples: [{"code":"user_id="},{"code":"\"order\":\u007b\"id\":"},{"code":"data=\u007b"}]}}) %>
      </span>

      <span id="insertAfter">
        <%= _.template($('#input_constructor').html())({id:"after", description:tr("Value"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The value after which the new value needs to be inserted."), examples: [{"code":"&order_id="},{"code":",\"timestamp\":"},{"code":"&confirmation="}]}}) %>
      </span>

      <span id="replaceBetween">
        <%= _.template($('#input_constructor').html())({id:"leftValue", description:tr("Left value"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The value located before the content that needs to be replaced."), examples: [{"code":"\"start_time\":\""},{"code":"user_id="},{"code":"\"action\":\""},{"code":"\"session_token\":\""}]}}) %>
        <%= _.template($('#input_constructor').html())({id:"rightValue", description:tr("Right value"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The value positioned after the content that needs to be replaced."), examples: [{"code":"\",\"end_time\":\""},{"code":"&session_token="},{"code":"\",\"data\":\""},{"code":"\",\"expires\""}]}}) %>
      </span>

      <%= _.template($('#input_constructor').html())({id:"newValue", description:tr("Replace to"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The new value that will be used for the replacement. If the replacement is done using a regular expression, both regular and named groups from the specified regular expression can be used in this value."), examples: [{"code":"\"username\":\"jane_doe\""},{"code":"\"order_id\":54321"},{"code":"\"quantity\":\"$1\""},{"code":"\"price\":\"${price}\",\"discount\":\"10%\""}]}}) %>

      <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), description: tr("")}) %>
        <%= _.template($('#input_constructor').html())({id:"methods", description:tr("Request type"), default_selector:"string", disable_int: true, variants: [{value:"ALL", description:tr("Applies the replacement to all types of HTTP requests")},"GET","HEAD","POST","PUT","DELETE","CONNECT","OPTIONS","TRACE","PATCH"], value_string: "ALL", help: {description: tr("The type of HTTP request to which the replacement should be applied. You can specify multiple types as a list or a comma-separated string, or use the string \"<b>ALL</b>\" to apply the replacement to all request types."), examples:[{code:"POST"},{code:"PUT"},{code:"PUT, POST"},{code:"ALL",description:tr("Applies the replacement to all types of HTTP requests")}]}}) %>
        <%= _.template($('#input_constructor').html())({id:"limit", description:tr("Number of actuations"), default_selector:"int", disable_string:true, value_number:0, min_number:0, help: {description: tr("The maximum number of requests for which the replacement will be applied.") + " " + tr("If not specified or set to zero, there will be no limit."), examples: [{code:2},{code:5},{code:0,description:tr("Don't limit the number of actuations")},{code:tr("Empty value"),description:tr("Don't limit the number of actuations")}]}}) %>
      <%= _.template($('#block_end').html())() %>

      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Replacement ID"), default_variable: "REPLACEMENT_ID_REQUEST_MODIFY", help: {description: tr("Variable in which, after successful execution of the action, the ID of the created replacement function will be written. Using this ID, you can stop the function or get its statistics."), examples:[{code:"REQMOD_1161135056"},{code:"REQMOD_1515773787"},{code:"REQMOD_976271484"}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Replace the contents of the browser request.</div>
      <div class="tr tooltip-paragraph-fold">This action creates a replacement function that will partially or fully replace the content of browser requests that match the specified filters and request type, using the provided replacement parameters.</div>
      <div class="tr tooltip-paragraph-fold">If no filters are specified, the function will be applied to all requests matching the selected type.</div>
      <div class="tr tooltip-paragraph-fold">This function also updates the "<b>content-length</b>" header when modifying the content to ensure it matches the new data.</div>
      <div class="tr tooltip-paragraph-fold">The function can be stopped using the replacement ID obtained as a result of executing this action in the "<a href="#!/disablerules">Stop replacement</a>" action.</div>
      <div class="tr tooltip-paragraph-fold">This replacement ID can also be used in the "<a href="#!/getrulestats">Get replacement stats</a>" action to retrieve the function's execution statistics.</div>
      <div class="tr tooltip-paragraph-fold">In additional settings, you can set a limit on the number of function executions.</div>
      <div class="tr tooltip-paragraph-last-fold">This function modifies the content of the request before it is sent, while the original value remains in the cache.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
    <script>
      		$(document).ready(function(){
            setTimeout(function(){
              let changeReplaceMode = function(e){
                let replaceMode = $('#replaceMode').val();
                $('#replaceExact, #replaceExact_info').toggle(replaceMode == "exact");
                $('#replaceRegexp, #replaceRegexp_info').toggle(replaceMode == "regexp");
                $('#replaceAll_info').toggle(replaceMode == "all");
                $('#insertBefore, #insertBefore_info').toggle(replaceMode == "before");
                $('#insertAfter, #insertAfter_info').toggle(replaceMode == "after");
                $('#replaceBetween, #replaceBetween_info').toggle(replaceMode == "between");
              };
              
              $('#replaceMode').on('change', changeReplaceMode);
              
              changeReplaceMode();
            }, 0);
          });
    </script>
  </script>

  <script type="text/template" id="replaceresponsecontent">
    <div class="container-fluid">
      <%= _.template($('#filter').html())({id:"urlFilters", name:tr("Filters for URL"), hide: true, or_select:true, scheme: {match_select: true, types: ['Equals', 'Starts', 'Ends', 'Contains', 'List', 'Mask', 'Regexp']}, help: {description: tr("URL filters allow you to set conditions for determining to which requests the content replacement in the server response will be applied. These filters provide flexibility in processing requests, enabling you to specify exactly for which URLs the content replacement in the server response will be performed based on the specified conditions.") + " " + tr("If no filters are set, the replacement will be applied to all requests that match the selected type.")}}) %>

      <%= _.template($('#filter').html())({id:"contentFilters", name:tr("Filters for content"), hide: true, or_select:true, scheme: {match_select: true, types: ['Equals', 'Starts', 'Ends', 'Contains', 'List', 'Mask', 'Regexp']}, help: {description: tr("Content filters allow you to define conditions for determining to which server responses the content replacement will be applied. These filters provide flexibility in processing requests, enabling you to specify exactly which server responses will have their content replaced based on the specified conditions.") + " " + tr("If no filters are set, the replacement will be applied to all requests that match the selected type.")}}) %>

      <%= _.template($('#block_start').html())({id: "replaceMode_block", name: tr("Replace mode"), description: tr("")}) %>

        <span id="replaceExact_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Replaces an exact match of the specified value with the new value.")}) %>
        </span>

        <span id="replaceRegexp_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Replaces content based on the specified regular expression.")}) %>
        </span>

        <span id="replaceAll_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Completely replaces the content of the server response with the new value.")}) %>
        </span>

        <span id="insertBefore_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Inserts the new value before the specified value if found.")}) %>
        </span>

        <span id="insertAfter_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Inserts the new value after the specified value if found.")}) %>
        </span>

        <span id="replaceBetween_info">
          <%= _.template($('#info').html())({color:"gray", description:tr("Replaces the content between two specified values if both are found.")}) %>
        </span>

        <%= _.template($('#combobox').html())({
          id: "replaceMode",
          items: [
            { value: "exact", name: tr("Replace exact value"), title: tr("If selected, an exact match of the specified value will be searched for, and if found, it will be replaced with the new value.") },
            { value: "regexp", name: tr("Replace with regex"), title: tr("If selected, the replacement will be performed based on the specified regular expression.") },
            { value: "all", selected: true, name: tr("Replace completely"), title: tr("If selected, the entire content of the server's response to the browser request will be completely replaced with the new value.") },
            { value: "before", name: tr("Insert before"), title: tr("If selected, an exact match with the specified value will be searched for, and if found, the new value will be inserted before it.") },
            { value: "after", name: tr("Insert after"), title: tr("If selected, an exact match with the specified value will be searched for, and if found, the new value will be inserted after it.") },
            { value: "between", name: tr("Replace between"), title: tr("If selected, an exact match of the two specified values will be searched for. If both values are found, the content between them will be replaced with the new value.") }
          ],
          help: {
            title: tr("Replace mode"),
            description: tr("Defines the method of replacing content in the server response to the browser request."),
            examples: [
              { code: tr("Replace exact value"), description: tr("If selected, an exact match of the specified value will be searched for, and if found, it will be replaced with the new value.") },
              { code: tr("Replace with regex"), description: tr("If selected, the replacement will be performed based on the specified regular expression.") },
              { code: tr("Replace completely"), description: tr("If selected, the entire content of the server's response to the browser request will be completely replaced with the new value.") },
              { code: tr("Insert before"), description: tr("If selected, an exact match with the specified value will be searched for, and if found, the new value will be inserted before it.") },
              { code: tr("Insert after"), description: tr("If selected, an exact match with the specified value will be searched for, and if found, the new value will be inserted after it.") },
              { code: tr("Replace between"), description: tr("If selected, an exact match of the two specified values will be searched for. If both values are found, the content between them will be replaced with the new value.") }
            ]
          }
        }) %>

      <%= _.template($('#block_end').html())() %>

      <span id="replaceExact">
        <%= _.template($('#input_constructor').html())({id:"exact", description:tr("Exact value"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The exact value that needs to be replaced."), examples: [{"code":"username=guest"},{"code":"{\"action\":\"logout\",\"user\":\"john_doe\"}"},{"code":"session_id=abc123"},{"code":"&lt;div class=\"status\"&gt;active&lt;/div&gt;"}]}}) %>
        <%= _.template($('#checkbox').html())({id:"replaceAllExact", title: tr("Replace all matches"), help: {title: tr("Replace all matches"), description: tr("If activated, all occurrences of the exact value will be replaced."), examples: [{code: tr("Activated"), description: tr("Replace all occurrences of the exact value")}, {code: tr("Deactivated"), description: tr("Replace only the first occurrence of the exact value")}]}}) %>
      </span>

      <span id="replaceRegexp">
        <%= _.template($('#input_constructor').html())({id:"regexp", description:tr("Regular expression"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The regular expression that will be used for replacement. It supports both regular and named groups, allowing for flexible pattern matching in complex operations."), examples: [{"code":"\"status\":\"pending\""},{"code":"\"session_id\":\"[A-Za-z0-9]+\""},{"code":"total_price=(\\d+\\.\\d{2})"},{"code":"&lt;div class=\"order_id\"&gt;Order ID: (?&lt;orderId&gt;[A-Z0-9]+)&lt;/div&gt;"}]}}) %>
        <%= _.template($('#block_start').html())({id: "RegexpFlags", name: tr("Regex flags"), description: tr("")}) %>
          <%= _.template($('#input_constructor').html())({id:"ignoreСase", description:tr("Ignore case"), default_selector:"string", disable_int:true, value_string:"disable", variants:[{value:"enable", description:tr("Ignore case sensitivity during the replacement")}, {value:"disable", description:tr("Consider case sensitivity during the replacement")}], help: {description: tr("If \"<b>enable</b>\" is selected, the regular expression will ignore case sensitivity during the replacement."), examples: [{code: "enable", description: tr("Ignore case sensitivity during the replacement")}, {code: "disable", description: tr("Consider case sensitivity during the replacement")}]}}) %>
          <%= _.template($('#input_constructor').html())({id:"globalSearch", description:tr("Global search"), default_selector:"string", disable_int:true, value_string:"disable", variants:[{value:"enable", description:tr("Replace all matching occurrences")}, {value:"disable", description:tr("Replace only the first matching occurrence")}], help: {description: tr("If \"<b>enable</b>\" is selected, the regular expression will replace all matching occurrences."), examples: [{code: "enable", description: tr("Replace all matching occurrences")}, {code: "disable", description: tr("Replace only the first matching occurrence")}]}}) %>
          <%= _.template($('#input_constructor').html())({id:"multiline", description:tr("Multiline mode"), default_selector:"string", disable_int:true, value_string:"disable", variants:[{value:"enable", description:tr("Enable multiline mode for regular expression")}, {value:"disable", description:tr("Disable multiline mode for regular expression")}], help: {description: tr("If \"<b>enable</b>\" is selected, the regular expression will treat the content as multiple lines, allowing the start (^) and end ($) anchors to match the start and end of each line, rather than the entire content."), examples: [{code: "enable", description: tr("Enable multiline mode for regular expression")}, {code: "disable", description: tr("Disable multiline mode for regular expression")}]}}) %>
        <%= _.template($('#block_end').html())() %>
      </span>

      <span id="insertBefore">
        <%= _.template($('#input_constructor').html())({id:"before", description:tr("Value"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The value before which the new value needs to be inserted."), examples: [{"code":"data="},{"code":"\"session_id\":\""},{"code":"\"order\":\u007b"}]}}) %>
      </span>

      <span id="insertAfter">
        <%= _.template($('#input_constructor').html())({id:"after", description:tr("Value"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The value after which the new value needs to be inserted."), examples: [{"code":"&total="},{"code":"\"timestamp\":"},{"code":"&confirmation="}]}}) %>
      </span>

      <span id="replaceBetween">
        <%= _.template($('#input_constructor').html())({id:"leftValue", description:tr("Left value"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The value located before the content that needs to be replaced."), examples: [{"code":"\"start_time\":\""},{"code":"order_id="},{"code":"\"token\":\""},{"code":"&lt;div class=\"info\"&gt;"}]}}) %>
        <%= _.template($('#input_constructor').html())({id:"rightValue", description:tr("Right value"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The value positioned after the content that needs to be replaced."), examples: [{"code":"\",\"end_time\":\""},{"code":"&status="},{"code":"\",\"expires\""},{"code":"&lt;/div&gt;"}]}}) %>
      </span>

      <%= _.template($('#input_constructor').html())({id:"newValue", description:tr("Replace to"), default_selector:"string", disable_int:true, value_string:"", help: {description: tr("The new value that will be used for the replacement. If the replacement is done using a regular expression, both regular and named groups from the specified regular expression can be used in this value."), examples: [{"code":"\"status\":\"completed\""},{"code":"\"session_id\":\"newSession12345\""},{"code":"total_price=$1"},{"code":"&lt;div class=\"order_summary\"&gt;Order ID: ${orderId}, Status: Completed&lt;/div&gt;"}]}}) %>

      <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), description: tr("")}) %>
        <%= _.template($('#input_constructor').html())({id:"methods", description:tr("Request type"), default_selector:"string", disable_int: true, variants: [{value:"ALL", description:tr("Applies the replacement to all types of HTTP requests")},"GET","HEAD","POST","PUT","DELETE","CONNECT","OPTIONS","TRACE","PATCH"], value_string: "ALL", help: {description: tr("The type of HTTP request to which the replacement should be applied. You can specify multiple types as a list or a comma-separated string, or use the string \"<b>ALL</b>\" to apply the replacement to all request types."), examples:[{code:"GET"},{code:"POST"},{code:"PUT"},{code:"PUT, POST"},{code:"ALL",description:tr("Applies the replacement to all types of HTTP requests")}]}}) %>
        <%= _.template($('#input_constructor').html())({id:"limit", description:tr("Number of actuations"), default_selector:"int", disable_string:true, value_number:0, min_number:0, help: {description: tr("The maximum number of requests for which the replacement will be applied.") + " " + tr("If not specified or set to zero, there will be no limit."), examples: [{code:2},{code:5},{code:0,description:tr("Don't limit the number of actuations")},{code:tr("Empty value"),description:tr("Don't limit the number of actuations")}]}}) %>
      <%= _.template($('#block_end').html())() %>

      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Replacement ID"), default_variable: "REPLACEMENT_ID_RESPONSE_MODIFY", help: {description: tr("Variable in which, after successful execution of the action, the ID of the created replacement function will be written. Using this ID, you can stop the function or get its statistics."), examples:[{code:"RESPMOD_611904972"},{code:"RESPMOD_2033805619"},{code:"RESPMOD_61718335"}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Replace the contents of the server response to a browser request.</div>
      <div class="tr tooltip-paragraph-fold">This action creates a replacement function that will partially or fully replace the content of server responses to browser requests that match the specified filters and request type, using the provided replacement parameters.</div>
      <div class="tr tooltip-paragraph-fold">If no filters are specified, the function will be applied to all requests matching the selected type.</div>
      <div class="tr tooltip-paragraph-fold">This function also updates the "<b>content-length</b>" header when modifying the content to ensure it matches the new data.</div>
      <div class="tr tooltip-paragraph-fold">The function can be stopped using the replacement ID obtained as a result of executing this action in the "<a href="#!/disablerules">Stop replacement</a>" action.</div>
      <div class="tr tooltip-paragraph-fold">This replacement ID can also be used in the "<a href="#!/getrulestats">Get replacement stats</a>" action to retrieve the function's execution statistics.</div>
      <div class="tr tooltip-paragraph-fold">In additional settings, you can set a limit on the number of function executions.</div>
      <div class="tr tooltip-paragraph-last-fold">This function modifies the content of the server response before it is sent to the browser, with the modified value being stored in the cache.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
    <script>
      		$(document).ready(function(){
            setTimeout(function(){
              let changeReplaceMode = function(e){
                let replaceMode = $('#replaceMode').val();
                $('#replaceExact, #replaceExact_info').toggle(replaceMode == "exact");
                $('#replaceRegexp, #replaceRegexp_info').toggle(replaceMode == "regexp");
                $('#replaceAll_info').toggle(replaceMode == "all");
                $('#insertBefore, #insertBefore_info').toggle(replaceMode == "before");
                $('#insertAfter, #insertAfter_info').toggle(replaceMode == "after");
                $('#replaceBetween, #replaceBetween_info').toggle(replaceMode == "between");
              };
              
              $('#replaceMode').on('change', changeReplaceMode);
              
              changeReplaceMode();
            }, 0);
          });
    </script>
  </script>

  <script type="text/template" id="disablerules">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"ids", description:tr("Replacement ID"), default_selector: "string", disable_int:true, variants: [{value:"ALL", description:tr("Stop executing all existing replacement and filtering functions")}], value_string: "", help: {description: tr("The ID of the replacement or filtering function that needs to be stopped. You can specify multiple IDs separated by commas or use a list. To stop all existing functions, use the value \"<b>ALL</b>\"."), examples:[{code:"CACHECTRL_873444945"},{code:"REQCTRL_265912258,REQREDIR_360998317"},{code:"[\"REQMOD_432143270\", \"RESPMOD_1016639777\"]"},{code:"ALL",description:tr("Stop executing all existing replacement and filtering functions")}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Stop the replacement or filtering function by its ID.</div>
      <div class="tr tooltip-paragraph-fold">This action will completely and permanently stop the specified function created using one of the following actions: "<a href="#!/cachemaskallow">Allow cache</a>", "<a href="#!/cachemaskdeny">Deny cache</a>", "<a href="#!/requestmaskallow">Allow request</a>", "<a href="#!/requestmaskdeny">Deny request</a>", "<a href="#!/redirectrequests">Redirect browser requests</a>", "<a href="#!/replacerequestcontent">Replace request content</a>", or "<a href="#!/replaceresponsecontent">Replace response content</a>".</div>
      <div class="tr tooltip-paragraph-fold">To perform this action, you need the replacement ID obtained as a result of executing one of the actions mentioned above.</div>
      <div class="tr tooltip-paragraph-fold">This action can stop multiple functions at once; for this, a list of IDs must be provided instead of a single ID. You can use a string of IDs separated by commas as a list.</div>
      <div class="tr tooltip-paragraph-fold">By specifying the string "<b>ALL</b>" as the ID, you can stop all existing replacement and filtering functions.</div>
      <div class="tr tooltip-paragraph-fold">Using the "<a href="#!/getrulestats">Get replacement stats</a>" action, you can retrieve a list of all replacement IDs, as well as a separate list of only active replacement IDs.</div>
      <div class="tr tooltip-paragraph-fold">Stopping a function removes all information about it, making it impossible to retrieve its statistics after this action is performed.</div>
      <div class="tr tooltip-paragraph-last-fold">If the function with the specified ID does not exist, this action will do nothing.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="getrulestats">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"id", description:tr("Replacement ID"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The ID of the replacement or filtering function for which the execution statistics need to be retrieved."), examples:[{code:"CACHECTRL_873444945"},{code:"REQREDIR_1625622088"},{code:"RESPMOD_360998317"},{code:tr("Empty string"),description:tr("Get only the list of all IDs and the list of active IDs")}]}}) %>
      <%= _.template($('#variable_constructor').html())({id:"SaveExecutionCount", description:tr("Number of executions"), default_variable: "REPLACEMENT_EXECUTION_COUNT", help: {description: tr("This variable will contain the number of executions of the specified function."), examples:[{code:2},{code:5},{code:0,description:tr("The specified function has not been executed yet")},{code:-1,description:tr("The replacement ID was not provided, or the function with the specified ID does not exist")}]}}) %>
      <%= _.template($('#variable_constructor').html())({id:"SaveIsActive", description:tr("Is active"), default_variable: "REPLACEMENT_IS_ACTIVE", help: {description: tr("This variable will be set to <code>true</code> or <code>false</code> depending on whether the specified function is currently active.") + " " + tr("A function is considered active if its number of executions is below the set maximum or if no execution limit is in place."), examples:[{code:true,description:tr("The function is currently active")},{code:false,description:tr("The replacement ID was not provided, the function with the specified ID does not exist, or it is currently inactive")}]}}) %>
      <%= _.template($('#variable_constructor').html())({id:"SaveAllIds", description:tr("List of all replacement IDs"), default_variable: "REPLACEMENT_ALL_IDS_LIST", help: {description: tr("This variable will contain a list of IDs for all existing replacement and filtering functions.") + " " + tr("The resulting list can be processed using actions from the \"<b>List</b>\" module."), examples:[{code:"[\"REQCTRL_873444945\"]"},{code:"[\"REQCTRL_1625622088\", \"REQMOD_265912258\"]"},{code:"[\"REQREDIR_360998317\", \"RESPMOD_1618135638\"]"}]}}) %>
      <%= _.template($('#variable_constructor').html())({id:"SaveActiveIds", description:tr("List of active replacement IDs"), default_variable: "REPLACEMENT_ACTIVE_IDS_LIST", help: {description: tr("This variable will contain a list of IDs for only the replacement and filtering functions that are currently active.") + " " + tr("The resulting list can be processed using actions from the \"<b>List</b>\" module."), examples:[{code:"[\"CACHECTRL_1061998576\"]"},{code:"[\"REQREDIR_1847555679\", \"REQMOD_432143270\"]"},{code:"[\"CACHECTRL_1016639777\", \"REQCTRL_2111627593\"]"}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get statistics on the execution of a replacement or filtering function by its ID.</div>
      <div class="tr tooltip-paragraph-fold">This action will retrieve the execution statistics of the specified function, created using one of the following actions: "<a href="#!/cachemaskallow">Allow cache</a>", "<a href="#!/cachemaskdeny">Deny cache</a>", "<a href="#!/requestmaskallow">Allow request</a>", "<a href="#!/requestmaskdeny">Deny request</a>", "<a href="#!/redirectrequests">Redirect browser requests</a>", "<a href="#!/replacerequestcontent">Replace request content</a>", or "<a href="#!/replaceresponsecontent">Replace response content</a>", and save the data into the specified variables.</div>
      <div class="tr tooltip-paragraph-fold">To retrieve the full statistics, you must provide the replacement ID obtained as a result of executing one of the actions mentioned above.</div>
      <div class="tr tooltip-paragraph-fold">If the replacement ID is not provided or a function with the specified ID does not exist, only the list of all replacement IDs and the list of active replacement IDs will be retrieved. The "<b>Number of executions</b>" will be set to <code>-1</code>, and "<b>Is active</b>" will be set to <code>false</code>.</div>
      <div class="tr tooltip-paragraph-last-fold">The retrieved ID lists can be processed using actions from the "<b>List</b>" module or directly used in the "<a href="#!/disablerules">Stop replacement</a>" action.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="result">
    <div class="container-fluid result">
       <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Result Data"), default_selector: "string", disable_int:true, help: {description: tr("Data. Can contain variables and resources."), examples:[{code:"[[USERNAME]]:[[PASSWORD]]",description:tr("Output created account")},{code:"[[AVATAR_URL]]",description:tr("Output avatar")}]}}) %>

       <%= _.template($('#combobox').html())({id: "Select", title: tr("Result Placeholder"), items: [
        {value: "1", "name": "1", selected: true},
        {value: "2", "name": "2"},
        {value: "3", "name": "3"},
        {value: "4", "name": "4"},
        {value: "5", "name": "5"},
        {value: "6", "name": "6"},
        {value: "7", "name": "7"},
        {value: "8", "name": "8"},
        {value: "9", "name": "9"}
       ]
      }) %>

      
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Output data to the results tab.</div>
      <div class="tr tooltip-paragraph-fold">This action suites best to output raw data, like accounts registered, posts parsed, etc.</div>
      <div class="tr tooltip-paragraph-fold">If you want to write message, with date and thread number, better to use "Log" action.</div>
      <div class="tr tooltip-paragraph-fold">Before running script you can create up to nine tabs for different purposes and give names for them, for example, one for accounts, one for posts, avatars, etc.</div>
      <div class="tr tooltip-paragraph-fold">"Result Placeholder" parameter sets tab number, numeration is starting from from 1.</div>
      <div class="tooltip-paragraph-last-fold"><span class="tr">If you want to output data to file only, use this</span> (<span class="tr-en"><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=how_to_let_user_to_choose_output_file_name');return false">article</a></span><span class="tr-ru"><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=ru:how_to_let_user_to_choose_output_file_name');return false">статью</a></span>)</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "how_to_output_script_result"}) %>
  </script>

  <script type="text/template" id="timeout">
    <div class="container-fluid result">
       <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Timeout in milliseconds"), default_selector: "int", disable_string:true, value_number: 60000, min_number: 1000}) %>
       <%= _.template($('#combobox').html())({id: "Type", title: tr("Timeout Type"), items: [
        {value: "general", "name": "General", selected: true},
        {value: "fullpageload", "name": "Full Page Load"},
        {value: "solver", "name": "Solver"},
      ]
      }) %>
    </div>

    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">BAS limits execution time for every action. No action can last forever except sleep and manual captcha solving, but you can tweak limits.</div>
      <div class="tr tooltip-paragraph-fold">By default execution time for captcha solving in non manual mode is 120 seconds and 60 seconds for every other action.</div>
      <div class="tr tooltip-paragraph-fold">To change maximum captcha solving time run this action with "Solver" timeout type.</div> 
      <div class="tr tooltip-paragraph-fold">Or run this action with "General" timeout type to change maximum execution time for all other actions.</div>
      <div class="tr tooltip-paragraph-last-fold">BAS allows to set timeout for every action individually, to do that click on hourglass icon near cancel button inside action interface.</div>
    </div>


    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

<script type="text/template" id="globalset">
    <div class="container-fluid globalset">
      <%= _.template($('#variable_constructor').html())({id:"Name", description:tr("Variable Name"), default_variable: "", disable_locals: true, enable_globals:true, help: {description: tr("The name of the variable to be created or modified.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Value"), default_selector: "string", help: {description: tr("Variable value"), examples:[{code:"any string",description:tr("Any string will work")},{code:"[[LOGIN]]:[[PASSWORD]]",description:tr("Concat 2 variables")},{code:"10",description:tr("Any number. Works with int type")},{code:"1+1",description:tr("Any javascript code. Works with expression type")}]}}) %>
    </div>
     <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Create new or update existing global variable and set its value.</div>
      <div class="tr tooltip-paragraph-fold">Global variables are availabe during whole script execution in every thread.</div>
      <div class="tr tooltip-paragraph-fold">Global variable name should be in uppercase and should describe its purpose. Naming variable A1 or A2 could make your script very hard to read.</div>
      <div class="tr tooltip-paragraph-fold">You can use that global variable later inside any field by putting variable name into double square brackets like this: [[GLOBAL:NEW_VARIABLE]]. You don't need to type it manually, just click on any field, than on "Insert variable" and finally select specific variable.</div>
      <div class="tr tooltip-paragraph-fold">"Value" parameter by default is a string, but may also contain other variables, like this [[LOGIN]]@gmail.com, or resources. So this action also may concat strings([[PART1]][[PART2]]), update them, etc.</div>
      <div class="tr tooltip-paragraph-fold">By default "Value" parameter is a string, but you can change its type to int, so variable will be number.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Setting type to expression will set variable to result of JavaScript execution. This is very powerful mechanism. For example, to get current timestamp input Date.now() into "Value of variable" parameter</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=gettimestamp.png');return false">screen</a>)</div>

      <div class="tr tooltip-paragraph-fold">You can use JavaScript functions on BAS variables, for example, [[LINE]].split(":")[0] will split string into two pieces and take first.</div>
      <div class="tr tooltip-paragraph-last-fold">If you want to set multiline variable, use template action.</div>

    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="globalget">
    <div class="container-fluid globalget">
      <%= _.template($('#input_constructor').html())({id:"Name", description:tr("Variable Name"), default_selector: "string", disable_int:true, disable_editor:true, disable_resource:true, disable_variable:true}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "GLOBAL_VARIABLE_RESULT"}) %>
    </div>
    <div class="tooltipinternal">Global variables are availabe during whole script run.</div>

    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

<script type="text/template" id="httpclientproxy">
    <div class="container-fluid" >
      <%= _.template($('#input_constructor').html())({id:"ProxyText", description:tr("Proxy String"), default_selector: "string", disable_int:true, help: {description: tr("String with information about proxy. It may contain ip, port, proxy type in different formats. This string may also contain login and password, if it doesn't, auth can be set with \"Proxy Login\" and \"Proxy Password\" parameters."), examples:[{code:"210.10.10.10:1085"},{code:"username:password@210.10.10.10:1085"},{code:"socks5://210.10.10.10:1085"},{code:"socks:210.10.10.10:1085:username:password"},{code:"http:username:password:210.10.10.10:1085"},{code:"{{proxy}}", description: tr("Get from resource")},{code:tr("Empty string"),description:tr("Without proxy")}   ]}}) %>
      <div class="col-xs-12" style="display:none">
        <form class="form-horizontal">
          <div class="form-group">
            <hr style="margin-top:5px;margin-bottom:5px"/>
            <div style="margin-left:15px;"> 
              <table>
                <tr><td>
                  <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://luminati.io/?affiliate=ref_5b2a194821e9e462666c9e6f&cam=L_ofri');return false" class="tr"><img src="luminati.png"/> </a>
                </td><td>

                <span class="tr" style="font-size:small">Try Luminati proxies. <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://luminati.io/?affiliate=ref_5b2a194821e9e462666c9e6f&cam=L_ofri');return false" class="tr">Luminati</a> is world's largest
  proxy network. It offers more than 30 millions of mobile, residental and datacenter IPs which can be filtered over countries, cities, ASN and carriers.</span>
                </td></tr>
              </table>  
            </div>
            <hr style="margin-top:5px;margin-bottom:5px"/>
            
          </div>
        </form>
      </div>
      <%= _.template($('#input_constructor').html())({id:"ProxyType", description:tr("Proxy Type"), default_selector: "string", disable_int:true, value_string: "http", variants: ["http","socks5","auto"], help: {description: tr("socks5 and http proxy types are supported."), examples:[{code:"socks"},{code:"socks5",description:tr("Same as socks")},{code:"http"},{code:"https",description:tr("Same as http")}]}}) %>
      <%= _.template($('#input_constructor').html())({id:"ProxyLogin", description:tr("Proxy Login. Can be blank."), default_selector: "string", disable_int:true, help: {description: tr("Proxy login, overrides login set in proxy string. Useful if you have many proxy with same login and password.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"ProxyPassword", description:tr("Proxy password. Can be blank."), default_selector: "string", disable_int:true, help: {description: tr("Proxy password, overrides password set in proxy string. Useful if you have many proxy with same login and password.")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">By default http client works without proxy, this action sets proxy for http client.</div>
      <div class="tr tooltip-paragraph-fold">Use resources if you want to take them from file, url or database.</div>
      <div class="tr tooltip-paragraph-fold">You can change proxy once and it will be applied to every action which uses http client.</div> 
      <div class="tr tooltip-paragraph-last-fold">Proxy with empty parameter will reset it to default value(direct connection).</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>
<script type="text/template" id="httpclientreset">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">This action will reset http client and all its settings.</div>
      <div class="tr tooltip-paragraph-fold">Use 'HTTP-Client Restore Cookies' action with empty value if you want to reset only cookies.</div>
      
      <div class="tr tooltip-paragraph-last-fold">It affect every setting and state that http client has: proxy, headers, content, status, cookies, etc.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>
<script type="text/template" id="httpclientdownload">
    <div class="container-fluid httpclientdownload">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Url"), default_selector: "string", disable_int:true, help: 
        {
          description: tr("Request url"), examples:
          [
            {
              code:"https://google.com",description:tr("Url with scheme")
            },
            {
              code:"google.com",description:tr("Url without scheme")
            },
            {
              code:"https://www.google.com/search?q=cats",description:tr("Url with query string")
            },
            {
              code:"https://www.google.com/search?q=%D0%BA%D0%BE%D1%82%D1%8B",description:tr("Url with encoded query. To encode string use encodeURIComponent function.")
            }
          ]
        }}) %>
      <%= _.template($('#input_constructor').html())({id:"File", description:tr("File Path"), default_selector: "string", disable_int:true, help: 
{
  description: tr("A path to file which will be downloaded. If file exists, it will be overwritten. Putting here resource with type 'LinesFromFile' is almost always a bad idea, because resource will be converted to line from selected file, not to file name. If you want to get file name from resource, please use 'Resource Location' action and put result here."), examples:
  [
    {
      code:"c:/downloads/pic.png"
    },
    {
      code:"c:\\downloads\\pic.png"
    }
  ]
}
}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Download selected url and save responce to file.</div>
      <div class="tr tooltip-paragraph-fold">If you don't want to save data on disk, you should use 'GET' or 'POST' action.</div>
      <div class="tr tooltip-paragraph-fold">This action uses cookies and headers just like 'GET' and 'POST' actions.</div>
      <div class="tr tooltip-paragraph-fold">Special characters and non-latin query parts must be encoded with encodeURIComponent function. For example, instead of using https://www.google.com/search?q=коты, url must be https://www.google.com/search?q=%D0%BA%D0%BE%D1%82%D1%8B</div>
      <div class="tr tooltip-paragraph-fold">HTTP headers(like User-Agent) can be specified with 'HTTP-Client Set Header' action.</div>
      <div class="tr tooltip-paragraph-fold">'Download' action will not set any variable, to obtain responce you need to call 'Current Url', 'Status' or 'Get Header' after request is performed. And, of course, specified file will contain responce text.</div>
      <div class="tr tooltip-paragraph-fold">'Current Url' will get actual url after all redirects.</div>
      <div class="tr tooltip-paragraph-fold">'Status' returns HTTP status, for example, 200 - if request is performed correctly, 500 - in case of server error, etc.</div>
      <div class="tr tooltip-paragraph-fold">'Get Header' returns responce header, like 'Content-Type', 'Date', 'Set-Cookie'</div>
      <div class="tr tooltip-paragraph-last-fold">You can set max page loading time by clicking on hourglass icon near cancel button.</div>

    </div>
    <%= _.template($('#back').html())({action:"executeandadd",use_timeout: true, visible:true}) %>
  </script>
<script type="text/template" id="httpclientget">
    <div class="container-fluid httpclientget">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Url"), default_selector: "string", disable_int:true, help: 
        {
          description: tr("Request url"), examples:
          [
            {
              code:"https://google.com",description:tr("Url with scheme")
            },
            {
              code:"google.com",description:tr("Url without scheme")
            },
            {
              code:"https://www.google.com/search?q=cats",description:tr("Url with query string")
            },
            {
              code:"https://www.google.com/search?q=%D0%BA%D0%BE%D1%82%D1%8B",description:tr("Url with encoded query. To encode string use encodeURIComponent function.")
            }
          ]
        }}) %>
      <%= _.template($('#input_constructor').html())({id:"Headers", description:tr("Headers, for example:\nUser-Agent: Mozilla/5.0 Gecko/20100101 Firefox/57.0\nReferer: google.com"), default_selector: "string", disable_int:true, disable_editor:true, disable_expression:true, use_textarea:true, replace_linebreaks: true, size: 8, disable_type_chooser:true,textarea_height:80}) %>
      <%= _.template($('#input_constructor').html())({id:"Method", description:tr("Method"), default_selector: "string", disable_int:true, value_string: "GET", variants:["GET","HEAD","DELETE","TRACE","OPTIONS"], size:3, help: 
      {
        description: tr("Request method, you can put any string here.")
      }}) %>
      
      <%= _.template($('#checkbox').html())({id: "Check", checked: true, title: tr("Follow redirects")}) %>

    </div>

    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Make http request using GET, HEAD, DELETE, TRACE or OPTIONS method,  
i.e. methods which don't send data.</div>
      <div class="tr tooltip-paragraph-fold">Special characters and non-latin query parts must be encoded with encodeURIComponent function. For example, instead of using https://www.google.com/search?q=коты, url must be https://www.google.com/search?q=%D0%BA%D0%BE%D1%82%D1%8B</div>
      <div class="tooltip-paragraph-fold"><span class="tr">If 'Record HTTP request' mode is enabled, then every request that browser does will be converted to actions using http client and added to scenario tab</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=recordhttprequests.png');return false">screen</a> ).</div>
      <div class="tr tooltip-paragraph-fold">HTTP headers(like User-Agent) can be specified in this action with 'Headers' parameter or with 'HTTP-Client Set Header' action. In first case headers will be modified only for current action, in second case headers will be modified for all following actions.</div>
      <div class="tr tooltip-paragraph-fold">By default http client will follow redirects. If you want, you can disable that behavior and process Location header yourself. To get responce header, use 'Get Header' action after request.</div>
      <div class="tr tooltip-paragraph-fold">'Get' action will not set any variable, to obtain responce you need to call 'Current Url', 'Content', 'Status' or 'Get Header' after request is performed.</div>
      <div class="tr tooltip-paragraph-fold">'Current Url' will get actual url after all redirects.</div>
      <div class="tr tooltip-paragraph-fold">'Content' will return page html.</div>
      <div class="tr tooltip-paragraph-fold">'Status' returns HTTP status, for example, 200 - if request is performed correctly, 500 - in case of server error, etc.</div>
      <div class="tr tooltip-paragraph-fold">'Get Header' returns responce header, like 'Content-Type', 'Date', 'Set-Cookie'</div>
      <div class="tr tooltip-paragraph-fold">HTTP client handles cookies automatically, so normally you don't need to process 'Set-Cookie' header.</div>
      <div class="tr tooltip-paragraph-fold">The fastest way to extract data from page source is xpath. 'Http Client' has set of actions to perform xpath queries. It is not recomended to use 'Content' action and regular expressions unless it is absolutely necessary.</div>
      <div class="tr tooltip-paragraph-fold">If server returns json data, use JSON.parse function to parse it.</div>

      <div class="tr tooltip-paragraph-last-fold">You can set max page loading time by clicking on hourglass icon near cancel button.</div>

    </div>
    <%= _.template($('#back').html())({action:"executeandadd",use_timeout: true, visible:true, wiki: "how_to_make_get_request"}) %>
  </script>
  <script type="text/template" id="httpclientpost">
    <div class="container-fluid httpclientpost">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Url"), default_selector: "string", disable_int:true, help: 
        {
          description: tr("Request url"), examples:
          [
            {
              code:"https://google.com",description:tr("Url with scheme")
            },
            {
              code:"google.com",description:tr("Url without scheme")
            },
            {
              code:"https://www.google.com/search?q=cats",description:tr("Url with query string")
            },
            {
              code:"https://www.google.com/search?q=%D0%BA%D0%BE%D1%82%D1%8B",description:tr("Url with encoded query. To encode string use encodeURIComponent function.")
            }
          ]
        }}) %>

      <%= _.template($('#input_constructor').html())({id:"Headers", description:tr("Headers, for example:\nUser-Agent: Mozilla/5.0 Gecko/20100101 Firefox/57.0\nReferer: google.com"), default_selector: "string", disable_int:true, disable_editor:true, disable_expression:true, use_textarea:true, replace_linebreaks: true, size: 8, disable_type_chooser:true,textarea_height:80}) %>


      <%= _.template($('#checkbox').html())({id: "Check2", title: tr("Post data constructor")}) %>




      <span data-visible-if-checked="Check2">
        <div class="col-xs-12">
         <form class="form-horizontal">
            <div class="form-group">
              <%= _.template($('#input_constructor').html())({id:"PostName", description:tr("Request Parameter Name"), default_selector: "string", disable_int:true, dont_use_top: true, help: 
                {
                  description: tr("Post parameter name. After setting this value you need to add it to 'Post Data' parameter by hitting '+ Add' button.")}
                }) %>
            </div>
          </form>
        </div>

        <div class="col-xs-12">
         <form class="form-horizontal">
            <div class="form-group">
              <%= _.template($('#input_constructor').html())({id:"PostValue", description:tr("Request Parameter Value"), default_selector: "string", disable_int:true, dont_use_top: true, help: 
                {
                  description: tr("Post parameter value. After setting this value you need to add it to 'Post Data' parameter by hitting '+ Add' button.")} }) %>
            </div>
          </form>
        </div>


        <div class="col-xs-12">
         <form class="form-horizontal">
            <div class="form-group">
              <button tabindex="-1" type="button" class="btn btn-default addtopost" > + <span class="tr">Add</span></button>
              <button tabindex="-1" type="button" class="btn btn-default addtopostfile" > + <span class="tr">Add As File</span></button>
              <button tabindex="-1" type="button" class="btn btn-default addtopostbase64" > + <span class="tr">Add As Base64 Data</span></button>
            </div>
          </form>
        </div>

        <%= _.template($('#input_constructor').html())({id:"PostDataArray", description:tr("Post Data"), default_selector: "expression", disable_int:true, disable_string:true, help: 
                {
                  description: tr("To add values into post data list, fill 'Request Parameter Name' and 'Request Parameter Value' and hit '+ Add' button. This list of key value parameters will be sended to server in form, which is defined in 'Content Type' parameter.")}}) %>

        <%= _.template($('#input_constructor').html())({id:"ContentType", description:tr("Content Type"), default_selector: "string", disable_int:true, value_string: "urlencode", variants:["urlencode","multipart","json"], size:3, help: 
{
  description: tr("Content type with 3 options available: urlencode, multipart, json"), examples:
  [
    {
      code:"urlencode",description:tr("Send data as key/value pairs.")
    },
    {
      code:"multipart",description:tr("Send data as key/value pairs. Values may have binary format, can be used to send files.")
    },
    {
      code:"json",description:tr("Send data in json format.")
    }
  ]
}
}) %>      
        
        
      </span>

      <span data-visible-if-unchecked="Check2">
        <%= _.template($('#input_constructor').html())({id:"PostDataRaw", description:tr("Post Data"), default_selector: "string", disable_int:true, disable_editor:true, disable_expression:true, use_textarea:true, replace_linebreaks: true, size: 8, disable_type_chooser:true,textarea_height:80, modal_code_id:"post-data-" + (_K || "en")}) %>
        <%= _.template($('#input_constructor').html())({id:"ContentTypeRaw", description:tr("Content-Type"), default_selector: "string", disable_int:true, value_string: "application/x-www-form-urlencoded", variants:["application/x-www-form-urlencoded","multipart/form-data","application/json"], size:3, help: 
{
  description: tr("'Contect-Type' header. This parameter indicates what type of content is located in 'Post Data' field."), examples:
  [
    {
      code:"application/x-www-form-urlencoded",description:tr("Data contains key/value pairs separated by &(ampersand). For example, key1=value1&key2=value2&key3=value3")
    },
    {
      code:"multipart/form-data",description:tr("Data contains key/value pairs, values may have binary format, can be used to send files. Boundary will be automatically detected from 'Post Data' field.")
    },
    {
      code:"application/json",description:tr("Send data in json format. For example, {\"key1\":\"value1\",\"key2\":\"value2\",\"key3\":\"value3\"}")
    }
  ]
}
}) %>      
      </span>

    <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), description: tr("")}) %>

      

      <%= _.template($('#input_constructor').html())({id:"Encoding", description:tr("Encoding"), default_selector: "string", disable_int:true, value_string: "UTF-8", help: 
{
  description: tr("Post data encoding. This parameter determines encoding name which will be used to process post data. This parameter doesn't change Content-Type header, you must do it yourself."), examples:
  [
    {
      code:"UTF-8",description:tr("It is ok for most of cases.")
    },
    {
      code:"WINDOWS-1251",description:tr("Used on some Russian sites.")
    }
  ]
}
}) %>
      
      <%= _.template($('#input_constructor').html())({id:"Method", description:tr("Method"), default_selector: "string", disable_int:true, value_string: "POST", variants:["POST","PUT","PATCH"], size:3, help: 
{
  description: tr("Request method, you can put any string here.")
}}) %>

    <%= _.template($('#block_end').html())() %>

    <%= _.template($('#checkbox').html())({id: "Check", checked: true, title: tr("Follow redirects")}) %>

      

    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Make http request using POST, PUT or PATCH method,  
i.e. methods which send data.</div>
      <div class="tr tooltip-paragraph-fold">Post data can be specified in 2 forms: raw(default) and with constructor. It is recommended to use raw form.</div>
      <div class="tr tooltip-paragraph-fold">With raw form you need to input post data as is. This means, that you can get post data from sniffer and put it inside 'Post data' field. Check help for this field, it contains a lot of examples. Another thing, which need to be done is setting up 'Content-Type' parameter, it can be obained as one of request headers. 'Content-Type' parameter indicates what type of content is located in 'Post Data' field, it could be json, form content, etc.</div>
      <div class="tr tooltip-paragraph-fold">Variables and resources may be embedded into 'Post data' field. If you need to put binary data, read it into variable with base64 encoding(for example by reading file in base64) and instead of using [[VARIABLE]] notation, use it with 'base64:' prefix, like this base64:[[VARIABLE]]. 'Post data' help contains more examples.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">If 'Record HTTP request' mode is enabled, then every request that browser does will be converted to actions using http client and added to scenario tab</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=recordhttprequests.png');return false">screen</a> ). <span class="tr">It is the easiest way to generate action with http requests.</span></div>
      <div class="tr tooltip-paragraph-fold">Special characters and non-latin query parts must be encoded with encodeURIComponent function. For example, instead of using https://www.google.com/search?q=коты, url must be https://www.google.com/search?q=%D0%BA%D0%BE%D1%82%D1%8B</div>
      
      <div class="tr tooltip-paragraph-fold">HTTP headers(like User-Agent) can be specified in this action with 'Headers' parameter or with 'HTTP-Client Set Header' action. In first case headers will be modified only for current action, in second case headers will be modified for all following actions.</div>
      <div class="tr tooltip-paragraph-fold">By default http client will follow redirects. If you want, you can disable that behavior and process Location header yourself. To get responce header, use 'Get Header' action after request.</div>
      <div class="tr tooltip-paragraph-fold">'Post' action will not set any variable, to obtain responce you need to call 'Current Url', 'Content', 'Status' or 'Get Header' after request is performed.</div>
      <div class="tr tooltip-paragraph-fold">'Current Url' will get actual url after all redirects.</div>
      <div class="tr tooltip-paragraph-fold">'Content' will return page html.</div>
      <div class="tr tooltip-paragraph-fold">'Status' returns HTTP status, for example, 200 - if request is performed correctly, 500 - in case of server error, etc.</div>
      <div class="tr tooltip-paragraph-fold">'Get Header' returns responce header, like 'Content-Type', 'Date', 'Set-Cookie'</div>
      <div class="tr tooltip-paragraph-fold">HTTP client handles cookies automatically, so normally you don't need to process 'Set-Cookie' header.</div>
      <div class="tr tooltip-paragraph-fold">The fastest way to extract data from page source is xpath. 'Http Client' has set of actions to perform xpath queries. It is not recomended to use 'Content' action and regular expressions unless it is absolutely necessary.</div>
      <div class="tr tooltip-paragraph-fold">If server returns json data, use JSON.parse function to parse it.</div>

      <div class="tr tooltip-paragraph-last-fold">You can set max page loading time by clicking on hourglass icon near cancel button.</div>

    </div>
    <%= _.template($('#back').html())({action:"executeandadd",use_timeout: true, visible:true, wiki: "how_to_make_post_request"}) %>
  </script>

  <script type="text/template" id="post-data-en">
    <div>This field must contain post data in raw form.</div>
    <div>You can take it from http sniffer like Wireshark, Microsoft Network Monitor, Fiddler or Burp ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=copydatafromfiddler.png');return false">screen</a> ).</div>
    <div>Post data can also be generated with 'Record HTTP Requests' mode automatically ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=recordhttprequests.png');return false">screen</a> ).</div>
    <div>After setting post data, don't forget to change 'Content-Type' field accordingly. It indicates what type of content is located in 'Post Data' field.</div>
    <div>Here are some examples for different content types:</div>
    <br/>
    <div>Content-Type: <strong>application/x-www-form-urlencoded</strong></div>
    <div>Data contains key/value pairs separated by &(ampersand). Each key and value must be urlencoded. You can do that by calling encodeURIComponent function.</div>
    <br/>
    <div>Example #1. One key and one value.</div>
    <div><pre>key1=value1</pre></div>
      <br/>
    <div>Example #2. Using variables.</div>
    <div><pre>key1=[[VALUE]]</pre></div>
      <br/>
    <div>Example #3. Several keys and values.</div>
    <div><pre>key1=value1&key2=value2</pre></div>
      <br/>
    <div>Example #4. Escape special symbol.</div>
    <div><pre>email=login%40gmail.com</pre></div>
    <div>You can't use symbol @, need to escape it first, so symbol @ becomes %40</div>
      <br/>

    <div>Content-Type: <strong>multipart/form-data</strong></div>
    <div>Data contains key/value pairs, values may have binary format, can be used to send files. Each key value pair is separated by boundary. Boundary will be automatically detected from 'Post Data' field.</div>
<br/>
    <div>Example #1. One key and one value.</div>
    <div><pre>--randomstringboundary
Content-Disposition: form-data; name="key"; 

value including special symbols and binary data
--randomstringboundary--</pre></div>
      <br/>
    <div>Example #2. Using variables.</div>
    <div><pre>--randomstringboundary
Content-Disposition: form-data; name="key"; 

[[VALUE]]
--randomstringboundary--</pre></div>
      <br/>
    <div>Example #3. Several keys and values.</div>
    <div><pre>--randomstringboundary
Content-Disposition: form-data; name="key1"; 

value1
--randomstringboundary
Content-Disposition: form-data; name="key2"; 

value2
--randomstringboundary--</pre></div>

      <br/>

    <div>Example #4. Upload file.</div>
    <div><pre>--randomstringboundary
Content-Disposition: form-data; name="test"; filename="filename.txt"
Content-Type: application/octet-stream

FILE CONTENT
--randomstringboundary--</pre></div>

  <br/>


  <div>Variables can be used.</div>

  <div>Example #5. Upload file from variable.</div>
    <div><pre>--randomstringboundary
Content-Disposition: form-data; name="test"; filename="filename.txt"
Content-Type: application/octet-stream

[[VARIABLE]]
--randomstringboundary--</pre></div>

  <br/>

  <div>If file has binary format, you need to read it in base64 encoding and append 'base64:' before variable.</div>

  <div>Example #6. Upload binary file.</div>
    <div><pre>--randomstringboundary
Content-Disposition: form-data; name="test"; filename="filename.bin"
Content-Type: application/octet-stream

base64:[[VARIABLE_WITH_BASE64_ENCODING]]
--randomstringboundary--</pre></div>


  <br/>

    <div>Content-Type: <strong>application/json</strong></div>
    <div>Send data in json format.</div>
<br/>
<div>Example #1. Sending static json.</div>
    <div><pre>{
  "key": "value"
}</pre></div>
      <br/>

<div>Example #2. Sending json with variable.</div>
    <div><pre>{
  "key": [[VARIABLE]]
}</pre></div>
      <br/>

  <br/>
  <div>Content-Type: <strong>text/plain</strong></div>
  <div>Upload text type.</div>
  <br/>

  <div>Example #1. Sending text file.</div>
    <div><pre>Text file content</pre></div>
      <br/>

  <div>Content-Type: <strong>application/pdf</strong></div>
    <div>Upload pdf.</div>
    <br/>

  <div>Pdf is binary format. Binary data is stored in base64 encoding. Variable with base64 encoding must contain 'base64' prefix.</div>
  <div>Example #1. Sending binary file.</div>
    <div><pre>base64:[[VARIABLE_WITH_BASE64_ENCODING]]</pre></div>
      <br/>

  <div>Any other valid content types are acceptable.</div>      

  </script>
  <script type="text/template" id="post-data-ru">
        <div>Это поле должно содержать данные запроса в необработанном(сыром) виде.</div>
    <div>Это означает, что вы можете копировать их прямо из http сниффера, такого как Wireshark, Microsoft Network Monitor, Fiddler или Burp ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=copydatafromfiddler.png');return false">скрин</a> ).</div>
    <div>Данные запроса также могут быть сгенерированы автоматически с помощью режима "Захват HTTP запросов" ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=recordhttprequests.png');return false">скрин</a> ).</div>
    <div>После заполнения данного поля не забудьте также задать поле 'Content-Type', там содержится формат данных, в котором представлены данные запроса.</div>
    <div>Вот несколько примеров данных и их формат:</div>
    <br/>
    <div>Content-Type: <strong>application/x-www-form-urlencoded</strong></div>
    <div>Данные содержат пары ключ/значение, разделенные символом & (амперсанд). Каждый ключ и каждое значение должны быть закодированы с помощью кодировки urlencoded. Вы можете сделать это используя функцию encodeURIComponent.</div>
    <br/>
    <div>Пример №1. Один ключ и одно значение.</div>
    <div><pre>key1=value1</pre></div>
      <br/>
    <div>Пример №2. Использование переменных.</div>
    <div><pre>key1=[[VALUE]]</pre></div>
      <br/>
    <div>Пример №3. Несколько ключей и значений.</div>
    <div><pre>key1=value1&key2=value2</pre></div>
      <br/>
    <div>Пример №4. Кодировка специальных символов.</div>
    <div><pre>email=login%40gmail.com</pre></div>
    <div>Вы не можете использовать символ @, сначала его нужно закодировать, после чего он превращается в %40</div>
      <br/>

    <div>Content-Type: <strong>multipart/form-data</strong></div>
    <div>Данные содержат пары ключ/значение, разделенные символом & (амперсанд). Каждый ключ и каждое значение должны разделены специальной границей. Граница будет автоматически определена исходя из содержания поля.</div>
<br/>
    <div>Пример №1. Один ключ и одно значение.</div>
    <div><pre>--randomstringboundary
Content-Disposition: form-data; name="key"; 

Любые данные, в том числе и бинарные, и те, которые содержат специальные символы
--randomstringboundary--</pre></div>
      <br/>
    <div>Пример №2. Использование переменных.</div>
    <div><pre>--randomstringboundary
Content-Disposition: form-data; name="key"; 

[[VALUE]]
--randomstringboundary--</pre></div>
      <br/>
    <div>Пример №3. Несколько ключей и значений.</div>
    <div><pre>--randomstringboundary
Content-Disposition: form-data; name="key1"; 

value1
--randomstringboundary
Content-Disposition: form-data; name="key2"; 

value2
--randomstringboundary--</pre></div>

      <br/>

    <div>Пример №4. Загрузка файла.</div>
    <div><pre>--randomstringboundary
Content-Disposition: form-data; name="test"; filename="filename.txt"
Content-Type: application/octet-stream

FILE CONTENT
--randomstringboundary--</pre></div>

  <br/>


  <div>Внутри поля могут быть использованы переменные.</div>

  <div>Пример №5. Загрузить файл из переменной.</div>
    <div><pre>--randomstringboundary
Content-Disposition: form-data; name="test"; filename="filename.txt"
Content-Type: application/octet-stream

[[VARIABLE]]
--randomstringboundary--</pre></div>

  <br/>

  <div>Если файл имеет бинарный формат, то вам нужно прочитать его в кодировке base64 и поставить префикс 'base64:' перед переменной.</div>

  <div>Пример №6. Загрузить бинарный файл.</div>
    <div><pre>--randomstringboundary
Content-Disposition: form-data; name="test"; filename="filename.bin"
Content-Type: application/octet-stream

base64:[[VARIABLE_WITH_BASE64_ENCODING]]
--randomstringboundary--</pre></div>


  <br/>

    <div>Content-Type: <strong>application/json</strong></div>
    <div>Отправить данные в формате json.</div>
<br/>
<div>Пример №1. Отправить статический json.</div>
    <div><pre>{
  "key": "value"
}</pre></div>
      <br/>

<div>Пример №2. Отправить json с переменной.</div>
    <div><pre>{
  "key": [[VARIABLE]]
}</pre></div>
      <br/>

  <br/>
  <div>Content-Type: <strong>text/plain</strong></div>
  <div>Загрузить текстовый файл.</div>
  <br/>

  <div>Пример №1. Отправка статического текстового файла.</div>
    <div><pre>Содержание файла</pre></div>
      <br/>

  <div>Content-Type: <strong>application/pdf</strong></div>
    <div>Загрузить pdf.</div>
    <br/>

  <div>Pdf - это файл в бинарном формате. Такие данные должны быть переданы в кодировке base64. Переменная, которая содержит эти данные должна иметь префикс 'base64:'.</div>
  <div>Пример №1. Отправка бинарного файла.</div>
    <div><pre>base64:[[VARIABLE_WITH_BASE64_ENCODING]]</pre></div>
      <br/>

  <div>Здесь описаны не все случаи, также поддерживаются любые другие форматы данных.</div>
  </script>


  <script type="text/template" id="httpclienturl">
    <div class="container-fluid httpclienturl">
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "SAVED_URL", help: 
{
  description: tr("This variable will contain current url for http client after action will end.")
}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get current url of http client.</div>
      <div class="tr tooltip-paragraph-last-fold">Url may differ from last url used in 'GET' or 'POST' if there was redirects.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="httpclientcontent">
    <div class="container-fluid httpclientcontent">
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "SAVED_CONTENT", help: 
{
  description: tr("This variable will contain responce text without headers after action will end.")
}}) %>
      <%= _.template($('#input_constructor').html())({id:"Encoding", description:tr("Encoding"), default_selector: "string", disable_int:true, value_string: "auto", variants:["auto","utf-8","windows-1251","base64"], help: 
{
  description: tr("Encoding of responce text. This value can be 'auto', 'base64' or exact text, which contains encoding name. In 'auto' mode utf-8 encoding is assumed by default. If server specifies encoding in Content-Type header encoding, it will be used instead of utf-8. If this value will be set to excat encoding name, value in Content-Type header will be ignored. Setting exact value may be useful if encoding differs from utf-8 and server doesn't set it. 'base64' mode will return data encoded with base64. It is used if data is in binary format, like pictures, videos, etc.")
}
}) %>      

    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get page source of the last request of http client.</div>
      <div class="tr tooltip-paragraph-fold">Page source is the same as one, which is displayed after you hit CTRL-U in a browser.</div>
      <div class="tr tooltip-paragraph-fold">The responce doesn't contain headers, to get headers you need to use 'Get Header' action.</div>
      <div class="tr tooltip-paragraph-fold">You need to set 'base64' encoding if you are getting binary data. Many actions accept data in base64 format.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">You can specify exact encoding name, see</span> <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('http://doc.qt.io/qt-5/qtextcodec.html#details');return false">list of suported encodings</a>.</div>
      
      
      <div class="tr tooltip-paragraph-last-fold">The fastest way to extract data from page source is xpath. 'Http Client' has set of actions to perform xpath queries. It is not recomended to use 'Content' action and regular expressions unless it is absolutely necessary.</div>
    </div>

    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="httpclientstatus">
    <div class="container-fluid httpclientstatus">
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "SAVED_STATUS", help: 
{
  description: tr("Variable, which will contain http status as integer."), examples:
  [
    {
      code:"200",description:tr("The request has succeeded.")
    },
    {
      code:"302",description:tr("The target page resides under different url.")
    },
    {
      code:"404",description:tr("Page not found")
    }
  ]
}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get status of the last request of http client.</div>
      <div class="tr tooltip-paragraph-fold">You can compare status with 'If' action like this [[SAVED_STATUS]] == 200. This expression checks if request was successful.</div>
      
      <div class="tooltip-paragraph-last-fold"><span class="tr">List of</span> <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://httpstatuses.com/');return false">http statuses</a>.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="httpclientgetheader">
    <div class="container-fluid httpclientgetheader">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Header Name"), default_selector: "string", disable_int:true, help: 
{
  description: tr("Response header name. Header name must contain one or several words separated with dash. Character case is not important."), examples:
  [
    {
      code:"Location",description:tr("Get 'Location' header.")
    },
    {
      code:"Content-Type",description:tr("Get 'Content-Type' header.")
    },
    {
      code:"cOnTeNt-tYpE",description:tr("Also gets 'Content-Type' header.")
    }
  ]
}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "SAVED_HEADER", help: 
{
  description: tr("A variable name, which will hold header value.")
}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get response header of for last request.</div>
      <div class="tr tooltip-paragraph-fold">If request was performed with redirects, only headers for last redirect will be obtained. If you want to get headers for request in a middle of redirect chain, you need to disable 'Follow redirects' option for 'GET' and 'POST' action and perform redirects by yourself. To get url of next redirect, use 'Get Header' action with 'Location' parameter.</div>
      <div class="tooltip-paragraph-last-fold"><span class="tr">Headers can be shown in browser developer tools</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=showheaders.png');return false">screen</a> ).</div>
      
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="httpclientsetheader">
    <div class="container-fluid httpclientsetheader">
      <%= _.template($('#input_constructor').html())({id:"Name", description:tr("Header Name"), default_selector: "string", disable_int:true, value_string: "User-Agent", variants: ["User-Agent","Accept-Language"], size: 3, help: 
{
  description: tr("Request header name. Header name must contain one or several words separated with dash."), examples:
  [
    {
      code:"User-Agent",description:tr("Set 'User-Agent' header.")
    },
    {
      code:"Accept-Language",description:tr("Set 'Accept-Language' header.")
    },
    {
      code:"Referer",description:tr("Set referer.")
    }
  ]
}}) %>
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Header Value"), default_selector: "string", disable_int:true, value_string: "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0", help: 
{
  description: tr("Request header value. This could be arbitrary string.")
}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Set request header for subsequent requests with http client.</div>
      <div class="tr tooltip-paragraph-fold">You can set any valid header, like 'User-Agent', 'Referer', etc. However here is a list of headers that should not be set with this action: 'Connection', 'Host', 'Content-Type'. 'Content-Type' must be set in 'POST' action for a specific request. 'Accept-Encoding' can be set, but it is forbidden to put 'br' encoding in a list. 'br' encoding is not supported fro http client yet.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">To ensure, that headers are sent correctly use 'HTTP Sniffer' it is a window which automatically popups after any http request in record mode</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=httpsniffer.png');return false"> screen </a>).</div>
      <div class="tr tooltip-paragraph-last-fold">Use 'Clear Headers' action if you want to disable all headers set with this action.</div>
      
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="httpclientclearheader">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Clear all requests headers which was set with 'HTTP-Client Set Header' action.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="httpclientgetcookiesforurl">
    <div class="container-fluid httpclientgetcookiesforurl">
        <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Url"), default_selector: "string", disable_int:true}) %>
        <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "COOKIES_FOR_URL"}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">This action is deprecated it is recommended to use 'HTTP-Client Save Cookies' action instead.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="httpclientsavecookies">
    <div class="container-fluid httpclientsavecookies">
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "SAVED_COOKIES", help: 
{
  description: tr("This variable will contain string with json. That json will hold list with all cookies for all domains. Json format is described below.")
  
}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Save all http client cookies into variable.</div>

      <div class="tr tooltip-paragraph-fold">Result variable will contain string with json. That json will hold list with all cookies for all domains.</div>
      <div class="tr tooltip-paragraph-fold">Most of sites uses cookies to store user data, like user authorisation. This means, that by storing cookies after authorisation on some site and restore them later you can implement autologin.</div>
      <div class="tr tooltip-paragraph-fold">Cookie values is just a string, so you may save it to file, or database and use them later.</div>
      <div class="tr tooltip-paragraph-fold">Cookies from http client may be sent to browser even without this action by using 'Load cookies from http client' action. 'Load cookies from browser' will send cookies in opposite direction.</div>
      <div class="tr tooltip-paragraph-fold">Browser cookies and http client cookies shares same format.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Cookies string may be converted to object with JSON.parse function, like this [[JSON]] = JSON.parse([[SAVED_COOKIES]]). Result is a map with a single 'cookies' key, which holds a list, for example {"cookies": [COOKIE1,COOKIE2,COOKIE3,...]}.</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=cookiesformat2.png');return false">screen</a> ).

      </div>

      <div class="tr tooltip-paragraph-fold">If you want to change cookies or extract them, you need to use javascript. Javascript code can be used in any field if you set field type to expression, or with 'Execute code' action.</div>
      
      <div class="tr tooltip-paragraph-fold">Each cookie is a map with following keys: value, name, domain, path, expires, httpOnly, secure.</div>
      <div class="tr tooltip-paragraph-fold">secure and httpOnly are boolean values.</div>
      <div class="tr tooltip-paragraph-fold">expires is datetime and serialized as the number of seconds since the UNIX epoch.</div>
      <div class="tr tooltip-paragraph-fold">Here are some javascript snipsets to work with cookies. All of them may be placed into 'Execute code' action. Before using it, you must parse cookies from string like this [[COOKIES]] = JSON.parse([[SAVED_COOKIES]])["cookies"]</div>
      <div class="tr tooltip-paragraph-fold">Find cookie by name: [[COOKIE]] = [[COOKIES]].filter(function(el){return el["name"] == "REPLACE WITH COOKIE NAME"})[0]</div>
      <div class="tr tooltip-paragraph-fold">Check if cookie exists: [[COOKIE_EXISTS]] = [[COOKIES]].filter(function(el){return el["name"] == "REPLACE WITH COOKIE NAME"}).length > 0</div>
      <div class="tr tooltip-paragraph-fold">Extract cookie value [[COOKIE_VALUE]] = [[COOKIE]]["value"]</div>
      <div class="tr tooltip-paragraph-fold">You can also set cookie value [[COOKIE]]["value"] = "My value". But changing parsed object won't change cookie inside http client, to do that you need to convert cookie to string(with JSON.stringify([[COOKIES]])) and use it with 'HTTP-Client Restore Cookies' action.</div>
      <div class="tr tooltip-paragraph-last-fold">[[COOKIES]] variable will hold a list of cookies, so it also may be processed with actions from 'List' module.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="httpclientrestorecookies">
    <div class="container-fluid httpclientrestorecookies">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Cookies"), default_selector: "string", disable_int:true, help: 
{
  description: tr("This field must contain string with cookies in json format. That json must hold list with all cookies for all domains. Json format is described below. Use empty string to clear cookies."), examples:
  [
    {
      code:tr("Empty string"),description:tr("Clear cookies")
    }
  ]
  
}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Set cookies for http client.</div>

      <div class="tr tooltip-paragraph-fold">'Cookies' parameter must contain string in json format with all cookies. This string can be obtained as 'HTTP-Client Save Cookies' action result and changed optionally.</div>
      
      <div class="tr tooltip-paragraph-fold">Most of sites uses cookies to store user data, like user authorisation. This means, that by storing cookies after authorisation on some site and restore them later you can implement autologin.</div>
      <div class="tr tooltip-paragraph-fold">Cookie values is just a string, so you may save it to file, or database and use them later.</div>
      <div class="tr tooltip-paragraph-fold">Cookies from http client may be sent to browser by using 'Load cookies from http client' action. 'Load cookies from browser' will send cookies in opposite direction.</div>
      <div class="tr tooltip-paragraph-fold">Browser cookies and http client cookies shares same format.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Cookies must be a map with a single 'cookies' key, which holds a list, for example {"cookies": [COOKIE1,COOKIE2,COOKIE3,...]}.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=cookiesformat2.png');return false"> screen </a>).

      </div>

      <div class="tr tooltip-paragraph-fold">If you want to change cookies or extract them, you need to use javascript. Javascript code can be used in any field if you set field type to expression, or with 'Execute code' action.</div>
      
      <div class="tr tooltip-paragraph-fold">Each cookie is a map with following keys: value, name, domain, path, expires, httpOnly, secure.</div>
      <div class="tr tooltip-paragraph-fold">secure and httpOnly are boolean values.</div>
      <div class="tr tooltip-paragraph-fold">expires is datetime and serialized as the number of seconds since the UNIX epoch.</div>
      <div class="tr tooltip-paragraph-fold">Here are some javascript snipsets to work with cookies. All of them may be placed into 'Execute code' action. Before using it, you must parse cookies from string like this [[COOKIES]] = JSON.parse([[SAVED_COOKIES]])["cookies"]</div>
      <div class="tr tooltip-paragraph-fold">Find cookie by name: [[COOKIE]] = [[COOKIES]].filter(function(el){return el["name"] == "REPLACE WITH COOKIE NAME"})[0]</div>
      <div class="tr tooltip-paragraph-fold">Check if cookie exists: [[COOKIE_EXISTS]] = [[COOKIES]].filter(function(el){return el["name"] == "REPLACE WITH COOKIE NAME"}).length > 0</div>
      <div class="tr tooltip-paragraph-fold">Extract cookie value [[COOKIE_VALUE]] = [[COOKIE]]["value"]</div>
      <div class="tr tooltip-paragraph-fold">You can also set cookie value [[COOKIE]]["value"] = "My value".</div>
      <div class="tooltip-paragraph-fold"><span class="tr">After you finish manipulation with [[COOKIES]] array you need to convert it to string with JSON.stringify([[COOKIES]]) code</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=cookiesrestore2.png');return false"> screen </a>).</div>
      <div class="tr tooltip-paragraph-last-fold">[[COOKIES]] variable will hold a list of cookies, so it also may be processed with actions from 'List' module.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="httpclientfailonerror">
    <div class="container-fluid httpclientfailonerror">
      <%= _.template($('#input_constructor').html())({id:"SetFailed", description:tr("Set Fail On Error"), default_selector: "string", disable_int:true, value_string: "fail", variants: ["fail","continue"], size: 5}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">This action is deprecated it is recommended to use 'Ignore Errors' action instead.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="httpclientiserror">
    <div class="container-fluid httpclientiserror">
       <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "HTTP_CLIENT_WAS_ERROR"}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">This action is deprecated it is recommended to use 'Ignore Errors' action instead.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="httpclientgeterrorstring">
    <div class="container-fluid httpclientgeterrorstring">
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "HTTP_CLIENT_ERROR_STRING"}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">This action is deprecated it is recommended to use 'Ignore Errors' action instead.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="httpclientxpathxml">
    <div class="container-fluid httpclientxpath">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Xpath Query"), default_selector: "string", disable_int:true,
        variants: ["//title<br/><span style='color:gray;font-size:small'>" + tr("Get page title") + "</span>","//a<br/><span style='color:gray;font-size:small'>" + tr("Get all links") + "</span>","//img<br/><span style='color:gray;font-size:small'>" + tr("Find image") + "</span>","//img/@src<br/><span style='color:gray;font-size:small'>" + tr("Find image source") + "</span>","//*[@id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by id") + "</span>","//*[contains(@class,'CLASS')]<br/><span style='color:gray;font-size:small'>" + tr("Find element by class") + "</span>","//*[contains(@class,'CLASS') and @id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by class and id") + "</span>","//div[@id='ID_PARENT']/div[@id='ID_CHILD']<br/><span style='color:gray;font-size:small'>" + tr("Find element which contains parent") + "</span>"],
       help: 
{
  description: tr("Xpath query"), examples:
  [
    {
      code:"//title",description:tr("Get page title.")
    },
    
    {
      code:"//a",description:tr("Get all links.")
    },
    
    {
      code:"//img",description:tr("Find image.")
    },
    
    {
      code:"//img/@src",description:tr("Find image source(image url).")
    }
    ,
    
    {
      code:"//*[@id='ID']",description:tr("Find element by id.")
    },
    
    {
      code:"//*[contains(@class,'CLASS')]",description:tr("Find element by class. Element can have several classes, so need to use contains function.")
    }
    ,
    
    {
      code:"//*[contains(@class,'CLASS') and @id='ID']",description:tr("Find element by class and id.")
    },
    
    {
      code:"//div[@id='ID_PARENT']/div[@id='ID_CHILD']",description:tr("Find element which contains parent.")
    }
  ]
}
}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "XPATH_XML", help: 
{
  description: tr("Varibale, which will contain first element xml, which matches xpath query.")
}
}) %>

      <%= _.template($('#checkbox').html())({id: "Check", title: tr("Fail on error"), checked: true}) %>

    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Execute xpath query and find xml of first matching element.</div>
      <div class="tr tooltip-paragraph-fold">This action, unlike 'Xpath Get Text', searches for element xml(html code).</div>
      <div class="tr tooltip-paragraph-fold">If element won't be found, then thread will stop with fail message. If you want to continue thread, use 'Ignore errors' action or uncheck 'Fail on error'.</div>
      <div class="tr tooltip-paragraph-fold">Html to apply query is obtained from last http responce.</div>
      <div class="tr tooltip-paragraph-last-fold">If you want to apply xpath query to custom string, you need to use 'Xpath' module.</div>
    </div>

    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="httpclientxpathxmllist">
    <div class="container-fluid httpclientxpath">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Xpath Query"), default_selector: "string", disable_int:true,variants: ["//title<br/><span style='color:gray;font-size:small'>" + tr("Get page title") + "</span>","//a<br/><span style='color:gray;font-size:small'>" + tr("Get all links") + "</span>","//img<br/><span style='color:gray;font-size:small'>" + tr("Find image") + "</span>","//img/@src<br/><span style='color:gray;font-size:small'>" + tr("Find image source") + "</span>","//*[@id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by id") + "</span>","//*[contains(@class,'CLASS')]<br/><span style='color:gray;font-size:small'>" + tr("Find element by class") + "</span>","//*[contains(@class,'CLASS') and @id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by class and id") + "</span>","//div[@id='ID_PARENT']/div[@id='ID_CHILD']<br/><span style='color:gray;font-size:small'>" + tr("Find element which contains parent") + "</span>"], help: 
{
  description: tr("Xpath query"), examples:
  [
    {
      code:"//title",description:tr("Get page title.")
    },
    
    {
      code:"//a",description:tr("Get all links.")
    },
    
    {
      code:"//img",description:tr("Find image.")
    },
    
    {
      code:"//img/@src",description:tr("Find image source(image url).")
    }
    ,
    
    {
      code:"//*[@id='ID']",description:tr("Find element by id.")
    },
    
    {
      code:"//*[contains(@class,'CLASS')]",description:tr("Find element by class. Element can have several classes, so need to use contains function.")
    }
    ,
    
    {
      code:"//*[contains(@class,'CLASS') and @id='ID']",description:tr("Find element by class and id.")
    },
    
    {
      code:"//div[@id='ID_PARENT']/div[@id='ID_CHILD']",description:tr("Find element which contains parent.")
    }
  ]
}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "XPATH_XML_LIST", help: 
{
  description: tr("Varibale, which will contain list of all elements xml, which matches xpath query.")
}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Execute xpath query and find xml of all elements matching query.</div>
      
      <div class="tr tooltip-paragraph-fold">This action, unlike 'Xpath Get Text List', searches for elements xml(html code).</div>
      <div class="tr tooltip-paragraph-fold">Result of this action is list, you can process it with 'List' module.</div>
      <div class="tr tooltip-paragraph-fold">If element won't be found, then list will be empty.</div>
      <div class="tr tooltip-paragraph-fold">Html to apply query is obtained from last http responce.</div>
      <div class="tr tooltip-paragraph-last-fold">If you want to apply xpath query to custom string, you need to use 'Xpath' module.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>
  
  <script type="text/template" id="httpclientxpathtext">
    <div class="container-fluid httpclientxpath">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Xpath Query"), default_selector: "string", disable_int:true,variants: ["//title<br/><span style='color:gray;font-size:small'>" + tr("Get page title") + "</span>","//a<br/><span style='color:gray;font-size:small'>" + tr("Get all links") + "</span>","//img<br/><span style='color:gray;font-size:small'>" + tr("Find image") + "</span>","//img/@src<br/><span style='color:gray;font-size:small'>" + tr("Find image source") + "</span>","//*[@id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by id") + "</span>","//*[contains(@class,'CLASS')]<br/><span style='color:gray;font-size:small'>" + tr("Find element by class") + "</span>","//*[contains(@class,'CLASS') and @id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by class and id") + "</span>","//div[@id='ID_PARENT']/div[@id='ID_CHILD']<br/><span style='color:gray;font-size:small'>" + tr("Find element which contains parent") + "</span>"], help: 
{
  description: tr("Xpath query"), examples:
  [
    {
      code:"//title",description:tr("Get page title.")
    },
    
    {
      code:"//a",description:tr("Get all links.")
    },
    
    {
      code:"//img",description:tr("Find image.")
    },
    
    {
      code:"//img/@src",description:tr("Find image source(image url).")
    }
    ,
    
    {
      code:"//*[@id='ID']",description:tr("Find element by id.")
    },
    
    {
      code:"//*[contains(@class,'CLASS')]",description:tr("Find element by class. Element can have several classes, so need to use contains function.")
    }
    ,
    
    {
      code:"//*[contains(@class,'CLASS') and @id='ID']",description:tr("Find element by class and id.")
    },
    
    {
      code:"//div[@id='ID_PARENT']/div[@id='ID_CHILD']",description:tr("Find element which contains parent.")
    }
  ]
}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "XPATH_TEXT", help: 
{
  description: tr("Varibale, which will contain first element text, which matches xpath query.")
}}) %>

  <%= _.template($('#checkbox').html())({id: "Check", title: tr("Fail on error"), checked: true}) %>


    </div>

    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Execute xpath query and find text of first matching element.</div>
      <div class="tr tooltip-paragraph-fold">Result of this action is text. For example if element has &lt;div&gt;word&lt;/div&gt; markup, then its text is 'word'.</div>
      <div class="tr tooltip-paragraph-fold">If you want to get element markup, use 'Xpath Get Xml'.</div>
      <div class="tr tooltip-paragraph-fold">If element won't be found, then thread will stop with fail message. If you want to continue thread, use 'Ignore errors' action or uncheck 'Fail on error'.</div>
      <div class="tr tooltip-paragraph-fold">Html to apply query is obtained from last http responce.</div>
      <div class="tr tooltip-paragraph-last-fold">If you want to apply xpath query to custom string, you need to use 'Xpath' module.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>


  <script type="text/template" id="httpclientxpathtextlist">
    <div class="container-fluid httpclientxpath">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Xpath Query"), default_selector: "string", disable_int:true,variants: ["//title<br/><span style='color:gray;font-size:small'>" + tr("Get page title") + "</span>","//a<br/><span style='color:gray;font-size:small'>" + tr("Get all links") + "</span>","//img<br/><span style='color:gray;font-size:small'>" + tr("Find image") + "</span>","//img/@src<br/><span style='color:gray;font-size:small'>" + tr("Find image source") + "</span>","//*[@id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by id") + "</span>","//*[contains(@class,'CLASS')]<br/><span style='color:gray;font-size:small'>" + tr("Find element by class") + "</span>","//*[contains(@class,'CLASS') and @id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by class and id") + "</span>","//div[@id='ID_PARENT']/div[@id='ID_CHILD']<br/><span style='color:gray;font-size:small'>" + tr("Find element which contains parent") + "</span>"], help: 
{
  description: tr("Xpath query"), examples:
  [
    {
      code:"//title",description:tr("Get page title.")
    },
    
    {
      code:"//a",description:tr("Get all links.")
    },
    
    {
      code:"//img",description:tr("Find image.")
    },
    
    {
      code:"//img/@src",description:tr("Find image source(image url).")
    }
    ,
    
    {
      code:"//*[@id='ID']",description:tr("Find element by id.")
    },
    
    {
      code:"//*[contains(@class,'CLASS')]",description:tr("Find element by class. Element can have several classes, so need to use contains function.")
    }
    ,
    
    {
      code:"//*[contains(@class,'CLASS') and @id='ID']",description:tr("Find element by class and id.")
    },
    
    {
      code:"//div[@id='ID_PARENT']/div[@id='ID_CHILD']",description:tr("Find element which contains parent.")
    }
  ]
}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "XPATH_TEXT_LIST", help: 
{
  description: tr("Varibale, which will contain list of all elements text, which matches xpath query.")
}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Execute xpath query and find text of all elements matching query.</div>
      <div class="tr tooltip-paragraph-fold">This action searches for texts. For example if element has &lt;div&gt;word&lt;/div&gt; markup, then its text is 'word'.</div>

      <div class="tr tooltip-paragraph-fold">Result of this action is list, so you can process it with 'List' module.</div>
      <div class="tr tooltip-paragraph-fold">If element won't be found, then list will be empty.</div>
      <div class="tr tooltip-paragraph-fold">Html to apply query is obtained from last http responce.</div>
      <div class="tr tooltip-paragraph-last-fold">If you want to apply xpath query to custom string, you need to use 'Xpath' module.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>
  
  <script type="text/template" id="httpclientxpathcount">
    <div class="container-fluid httpclientxpath">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Xpath Query"), default_selector: "string", disable_int:true,variants: ["//title<br/><span style='color:gray;font-size:small'>" + tr("Get page title") + "</span>","//a<br/><span style='color:gray;font-size:small'>" + tr("Get all links") + "</span>","//img<br/><span style='color:gray;font-size:small'>" + tr("Find image") + "</span>","//img/@src<br/><span style='color:gray;font-size:small'>" + tr("Find image source") + "</span>","//*[@id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by id") + "</span>","//*[contains(@class,'CLASS')]<br/><span style='color:gray;font-size:small'>" + tr("Find element by class") + "</span>","//*[contains(@class,'CLASS') and @id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by class and id") + "</span>","//div[@id='ID_PARENT']/div[@id='ID_CHILD']<br/><span style='color:gray;font-size:small'>" + tr("Find element which contains parent") + "</span>"], help: 
{
  description: tr("Xpath query"), examples:
  [
    {
      code:"//title",description:tr("Get page title.")
    },
    
    {
      code:"//a",description:tr("Get all links.")
    },
    
    {
      code:"//img",description:tr("Find image.")
    },
    
    {
      code:"//img/@src",description:tr("Find image source(image url).")
    }
    ,
    
    {
      code:"//*[@id='ID']",description:tr("Find element by id.")
    },
    
    {
      code:"//*[contains(@class,'CLASS')]",description:tr("Find element by class. Element can have several classes, so need to use contains function.")
    }
    ,
    
    {
      code:"//*[contains(@class,'CLASS') and @id='ID']",description:tr("Find element by class and id.")
    },
    
    {
      code:"//div[@id='ID_PARENT']/div[@id='ID_CHILD']",description:tr("Find element which contains parent.")
    }
  ]
}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "XPATH_COUNT", help: 
{
  description: tr("This variable will be set to number of elements matching query."), examples:
  [
    {
      code:"0",description:tr("There are no elements which matches query.")
    },
    {
      code:"3",description:tr("There are 3 elements which matches query.")
    }
  ]
}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Execute xpath query and get number of element which matches.</div>
      <div class="tr tooltip-paragraph-fold">Html to apply query is obtained from last http responce.</div>
      <div class="tr tooltip-paragraph-last-fold">If you want to apply xpath query to custom string, you need to use 'Xpath' module.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>
  
  <script type="text/template" id="httpclientxpathexists">
    <div class="container-fluid httpclientxpath">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Xpath Query"), default_selector: "string", disable_int:true,variants: ["//title<br/><span style='color:gray;font-size:small'>" + tr("Get page title") + "</span>","//a<br/><span style='color:gray;font-size:small'>" + tr("Get all links") + "</span>","//img<br/><span style='color:gray;font-size:small'>" + tr("Find image") + "</span>","//img/@src<br/><span style='color:gray;font-size:small'>" + tr("Find image source") + "</span>","//*[@id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by id") + "</span>","//*[contains(@class,'CLASS')]<br/><span style='color:gray;font-size:small'>" + tr("Find element by class") + "</span>","//*[contains(@class,'CLASS') and @id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by class and id") + "</span>","//div[@id='ID_PARENT']/div[@id='ID_CHILD']<br/><span style='color:gray;font-size:small'>" + tr("Find element which contains parent") + "</span>"], help: 
{
  description: tr("Xpath query"), examples:
  [
    {
      code:"//title",description:tr("Get page title.")
    },
    
    {
      code:"//a",description:tr("Get all links.")
    },
    
    {
      code:"//img",description:tr("Find image.")
    },
    
    {
      code:"//img/@src",description:tr("Find image source(image url).")
    }
    ,
    
    {
      code:"//*[@id='ID']",description:tr("Find element by id.")
    },
    
    {
      code:"//*[contains(@class,'CLASS')]",description:tr("Find element by class. Element can have several classes, so need to use contains function.")
    }
    ,
    
    {
      code:"//*[contains(@class,'CLASS') and @id='ID']",description:tr("Find element by class and id.")
    },
    
    {
      code:"//div[@id='ID_PARENT']/div[@id='ID_CHILD']",description:tr("Find element which contains parent.")
    }
  ]
}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "XPATH_EXISTS", help: 
{
  description: tr("This variable will be to true or false depending if there is element, which matches query."), examples:
  [
    {
      code:"true",description:tr("There is at leaset one element which matches query.")
    },
    {
      code:"false",description:tr("There are no elements which matches query.")
    }
  ]
}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Check if there is at least one element matching xpath query.</div>
      <div class="tr tooltip-paragraph-fold">Html to apply query is obtained from last http responce.</div>
      <div class="tr tooltip-paragraph-last-fold">If you want to apply xpath query to custom string, you need to use 'Xpath' module.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="if">
    <div class="container-fluid if">
      <%= _.template($('#input_constructor').html())({id:"IfExpression", description:tr("If expression"), default_selector: "expression", disable_int:true, disable_string:true, help: {description: tr("If condition. This field can contain any JavaScript value including variables and resources."), examples:[{code:"true",description:tr("Always true.")},{code:"false",description:tr("Always false.")},{code:"[[VARIABLE]] == \"val\"",description:tr("Executes only if VARIABLE is equal to \"val\"")},{code:"[[VARIABLE]].indexOf(\"val\")<0",description:tr("Executes only if VARIABLE don't contain substring \"val\"")}]}}) %>
      <%= _.template($('#checkbox').html())({id: "IfElse", title: tr("Add else block")}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Check specified condition, if it's true execute some action sequence, if it's false execute another action sequence. Finally proceed with next actions.</div>
      <div class="tr tooltip-paragraph-fold">Even though description of this task may not sound very exciting, it is used very often to build custom logic.</div>
      <div class="tr tooltip-paragraph-fold">For example, if you want to check if element exists on page and depending on that condition make a log or stop a thread.</div>
      <div class="tr tooltip-paragraph-fold">It is very important to understand, that if expression is a custom JavaScript code. Here are some valid examples. 10 &gt; 2 is always true, "text".indexOf("te") &gt;= 0 is also true, while "text".indexOf("z") &gt; 0 is false.</div>
      <div class="tr tooltip-paragraph-fold">Expression also may contain variables and resources, their declarations are replaced with actual values, for example, [[PAGE_SOURCE]].length &gt; 100 is same "&lt;html&gt;&lt;body&gt;...".length &gt; 100. And some other valid examples: [[USER_ID]] == 123, {{login}} + "@gmail.com".</div>
      <div class="tr tooltip-paragraph-fold">You may use expression constructor in case if you don't know JavaScript. To do that click on "if expression" field and choose "create value in visual constructor".</div>
      <div class="tr tooltip-paragraph-fold">If "if expression" will be resolved to non-boolean type, its type will be converted to boolean. For example, number 100 will be converted to true, while 0 will be converted to false. Check JavaScript manual to understand how types are converted.</div>
      <div class="tr tooltip-paragraph-fold">In case if expression is false alternative action sequence may be specified through else checkbox.</div>
      <div class="tr tooltip-paragraph-last-fold">After action is created you need to add actions inside it, this actions will be executed only if condition is true.</div>
    </div>
    <%= _.template($('#back').html())({action:"add", visible:false, wiki: "is_it_possible_to_execute_certain_action_depending_on_condition_if_statement"}) %>
  </script>

  <script type="text/template" id="while">
    <div class="container-fluid while">
      <%= _.template($('#input_constructor').html())({id:"WhileExpression", description:tr("While expression"), default_selector: "expression", disable_int:true, disable_string:true, help: {description: tr("If condition. This field can contain any JavaScript value including variables and resources."), examples:[{code:"true",description:tr("Always true.")},{code:"false",description:tr("Always false.")},{code:"[[VARIABLE]] == \"val\"",description:tr("Continues only if VARIABLE is equal to \"val\"")},{code:"[[VARIABLE]].indexOf(\"val\")<0",description:tr("Continues only if VARIABLE don't contain substring \"val\"")}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Execute defined list of actions while some condition is true.</div>
      <div class="tr tooltip-paragraph-fold">For example, take element from list and post it to the site, then delete element and repeat all these actions while list is not empty.</div>
      <div class="tr tooltip-paragraph-fold">If you know how many times loop should be repeated, then it is better to use for loop.</div>
      <div class="tr tooltip-paragraph-fold">If you want to iterate over list elements it is better to use foreach action.</div>
      <div class="tr tooltip-paragraph-fold">Be careful, if "while expression" will always be true then you may end up with infinite loop which may be the reason of problems in your script.</div>
      <div class="tr tooltip-paragraph-fold">While expression parameter could be any JavaScript code. It may also contain variables and resources. For example, [[POST_LENGTH]] &gt; 0. Or [[LIST]].length &gt; 0.</div>
      <div class="tr tooltip-paragraph-fold">Loop may be finished with break action at any time. If you call break action this interrupts loop immediately. A common practice would be to put break action inside if.</div>
      <div class="tr tooltip-paragraph-fold">Setting "while expression" to true will make loop run infinite amount of times, and this is necessary to finish it with break action.</div>
      <div class="tr tooltip-paragraph-fold">There is a special variable called [[CYCLE_INDEX]] available inside while loop and it always contains current iteration index and always have number type.</div>
      <div class="tr tooltip-paragraph-last-fold">Summarizing all the above, when BAS encounters while loop it checks condition, if it's true execute loop body then checks condition again and so on. It also updates [[CYCLE_INDEX]] on each iteration.</div>

    </div>
    <%= _.template($('#back').html())({action:"add", visible:false, wiki: "is_it_possible_to_use_loops"}) %>
  </script>

  <script type="text/template" id="for">
    <div class="container-fluid for">
      <%= _.template($('#input_constructor').html())({id:"ForFrom", description:tr("For from value"), default_selector: "expression", disable_string:true, help: {description: tr("Lower bound as integer value.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"ForTo", description:tr("For to value"), default_selector: "expression", disable_string:true, help: {description: tr("Upper bound as integer value.")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Execute defined list of actions specified number of times.</div>
      <div class="tr tooltip-paragraph-fold">You can define lower and upper bounds, for example, if you want to scroll page for three times, you should define lower bound as 1 and upper bound of 3.</div>
      <div class="tr tooltip-paragraph-fold">If you want to parse users on second page, need to set lower bound as 10 and upper bound as 20.</div>
      <div class="tr tooltip-paragraph-fold">Bounds also may be variables. Consider following example, you need to iterate over all pages and you don't know total amount of them. First you need to parse page amount and put it to variable and then use for loop with lower bound as one and upper bound equals to that variable.</div>
      <div class="tr tooltip-paragraph-fold">For loop may be interrupted at any time with break action. A common practice would be to put break action inside if.</div>
      <div class="tr tooltip-paragraph-fold">There is a special variable called [[CYCLE_INDEX]] available inside for loop and it always contains current iteration index and has number type.</div>
      <div class="tr tooltip-paragraph-last-fold">Summarizing all the above, when BAS encounters for loop it searches for loop body and repeat it number of times equal difference between upper and lower bound and update [[CYCLE_INDEX]] on each iteration.</div>
    </div>
    <%= _.template($('#back').html())({action:"add", visible:false, wiki: "is_it_possible_to_use_loops"}) %>
  </script>


  <script type="text/template" id="ignoreerrors">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Ignore errors inside one or several actions and continue script execution further.</div>
      <div class="tr tooltip-paragraph-fold">If something wrong will happen during action execution, BAS will stop thread immediately and assign fail result to it. This is not very convenient, because sometimes script must recover from error. That's where "ignore errors" comes in handy.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Usage is very simple, just wrap one or several actions inside ignore errors block. Following example will ignore all page load errors</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=ignoreerrorssimple.png');return false">screen</a>)</div>
      <div class="tooltip-paragraph-fold"><span class="tr">"Ignore errors" can contain several actions, if any of them will fail, all following will be skipped</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=ignoreerrorscomplex.png');return false">screen</a>)</div>
      <div class="tr tooltip-paragraph-fold">You can check [[WAS_ERROR]] variable, to detect if there was error during "Ignore Errors" block.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">You can also obtain error string from [[LAST_ERROR]] variable</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=checkerror.png');return false">screen</a>)</div>
      <div class="tr tooltip-paragraph-fold">Wrap ignore errors into while loop to run certain actions until all of them will be executed successfully.</div>
      <div class="tr tooltip-paragraph-last-fold">Using several actions inside ignore errors block could be very convenient, for example, you have split script in several stages: login, following, posting, then you can wrap each stage inside ignore errors block. If something goes wrong during following, then thread won't be stopped, user will get error message that something wrong with following, but there is no need to relogin with this account and script can try do posting.</div>
    </div>
    <%= _.template($('#back').html())({action:"add", visible:false, wiki: "how_to_catch_errors"}) %>
  </script>

  <script type="text/template" id="foreach">
    <div class="container-fluid foreach">
      <%= _.template($('#input_constructor').html())({id:"ForArray", description:tr("Foreach Array"), default_selector: "expression", disable_string:true, disable_int:true, help: {description: tr("This field contains list, list could be created with \"create list\" action, or obtain it through \"resources to a list\" action, also \"read file to list\" returns list. Besides variables you can put there array directly, for example, [4, 5, 6]. You can't put resource in this field, because resource is a string and this field requires list."), examples:[{code:"[4, 5, 6]",description:tr("Define list directly.")},{code:"[[SOME_LIST]]",description:tr("Get list from the variable.")}]}
}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Execute defined actions for every list element. Works only for lists.</div>
      <div class="tr tooltip-paragraph-fold">This action takes list as input parameter, then applies all child actions to each list element.</div>
      <div class="tr tooltip-paragraph-fold">For example, you have a list with all users which needs to be followed and you can achieve this by putting user list as input parameter of foreach action, and also by putting correct action sequence to follow user(probably action which press on follow button on site) as a child of foreach loop.</div>
      <div class="tr tooltip-paragraph-fold">There is a special variable called [[FOREACH_DATA]] which is available only inside foreach loop and which holds current list element.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Here is the most basic example of using foreach action - iterate over some list and an output every element to the log</span>. (<a href="#" onclick="BrowserAutomationStudio_OpenUrl('http://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=foreachexample.png');return false" class="tr">screen</a>)</div>
      <div class="tr tooltip-paragraph-fold">To create or process list use list module.</div>
      <div class="tr tooltip-paragraph-fold">Input parameter "foreach array" holds any JavaScript code including variables and resources. So besides variables you can put there array directly, for example, [4, 5, 6].</div>
      <div class="tr tooltip-paragraph-last-fold">Summarising all the above, when BAS counters foreach loop it searches for loop body and repeat it for each list element, it also changes [[FOREACH_DATA]] on each loop iteration.</div>
    </div>
    <%= _.template($('#back').html())({action:"add", visible:false}) %>
  </script>

  <script type="text/template" id="setvariable">
    <div class="container-fluid setvariable">
      <%= _.template($('#variable_constructor').html())({id:"SetVariableName", description:tr("Name of variable"), default_variable: "NEW_VARIABLE", help: {description: tr("The name of the variable to be created or modified.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"SetVariableValue", description:tr("Value of variable"), default_selector: "string", help: {description: tr("Variable value"), examples:[{code:"any string",description:tr("Any string will work")},{code:"[[LOGIN]]:[[PASSWORD]]",description:tr("Concat 2 variables")},{code:"10",description:tr("Any number. Works with int type")},{code:"1+1",description:tr("Any javascript code. Works with expression type")}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Create new or update existing variable and set its value.</div>
      <div class="tr tooltip-paragraph-fold">Variables are visible only inside current thread, use global variables if you want them to be visible inside whole script.</div>
      <div class="tr tooltip-paragraph-fold">Variable name should be in uppercase and should describe its purpose. Naming variable [[A1]] or [[A2]] could make your script very hard to read.</div>
      <div class="tr tooltip-paragraph-fold">You can use that variable later inside any field by putting variable name into double square brackets like this: [[NEW_VARIABLE]]. You don't need to type it manually, just click on any field, than on "Insert variable" and finally select specific variable.</div>
      <div class="tr tooltip-paragraph-fold">"Value of variable" parameter by default is a string, but may also contain other variables, like this [[LOGIN]]@gmail.com, or resources. So this action also may concat strings([[PART1]][[PART2]]), update them, etc.</div>
      <div class="tr tooltip-paragraph-fold">By default "Value of variable" parameter is a string, but you can change its type to int, so variable will be number.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Setting type to expression will set variable to result of JavaScript execution. This is very powerful mechanism. For example, to get current timestamp input Date.now() into "Value of variable" parameter</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=gettimestamp.png');return false">screen</a>)</div>

      <div class="tr tooltip-paragraph-fold">You can use JavaScript functions on BAS variables, for example, [[LINE]].split(":")[0] will split string into two pieces and take first.</div>
      <div class="tr tooltip-paragraph-last-fold">If you want to set multiline variable, use template action.</div>

    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "how_to_use_variables"}) %>
  </script>


  <script type="text/template" id="incvariable">
    <div class="container-fluid">
      <%= _.template($('#variable_constructor').html())({id:"SetVariableName", description:tr("Name of variable"), default_variable: "", help: {description: tr("Variable name. This variable will be changed.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"IncVariableValue", description:tr("Increase variable value"), default_selector: "int", min_number: -9999999, value_number: 1, help: {description: tr("The integer to which the variable will be incremented. If the value has a non-numeric type, then it will be converted."), examples:[{code:"1",description:tr("Increment")},{code:"-1",description:tr("Decrement")},{code:"0",description:tr("Convert variable to integer")}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Increase variable by the specified value.</div>
      <div class="tr tooltip-paragraph-fold">In other words, this action means [[VARIABLE]] = [[VARIABLE]] + num</div>
      <div class="tr tooltip-paragraph-fold">This action assumes that variable has number type, if it doesn't, type of variable will be automatically converted.</div>
      <div class="tr tooltip-paragraph-fold">Parameter "Increase variable value" could be negative, in that case variable will be decreased.</div>
      <div class="tr tooltip-paragraph-last-fold">Parameter "Increase variable value" also could be zero, this will only convert variable to number type.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>


  <script type="text/template" id="incglobalvariable">
    <div class="container-fluid">
      <%= _.template($('#variable_constructor').html())({id:"SetVariableName", description:tr("Name of variable"), default_variable: "", enable_globals:true, disable_locals: true, help: {description: tr("Variable name. This variable will be changed.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"IncVariableValue", description:tr("Increase variable value"), default_selector: "int", min_number: -9999999, value_number: 1, help: {description: tr("The integer to which the variable will be incremented. If the value has a non-numeric type, then it will be converted."), examples:[{code:"1",description:tr("Increment")},{code:"-1",description:tr("Decrement")},{code:"0",description:tr("Convert variable to integer")}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Increase global variable by the specified value.</div>
      <div class="tr tooltip-paragraph-fold">In other words, this action means [[GLOBAL:VARIABLE]] = [[GLOBAL:VARIABLE]] + num</div>
      <div class="tr tooltip-paragraph-fold">This action assumes that global variable has number type, if it doesn't, type of variable will be automatically converted.</div>
      <div class="tr tooltip-paragraph-fold">Parameter "Increase variable value" could be negative, in that case variable will be decreased.</div>
      <div class="tr tooltip-paragraph-last-fold">Parameter "Increase variable value" also could be zero, this will only convert variable to number type.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="url">
    <div class="container-fluid">
      <%= _.template($('#variable_constructor').html())({id:"SaveUrl", description:tr("Variable To Save"), default_variable: "CURRENT_URL", help: {description: tr("Variable where browser url will be saved.")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get current url from browser address bar.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "how_to_get_current_url"}) %>
  </script>

  <script type="text/template" id="screen">
    <div class="container-fluid">
      
      <%= _.template($('#variable_constructor').html())({id:"CursorX", description:tr("Cursor relative position X"), default_variable: "CURSOR_RELATIVE_X", help: {description: tr("Current cursor coordinates relative to screen position.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"CursorY", description:tr("Cursor relative position Y"), default_variable: "CURSOR_RELATIVE_Y", help: {description: tr("Current cursor coordinates relative to screen position.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"CursorAbsoluteX", description:tr("Cursor absolute position X"), default_variable: "CURSOR_ABSOLUTE_X", help: {description: tr("Current cursor coordinates relative to web page edge.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"CursorAbsoluteY", description:tr("Cursor absolute position Y"), default_variable: "CURSOR_ABSOLUTE_Y", help: {description: tr("Current cursor coordinates relative to web page edge.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"ScrollX", description:tr("Browser scroll X"), default_variable: "SCROLL_X", help: {description: tr("Current scroll value.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"ScrollY", description:tr("Browser scroll Y"), default_variable: "SCROLL_Y", help: {description: tr("Current scroll value.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Width", description:tr("Browser width"), default_variable: "BROWSER_WIDTH", help: {description: tr("Current browser viewport width, this doesn't include space which takes adress bar or native window. Works same as window.innerWidth.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Height", description:tr("Browser height"), default_variable: "BROWSER_HEIGHT", help: {description: tr("Current browser viewport height, this doesn't include space which takes adress bar or native window. Works same as window.innerHeight.")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get current browser size, cursor and scroll position.</div>
      <div class="tr tooltip-paragraph-fold">In order to change browser resolution, use "Resize" action.</div>
      <div class="tr tooltip-paragraph-fold">In order to change current scroll, use "Scroll" action.</div>
      <div class="tr tooltip-paragraph-last-fold">In order to change cursor position, use "Move on element" action.</div>

    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="xml">
    <div class="container-fluid">
      <%= _.template($('#path').html())({selector:selector}) %>
      <%= _.template($('#variable_constructor').html())({id:"SaveXml", description:tr("Variable To Save"), default_variable: "SAVED_XML", help: {description: tr("This variable will contain html source of selected element as string")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get element html code and save it to variable.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, name: tr("Get Element Content")}) %>
  </script>

  <script type="text/template" id="linkurl">
    <div class="container-fluid xml">
      <%= _.template($('#path').html())({selector:selector}) %>
      <%= _.template($('#variable_constructor').html())({id:"LinkURL", description:tr("Variable To Save"), default_variable: "LINK_URL", help: {description: tr("This variable will contain url of the nearest link after execution")}}) %>
    </div>

    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get link URL and save it to variable.</div>
      <div class="tr tooltip-paragraph-fold">If element which matches selector is not link, nearest link will be selected.</div>
      <div class="tr tooltip-paragraph-fold">You can always tweak selection by using up and down keys. This is useful if several elements holds same coordinates.</div>
      <div class="tr tooltip-paragraph-fold">In case if link nearest to selected element can't be found, empty string will be returned.</div>

      <div class="tr tooltip-paragraph-last-fold">This action looks for "href" attribute on link element. Sometimes it may not be present, and sites processes link clicking by using javascript. In that case following action won't give any meaningful result.</div>
    </div>

    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, name: tr("Get link URL")}) %>
  </script>

  <script type="text/template" id="coordinates">
    <div class="container-fluid">
      <%= _.template($('#path').html())({selector:selector}) %>
      <%= _.template($('#variable_constructor').html())({id:"X", description:tr("Relative X"), default_variable: "RELATIVE_X", help: {description: tr("Integer value, offset relative to current window position.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Y", description:tr("Relative Y"), default_variable: "RELATIVE_Y", help: {description: tr("Integer value, offset relative to current window position.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"AbsoluteX", description:tr("Absolute X"), default_variable: "ABSOLUTE_X", help: {description: tr("Integer value, offset relative to web page edge.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"AbsoluteY", description:tr("Absolute Y"), default_variable: "ABSOLUTE_Y", help: {description: tr("Integer value, offset relative to web page edge.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Width", description:tr("Width"), default_variable: "WIDTH", help: {description: tr("Integer value, element width.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Height", description:tr("Height"), default_variable: "HEIGHT", help: {description: tr("Integer value, element height.")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get coordinates of element relative to current window position.</div>
      <div class="tr tooltip-paragraph-fold">For example, if element coordinates is 200,200 and window position is 50,50, then this action will return 150, 150. In case if window position is 0,0, than this action will return absolute element coordinates.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true,name:tr("Get Coordinates")}) %>
  </script>

  <script type="text/template" id="script">
    <div class="container-fluid script">
      <%= _.template($('#path').html())({selector:selector}) %>
      <%= _.template($('#variable_constructor').html())({id:"SaveScript", description:tr("Variable To Save"), default_variable: "SAVED_SCRIPT_RESULT", help: {description: tr("Variable with result of javascript execution. Type of variable is always string, if expression is evaluated to other type, it will be converted. If exception will occur during script execution, than empty string will return.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"ScriptValue", description:tr("Script Text"), default_selector: "string", disable_int:true, help: {description: tr("Script that will be executed on found element. You can use self variable, which points to found element. Type of that value should be string. If you set type to expression, than script will be evaluated in BAS context first and than result of that evaluation will be send to browser. Using expression is usefull if you want to create script dynamically, but you need to use string type in most cases."), examples:[{code:"self.value",description:tr("Get input field value")},{code:"self.click()",description:tr("Pure javascript click")}, {code:"self.getBoundingClientRect().top",description:tr("Get element top coordinate")}, {code:"var text = self.innerHTML; text.match(/\d+/)[0]",description:tr("Extract digits from element text.")}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Find element and execute javascript on it.</div>
      <div class="tr tooltip-paragraph-fold">This action is deprecated. It is recommended to use the new "Execute Javascript On Element" action. Click on any element and select "Execute Javascript On Element" in order to use it.</div>
      <div class="tr tooltip-paragraph-fold">Use self variable, which points to selected element.</div>
      <div class="tr tooltip-paragraph-fold">document, window and other browser javascript objects are available.</div> 
      <div class="tr tooltip-paragraph-fold">Action works exactly the same as if you input code into browser console and output result into variable.</div>
      <div class="tr tooltip-paragraph-fold">You can also use resources and variables here but only in read mode. Following code will work self.getAttribute([[ATTRIBUTE]]), but you can't do like this <strike>[[RESULT]] = self.getAttribute([[ATTRIBUTE]])</strike>.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, name: tr("Execute Javascript On Element (deprecated)"), wiki: "how_to_execute_javascript_on_page_and_save_result"}) %>
  </script>

  <script type="text/template" id="browserscript">
    <div class="container-fluid">
      <%= _.template($('#path').html())({selector:selector}) %>
      <span data-preserve="true" data-preserve-type="constr" data-preserve-id="Code">
        <div id="Code" class="browser-code-editor" data-is-code-editor="true" style="height: calc(100vh - 185px);margin-left: 16px;margin-right: 15px;" />
      </span>
      <%= "<s" + "cript>" %>
        window.Code = {Editor: null, InitialValue: ""}
    
        require(['vs/editor/editor.main'], function() {
          window.Code.Editor = createCodeEditor(document.getElementById('Code'), {
            value: window.Code.InitialValue
          });
        });
      <%= "</" + "script>" %>
      <div style="text-align: center">
        <a tabindex="-1" href="#" data-toggle="modal" data-result-target="#Code" class="var"  disable_globals="true">
          <span style="align-items: center; display: flex !important; justify-content: center;margin-top:5px;">

            <svg class="dropdown-icon" width="16" height="16"  viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"  style="margin-right:10px">
              <path d="M7.5 12h1V9.5H11v-1H8.5V6h-1v2.5H5v1h2.5V12z" fill="#337ab7" />
              <path d="M.5 2v12h15V2H.5zm14 11h-13V5h13v8z" fill="#337ab7" />
            </svg>
            <span class="tr">Insert variable</span>
          </span>
        </a>
      </div>
      <span class="short-description tr">Find element and execute javascript on it.</span>
    </div>
    <%= _.template($('#back').html())({ action: "executeandadd", visible: true, use_timeout: true, use_modal_template:true, name: tr("Execute Javascript On Element"), modal_code_id: "custom-help-browserscriptelement-" + (_K || "en") }) %>
    <script>
      $("#IfElementMissingSettingsCheck").change(function() {
        if(this.checked)
        {
          $(".browser-code-editor").css("height", "calc(100vh - 245px)")
        }else
        {
          $(".browser-code-editor").css("height", "calc(100vh - 185px)")
        }
      })
    </script>
  </script>

  <script type="text/template" id="text">
    <div class="container-fluid text">
      <%= _.template($('#path').html())({selector:selector}) %>
      <%= _.template($('#variable_constructor').html())({id:"SaveText", description:tr("Variable To Save"), default_variable: "SAVED_TEXT", help: {description: tr("This variable will contain text of selected element as string")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get element text, visible on screen.</div>
      <div class="tr tooltip-paragraph-fold">For example, if you apply that action to whole page, you will get page text without markup.</div>
      <div class="tr tooltip-paragraph-fold">This action can be applied to textarea or input to get its value.</div> 
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, name: tr("Get Element Text")}) %>
  </script>

  <script type="text/template" id="clickelement">
    <div class="container-fluid clickelement">
      <%= _.template($('#path').html())({selector:selector}) %>
      <span class="disable-if-find-by-image">
        <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), smaller_fonts: true, description: tr("")}) %>
          <%= _.template($('#checkbox').html())({id: "Check", title: tr("Disable mouse emulation."), additional_classes: "disable-if-find-by-image", help: {description: tr("Disabling mouse emulation will make this action identical to executing click javascript function on element.")}}) %>
        <%= _.template($('#block_end').html())() %>
      </span>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Click on given element.</div> 
      <div class="tr tooltip-paragraph-fold">Target coordinates are always random but they are located close to center.</div>
      <% if(_SelectorModel.get("is_image") == false){ %>
        <div class="tr tooltip-paragraph-fold">Disabling mouse emulation will make this action identical to executing click javascript function on element.</div>
      <% } %>
      <div class="tr tooltip-paragraph-fold">If element is not visible, page will be scrolled.</div>
      <div class="tr tooltip-paragraph-fold">If you are clicking on some element, which causes page load, you should select "wait for full page load". Using this option will make browser wait for page load after click.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", use_waiter:true,use_timeout: true, visible:true, name: tr("Click On Element"), wiki: "how_to_click_on_buttons_and_links"}) %>
  </script>

  <script type="text/template" id="moveelement">
    <div class="container-fluid moveelement">
      <%= _.template($('#path').html())({selector:selector}) %>
    </div>
    
    <%= _.template($('#movefields').html())({}) %>
    <%= _.template($('#emulationfields').html())({}) %>
    <div class="tooltipinternal ">
      <div class="tr tooltip-paragraph-first-fold">Move mouse pointer on element.</div> 
      <div class="tr tooltip-paragraph-fold">Target coordinates are always random but they are located close to center.</div>
      <div class="tr tooltip-paragraph-fold">If element is not visible, page will be scrolled.</div>
      <div class="tr tooltip-paragraph-fold">Mouse move trajectory is always random and reminds one made by human, you can twaek move parameters with settings button located near cancel.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, use_move: true, use_emulation: true, name: tr("Move On Element"), wiki: "how_to_click_on_buttons_and_links"}) %>
  </script>

  <script type="text/template" id="mousesettings">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"Speed", description:tr("Speed"), default_selector: "expression", disable_int:true, disable_string:true, value_string: "100", help: {description: tr("Mouse movement speed as floating point value, if you change this, don't forget to change gravity and deviation proportionally.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Gravity", description:tr("Gravity"), default_selector: "expression", disable_int:true, disable_string:true, value_string: "6", help: {description: tr("Floating point value which sets force of cursor attraction to strait line between starting and ending points. If you set this value too big, cursor will move by straight line, if you set it too low, cursor will move chaotically on the screen.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Deviation", description:tr("Deviation"), default_selector: "expression", disable_int:true, disable_string:true, value_string: "2.5", help: {description: tr("Floating point value which sets force of cursor deviation from strait line between starting and ending points. Think of it as a wind, which blows cursor away from the line - the shortest path between two points.")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">This is mouse movement settings. You set it either globally(through this action) or for each action individually by clicking on settings icon near cancel button inside any action, that uses mouse.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="notification">
    <div class="container-fluid dragelement">
     <%= _.template($('#input_constructor').html())({id:"AllowNotifications", description:tr("Allow notifications"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true", "false"], help: {description: tr("Allow or deny notifications."), examples:[{code:"true",description:tr("Always allow notification for all subsequent requests.")},{code:"false",description:tr("Always deny notification for all subsequent requests.")}]}}) %>
    </div>
    <div class="tooltipinternal ">
      <div class="tr tooltip-paragraph-first-fold">Allow or deny browser notifications.</div> 
      <div class="tooltip-paragraph-fold"><span class="tr">In a normal browser notifications are displayed on a user desktop. Before start receiving them user must enable notifications. Using this action is the same as enabling or disabling notifications depending on input parameter.</span> <a href="#" onclick="BrowserAutomationStudio_OpenUrl('http://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=allownotifications.png');return false" class="tr">screen1</a>, <a href="#" onclick="BrowserAutomationStudio_OpenUrl('http://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=notificationexample.png');return false" class="tr">screen2</a>. </div>
      <div class="tr tooltip-paragraph-fold">By default notifications are disabled.</div>
      <div class="tr tooltip-paragraph-fold">If you want to enable notifications only for certain sites, use this action several times before each site is loaded.</div>
      <div class="tr tooltip-paragraph-fold">This action must be called before any page which shows notifications is loaded.</div>
      <div class="tr tooltip-paragraph-last-fold">IMPORTANT: Notifications are often used together with service workers and service worker works only with profiles enabled. So you may want to use local profile together with this action.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="mouseclicksettings">
    <div class="container-fluid">
      <%= _.template($('#combobox').html())({id: "Select", title: tr("Mouse click type"), items: [
        {value: "left", "name": tr("Left click"), selected: true},
        {value: "right", "name": tr("Right click")},
        {value: "double", "name": tr("Double click")},
      ]
      }) %>
    </div>
  </script>

  <script type="text/template" id="browsersettings">
    <div class="container-fluid">

      <%= _.template($('#space').html())({}) %>

      <%= _.template($('#header').html())({name:tr("Components")}) %>

     
       <%= _.template($('#input_constructor').html())({id:"Widevine", description:tr("Widevine"), default_selector: "string", disable_int:true, value_string: "", variants: ["enable", "disable"], help: { description: tr("Enable or disable Widevine plugin."), examples:[{code:"enable",description:tr("Use Widevine")},{code:"disable",description:tr("Don't use Widevine")}, {code:tr("Empty string"),description:tr("Don't change this setting")}]}}) %>
 
       <%= _.template($('#input_constructor').html())({id:"SafeBrowsing", description:tr("Safe Browsing"), default_selector: "string", disable_int:true, value_string: "", variants: ["enable", "disable"], help: { description: tr("Enable Safe Browsing. It is technology embedded in Chrome, helps to protect users from malicious web sites. Its absence can be detected."), examples:[{code:"enable",description:tr("Enable Safe Browsing")},{code:"disable",description:tr("Disable Safe Browsing")}, {code:tr("Empty string"),description:tr("Don't change this setting")}]}}) %>
      
       <%= _.template($('#input_constructor').html())({id:"Components", description:tr("Components"), default_selector: "string", disable_int:true, value_string: "", variants: ["enable", "disable"], help: { description: tr("Enable Chrome components. Increase profile size, but its absence can be detected."), examples:[{code:"enable",description:tr("Enable components")},{code:"disable",description:tr("Disable components")}, {code:tr("Empty string"),description:tr("Don't change this setting")}]}}) %>


       <%= _.template($('#space').html())({}) %><%= _.template($('#line').html())({}) %><%= _.template($('#space').html())({}) %>

      <%= _.template($('#header').html())({name:tr("WebRTC")}) %>

      <%= _.template($('#input_constructor').html())({id:"Webrtc", description:tr("WebRTC"), default_selector: "string", disable_int:true, value_string: "", variants: ["enable", "disable", "replace"], help: { description: tr("WebRTC may show your real ip even if you are using proxy"), examples:[{code:"enable",description:tr("Use WebRTC")},{code:"disable",description:tr("Don't use WebRTC")},{code:"replace",description:tr("Replace ips exposed by WebRTC with values from 'WebRTC ip list' field.")}, {code:tr("Empty string"),description:tr("Don't change this setting")}]}}) %>

      <%= _.template($('#input_constructor').html())({id:"WebrtcIps", description:tr("WebRTC ip list"), default_selector: "string", disable_int:true, disable_editor:true, disable_string:true, use_textarea:true, size: 8, disable_type_chooser:true,textarea_height:60, help: {description: tr("Replace ips exposed by WebRTC with values from this field. Works only if 'WebRTC' parameter is set to 'replace'. Each line must contain single ip. This setting is for debugging purposes only, the proper way to set is using 'Proxy' action."), examples:[{code:"192.168.0.1",description:tr("Local address")},{code:"142.1.2.3",description:tr("Remote address")},{code:"Clear",description:tr("Remove all ips")},{code:tr("Empty string"),description:tr("Don't change")}]}}) %>


      <%= _.template($('#space').html())({}) %><%= _.template($('#line').html())({}) %><%= _.template($('#space').html())({}) %>

      <%= _.template($('#header').html())({name:tr("Canvas")}) %>

      <%= _.template($('#info').html())({description: `<span class="tr">Use <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://fp.bablosoft.com'); return false;">FingerprintSwitcher</a> service and <a href="#!/FingerprintSwitcher_Get">Get Fingerprint</a> action to add noise to canvas.</span>`, color: "gray"}) %>
      

      <%= _.template($('#input_constructor').html())({id:"Canvas", description:tr("Canvas"), default_selector: "string", disable_int:true, value_string: "", variants: ["enable", "disable", "noise"], help: { description: tr("Canvas is html element with graphics like: shapes, images, text, etc. Different browsers and operation systems render canvas content slightly different. These differences may be exploited by sites to identify you among other users. BAS allows you protect you by disabling canvas or add custom noise to canvas content."), examples:[{code:"enable",description:tr("Use canvas")},{code:"disable",description:tr("Don't use canvas")},{code:"noise",description:tr("Add random noise to canvas. For debug purpose only, use FingerprintSwitcher to change it.")}, {code:tr("Empty string"),description:tr("Don't change this setting")}]}}) %>

      
      <%= _.template($('#input_constructor').html())({id:"CanvasNoise", description:tr("Canvas noise pattern"), default_selector: "string", disable_int:true, value_string: "", help: { description: tr("This setting is for debugging purposes only, the proper way to set is using FingerprintSwitcher")}}) %>


      <%= _.template($('#space').html())({}) %><%= _.template($('#line').html())({}) %><%= _.template($('#space').html())({}) %>

      <%= _.template($('#header').html())({name:tr("WebGL")}) %>

      <%= _.template($('#info').html())({description: `<span class="tr">Use <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://fp.bablosoft.com'); return false;">FingerprintSwitcher</a> service and <a href="#!/FingerprintSwitcher_Get">Get Fingerprint</a> action to add noise to WebGL.</span>`, color: "gray"}) %>


      <%= _.template($('#input_constructor').html())({id:"Webgl", description:tr("WebGL"), default_selector: "string", disable_int:true, value_string: "", variants: ["enable", "disable", "noise"], help: { description: tr("WebGl also may identify you among other users in pretty same ways as canvas."), examples:[{code:"enable",description:tr("Use WebGL")},{code:"disable",description:tr("Don't use WebGL")},{code:"noise",description:tr("Add random noise to WebGL picture. For debug purpose only, use FingerprintSwitcher to change it.")}, {code:tr("Empty string"),description:tr("Don't change this setting")}]}}) %>
      

      <%= _.template($('#input_constructor').html())({id:"WebglNoise", description:tr("WebGL noise pattern"), default_selector: "string", disable_int:true, value_string: "", help: { description: tr("This setting is for debugging purposes only, the proper way to set is using FingerprintSwitcher")}}) %>

      <%= _.template($('#input_constructor').html())({id:"WebglVendor", description:tr("WebGL vendor"), default_selector: "string", disable_int:true, value_string: "", help: { description: tr("WebGL vendor can expose your real hardware through javascript, so it is good idea to change it. Empty string will leave your real settings. This setting is for debugging purposes only, the proper way to set is using FingerprintSwitcher"), examples:[{code:"Google Inc.",description:tr("Vendor example")}, {code:tr("Empty string"),description:tr("Don't change this setting")}]}}) %>

      <%= _.template($('#input_constructor').html())({id:"WebglRenderer", description:tr("WebGL renderer"), default_selector: "string", disable_int:true, value_string: "", help: { description: tr("WebGL renderer can expose your real hardware through javascript, so it is good idea to change it. Empty string will leave your real settings. This setting is for debugging purposes only, the proper way to set is using FingerprintSwitcher"), examples:[{code:"Google Inc.",description:tr("ANGLE (NVIDIA GeForce GTX 550 Ti Direct3D11 vs_5_0 ps_5_0)")}, {code:tr("Empty string"),description:tr("Don't change this setting")}]}}) %>


      <%= _.template($('#space').html())({}) %><%= _.template($('#line').html())({}) %><%= _.template($('#space').html())({}) %>

      <%= _.template($('#header').html())({name:tr("Audio")}) %>

      <%= _.template($('#info').html())({description: `<span class="tr">Use <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://fp.bablosoft.com'); return false;">FingerprintSwitcher</a> service and <a href="#!/FingerprintSwitcher_Get">Get Fingerprint</a> action to add noise to audio.</span>`, color: "gray"}) %>


      <%= _.template($('#input_constructor').html())({id:"Audio", description:tr("Audio"), default_selector: "string", disable_int:true, value_string: "", variants: ["enable", "disable", "noise"], help: { description: tr("Site may identify user by generating sound and reading it as a data. Different browsers and operating systems will do that operation with slightly different results. BAS allows to protect you by disallowing browser to obtain sound data or by adding custom noise to result."), examples:[{code:"enable",description:tr("Enable audio api")},{code:"disable",description:tr("Disable audio api methods used for fingerprinting")},{code:"noise",description:tr("Add random noise to generated sound. For debug purpose only, use FingerprintSwitcher to change it.")}, {code:tr("Empty string"),description:tr("Don't change this setting")}]}}) %>
      

      <%= _.template($('#input_constructor').html())({id:"AudioNoise", description:tr("Audio noise pattern"), default_selector: "string", disable_int:true, value_string: "", help: { description: tr("This setting is for debugging purposes only, the proper way to set is using FingerprintSwitcher")}}) %>


      <%= _.template($('#space').html())({}) %><%= _.template($('#line').html())({}) %><%= _.template($('#space').html())({}) %>

       <%= _.template($('#header').html())({name:tr("Network")}) %>

 
       <%= _.template($('#input_constructor').html())({id:"QUIC", description:tr("Enable QUIC protocol"), default_selector: "string", disable_int:true, value_string: "", variants: ["enable", "disable"], help: { description: tr("Unlike HTTP, QUIC protocol is build on top of UDP. Not all proxies supports UDP. It means that enabling QUIC can cause problems when working with certain proxies. It is recommended to enable this option only if sure, that your proxy supports it. Disabled by default."), examples:[{code:"enable",description:tr("Enable QUIC")},{code:"disable",description:tr("Disable QUIC")},{code:tr("Empty string"),description:tr("Don't change this setting")}]}}) %>

       <%= _.template($('#input_constructor').html())({id:"Tunneling", description:tr("Enable tunneling"), default_selector: "string", disable_int:true, value_string: "", variants: ["enable", "disable"], help: { description: tr("This setting allows to completely turn off the built-in tunneling system. When tunneling is disabled, any applied proxy won't work. Useful if you are using a VPN or want a direct connection. Tunneling is enabled by default. Changing this option immediately restarts the browser. Disable tunneling only when you're certain no proxy will be needed and want to use native network stack."), examples:[{code:"enable",description:tr("Enable tunneling. Default option.")},{code:"disable",description:tr("Disable tunneling, native network stack will be used, applying proxy won't take any effect.")},{code:tr("Empty string"),description:tr("Don't change this setting")}]}}) %>
      
      <%= _.template($('#space').html())({}) %><%= _.template($('#line').html())({}) %><%= _.template($('#space').html())({}) %>

       <%= _.template($('#header').html())({name:tr("Rendering")}) %>

      <%= _.template($('#input_constructor').html())({id:"MaxFPS", description:tr("Maximum FPS"), default_selector: "int", disable_string:true, value_number: 0, variants: ["0<br/><span style='color:gray;font-size:small'>" + tr("Don't change") + "</span>", "30", "60"], help: { description: tr("Maximum times browser content can be rendered per one second. The lower this value, the lower the CPU usage will be. Setting it too low may affect site operability. Reducing it below 30 may lead to unpredictable consequences. Minimum value is 10."), examples:[{code:"30",description:tr("Limit FPS to 30")},{code:"0",description:tr("Don't change FPS")}]}}) %>

      <%= _.template($('#space').html())({}) %><%= _.template($('#line').html())({}) %><%= _.template($('#space').html())({}) %>

      <%= _.template($('#header').html())({name:tr("Extensions")}) %>

      <%= _.template($('#input_constructor').html())({id:"Extensions", description:tr("Each line must contain either file path or extension id or extension url, examples:\nc:/path/to/extension/\nhttps://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif\npadekgcemlokbadohgkifijomclgjgif"), default_selector: "string", disable_int:true, disable_editor:true, disable_string:true, use_textarea:true, size: 8, disable_type_chooser:true,textarea_height:80, help: {description: tr("Chrome extension can be used in BAS by inputting either extension id or extension url or extension path into this field. The easiest way to start using extension is to copy paste url from chrome web store."), examples:[{code:"https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif",description:tr("Load extension by url")},{code:"padekgcemlokbadohgkifijomclgjgif",description:tr("Load extension by id")},{code:"c:/extensions/background",description:tr("Load extension from specified folder. File c:/extensions/background/manifest.json must exists")},{code:"Clear",description:tr("Remove all extensions")},{code:tr("Empty string"),description:tr("Don't change")}]}}) %>

      <%= _.template($('#space').html())({}) %><%= _.template($('#line').html())({}) %><%= _.template($('#space').html())({}) %>

      <%= _.template($('#header').html())({name:tr("Browser version")}) %>
 
       <%= _.template($('#input_constructor').html())({id:"BrowserVersion", description:tr("Browser version"), default_selector: "string", disable_int:true, value_string: "",
       variants:
       [
        "default<br/><span style='color:gray;font-size:small'>" + tr("Use latest Chrome version") + "</span>", 
        "random<br/><span style='color:gray;font-size:small'>" + tr("Select random Chrome version of all available") + "</span>",
        "111.0.5563.65<br/><span style='color:gray;font-size:small'>" + tr("Select specific version based on full vesrion string") + "</span>",
        "111<br/><span style='color:gray;font-size:small'>" + tr("Select specific version based on major version string") + "</span>",
        "1<br/><span style='color:gray;font-size:small'>" + tr("Select specific version based on version id") + "</span>",
       ], 
       help: { description: tr("Changes browser version for current thread. This setting will restart browser and therefore reset all settings, so it is better to use it when thread starts."), examples:[
        {code:"default",description:tr("Use latest Chrome version")},
        {code:"random",description:tr("Select random Chrome version of all available")},
        {code:"111.0.5563.65",description:tr("Select specific version based on full vesrion string")},
        {code:"111",description:tr("Select specific version based on major version string")},
        {code:"1",description:tr("Select specific version based on version id")},
        {code:tr("Empty string"),description:tr("Don't change this setting")}
       ]}}) %>

       <%= _.template($('#space').html())({}) %><%= _.template($('#line').html())({}) %><%= _.template($('#space').html())({}) %>

       <%= _.template($('#header').html())({name:tr("Command line")}) %>

       <%= _.template($('#info').html())({description: `<span class="tr">List of command line parameters can be found</span> <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://peter.sh/experiments/chromium-command-line-switches/'); return false;">here</a>.`, color: "gray"}) %>

       <%= _.template($('#input_constructor').html())({id:"CommandLine", description:tr("Each line must contain one command line parameter, which will be used to start browser. It can be just single key or a key and a value.\nExamples:\n--disable-component-update\n--lang=ru-RU"), default_selector: "string", disable_int:true, disable_editor:true, disable_string:true, use_textarea:true, size: 8, disable_type_chooser:true,textarea_height:80, help: {description: tr("This field may contain additional command line parameters used to start browser. They can also be specified by changing chrome_command_line.txt file inside apps/BASVERSION folder. If same key will be specified in both places, preference will be given to this field. Previous command line parameter list will be overridden by this value."), examples:[{code:"--key",description:tr("Send key only")},{code:"--key=value",description:tr("Send key and value")},{code:"Clear",description:tr("Remove all command line params")},{code:tr("Empty string"),description:tr("Don't change")}]}}) %>

      <%= _.template($('#space').html())({}) %><%= _.template($('#line').html())({}) %><%= _.template($('#space').html())({}) %>

       <%= _.template($('#header').html())({name:tr("Profile")}) %>

       <%= _.template($('#input_constructor').html())(
        {
          id:"Path", 
          description:tr("Profile folder path"), 
          default_selector: "string", 
          disable_int:true, 
          value_string: "", 
          variants: 
          [
            "c:/path/to/profile<br/><span style='color:gray;font-size:small'>" + tr("Exact profile location") + "</span>",
            "temporary<br/><span style='color:gray;font-size:small'>" + tr("New temporary profile") + "</span>",
          ], 
          help: 
          {
            description: tr("String with profile folder. Slash type is not important. If folder doesn't exist, it will be created. If folder already exists, BAS will use it as profile and restore all data from it like cookies, localstorage, etc. By default browser stores all profile data in temporary folder, you can use \"temporary\" keyword to switch to new temporary profile."), 
            examples:
            [
              {
                code:tr("Empty string"),
                description:tr("Don't change")
              }, 
              {
                code:tr("temporary"),
                description:tr("Switch to new temporary profile")
              } ,
              {
                code:"c:/path/to/profile"
              },
              {
                code:"c:\\path\\to\\profile"
              }
            ]
          }
        }) %>
         <%= _.template($('#input_constructor').html())({id:"LoadFPFromFolder", description:tr("Always load fingerprint from profile folder"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true","false"], help: {description: tr("In case if profile folder already exists and has fingerprint data, tells BAS to apply fingerpint used latest for that profile.")}}) %>

         <%= _.template($('#input_constructor').html())({id:"Key", description:tr("FingerprintSwitcher key. Can be empty"), default_selector: "string", disable_int:true,
         variants: ["business<br/><span style='color:gray;font-size:small'>" + tr("Use FingerprintBusiness license.") + "</span><br/><span style='color:gray;font-size:small'>" + tr("It can help to embed fingerprints inside compiled script.") + "</span>"],
          help: 
          {
            description: tr("Fingerprints are obtained from the FingerprintSwitcher service. To use this service, you need to purchase a key. Key verification is required when using profile which has fingerprint data. If you don't change profile folder or it doesn't contain fingerprint data, you can leave this field blank. You can also leave this field blank if the fingerprint was obtained using the free version (without a key). However, if the fingerprint was obtained with the paid version, you must provide a valid key to apply it. To use the free version, simply leave this field blank."), examples:
            [
              {
                code:"pGGeNdza2e0gIw48oa",description:tr("Key example, it is required if fingerprint was obtained with paid version.")
              },
              {
                code:"business",description:tr("Use FingerprintBusiness license. It can help to embed fingerprints inside compiled script. Check following") + " " + `<a href='#' style="color:rgba(157, 153, 108, 1.0)" onclick="BrowserAutomationStudio_OpenUrl('` + tr('https://wiki.bablosoft.com/doku.php?id=fingerprintbusiness') + `');return false">` + tr('link') + `</a>` + " " + tr("for more info.")
              },
              
              {
                code:tr("Empty string"),description:tr("Use a free version. Only if fingerprint was obtained with free version.")
              }
            ]
          } }) %>

          <%= _.template($('#info').html())({color: "gray", description: `<span class="tr">This action works with</span> 
          <a href="#"  onclick="BrowserAutomationStudio_OpenUrl('https://fp.bablosoft.com'); return false;">
            <span class="tr">Fingerprint switcher service</span></a>. 
          <span class="tr">You can get a key there</span>. `}) %>

         <%= _.template($('#input_constructor').html())({id:"LoadProxyFromFolder", description:tr("Always load proxy from profile folder"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true","false"], help: {description: tr("In case if profile folder already exists and has proxy data, tells BAS to apply proxy used latest for that profile.")}}) %>

       <%= _.template($('#space').html())({}) %>

    </div>


    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Changes browser settings: network, canvas, webgl, etc. Use "Get Fingerprint" action to change browser fingerprint.</div>
      <div class="tr tooltip-paragraph-fold">Empty string or 0 means, that value wont be changed.</div>
      <div class="tr tooltip-paragraph-fold">"Components", "Extensions", "Widevine", "Command line", "Browser version" or "Profile" options will restart browser process and thereby reset all settings(proxies, headers, etc), so the best place to use this action is thread start.</div> 
      <div class="tooltip-paragraph-fold"><span class="tr">Chrome extension can be used in BAS by inputting either extension id or extension url or extension path into "Extensions" field. Extension id is a unique string with 32 length, for example, padekgcemlokbadohgkifijomclgjgif. Extension url is the main url of extension in</span> <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://chrome.google.com/webstore/category/extensions');return false" class="tr">chrome web store</a>. <span class="tr">It has chrome.google.com domain, for example: https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif. Extension path is path to unpacked extension. Each path must contain extracted extension, a folder with manifest.json and other files. See</span> <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=using_extensions');return false" class="tr-en">this link</a><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=ru:using_extensions');return false" class="tr-ru">эту ссылку</a>, <span class="tr">for information about unpacking extensions and other info about using them</span>.</div>

      <div class="tr tooltip-paragraph-fold">Each BAS version may be shipped with one or several browser versions. This action can change browser version used in current thread. Use "Browser version" param to do that.</div>
      <div class="tr tooltip-paragraph-fold">In order to get Chrome version, which is used for current thread, use "Get current browser version" action.</div>
      <div class="tr tooltip-paragraph-fold">In order to get all available versions for current BAS build, use "Get list of available browser versions" action.</div>
      <div class="tr tooltip-paragraph-fold">One of use case for changing browser version would be to select random version with this action first. You can use "random" string as input parameter. Then get fingerprint which was obtained from browser with same version. Use "Get fingerprint" action with "Minimum browser version" and "Maximum browser version" parameters. This way used actual browser version will always match browser version of fingerprint, and these versions won't be the same for each thread.</div>

      <div class="tr tooltip-paragraph-last-fold">If you want to change settings for every thread, it is better to use settings tab.</div>
    </div>


    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="getbrowserversionlist">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"Format", description:tr("Format"), default_selector: "string", disable_int:true, value_string: "default", variants: 
      [
        "default<br/><span style='color:gray;font-size:small'>" + tr("Returns list of strings") + "</span>",
        "extended<br/><span style='color:gray;font-size:small'>" + tr("Returns list of objects") + "</span>"
      ], help: {description: tr("Format of returned result. Results are always sorted descending by version, i.e. the latest version will appear first in the list."), examples:[
        {code:("default"), description:(tr("returns list of strings, for example") + (" <code style=\"font-size:85%\">[\"113.0.5563.65\", \"111.0.5563.65\", ...]</code>"))},
        {code:("extended"), description:(tr("returns list of object, each object has info about specific version, for example") + ("<code style=\"font-size:85%\">[{\"id\": 1, \"browser_version\": \"113.0.5563.65\", ...}]</code>. ") + tr("More info about each property of these objects can be found below."))}
      ]}}) %>
    
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "AVAILABLE_CHROME_VERSIONS", help: {description: tr("Variable in which, after successful execution of the action, the list of all available Chrome versions will be stored. Results are always sorted descending by version, i.e. the latest version will appear first in the list."), examples:[
        {code:("default"), description:(tr("returns list of strings, for example") + (" <code style=\"font-size:85%\">[\"113.0.5563.65\", \"111.0.5563.65\", ...]</code>"))},
        {code:("extended"), description:(tr("returns list of object, each object has info about specific version, for example") + ("<code style=\"font-size:85%\">[{\"id\": 1, \"browser_version\": \"113.0.5563.65\", ...}]</code>. ") + tr("More info about each property of these objects can be found below."))}
      ]} }) %>
    
    </div>
    
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get list of all available Chrome versions.</div>
      <div class="tr tooltip-paragraph-fold">Each BAS version may be shipped with one or several browser versions. This action can obtain list of all available versions programmatically. You can get this list manually as well by visiting Menu -&gt; Help -&gt; About Engine.</div>
      <div class="tr tooltip-paragraph-fold">In order to get Chrome version, which is used for current thread, use "Get current browser version" action.</div>
      <div class="tr tooltip-paragraph-fold">If you want to switch browser version for current thread, use "Browser Settings" action with "Browser Version" parameter.</div>
      <div class="tr tooltip-paragraph-fold">One of possible use case would be to get list of all versions with this action, select certain version with "Browser Settings" action and then use "Get fingerprint" action with "Minimum browser version" and "Maximum browser version" parameters which matches previously selected browser version. This way used actual browser version will always match browser version of fingerprint, and these versions won't be the same for each thread. With this example you are free to use any algorithm for browser version selection, it could be just random value, or selection based on probability, for example, latest version may be selected more often than outdated.</div>
      <div class="tr tooltip-paragraph-fold">Depending on selected format this action will return either list of strings or list of objects.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">With "default" format output will contain list of strings with full browser versions, for example</span> <code style="font-size:85%">["113.0.5563.65", "111.0.5563.65", ...]</code></div> 
      <div class="tooltip-paragraph-fold"><span class="tr">With "extended" format output will contain list of object, each object has info about specific version, for example</span> <code style="font-size:85%">[{"id": 1, "browser_version": "113.0.5563.65", ...}]</code></div>
      <div class="tr tooltip-paragraph-fold">Here is a list of properties for these objects:</div>
      <div class="tr tooltip-paragraph-fold">"browser_version" - full browser version, for example 111.0.5563.65. Can be used later to switch current thread to this version.</div>
      <div class="tr tooltip-paragraph-fold">"id" - internal identifier of Chrome build, for example, 1, 2, 3, ...</div>
      <div class="tr tooltip-paragraph-fold">"bas_version" - BAS version in which corresponding Chrome version was introduced, for example, 25.5.1.</div>
      <div class="tr tooltip-paragraph-fold">"architecture" - browser architecture, can be "x64" or "x86".</div>
      <div class="tr tooltip-paragraph-fold">Result obtained with "extended" format can be parsed with JSON module, while "default" format is easier to parse with List module.</div>
      <div class="tr tooltip-paragraph-last-fold">Results are always sorted descending by version, i.e. the latest version will appear first in the list.</div>
    
      
    </div>
    
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="getcurrentbrowserversion">
    <div class="container-fluid">
      <%= _.template($('#variable_constructor').html())({id:"Save2", description:tr("Browser version string"), default_variable: "BROWSER_VERSION_STRING", help: {description: tr("Variable in which, after successful execution of the action, Chrome version will be stored. Version string is obtained for current thread. Other threads can use different versions. It can be changed by using \"Browser settings\" action."), examples:[
        {
          code:("111.0.5563.65"), description: tr("current thread uses 111.0.5563.65 Chrome version.")
        },
        {
          code:("113.0.5563.65"), description: tr("current thread uses 113.0.5563.65 Chrome version.")
        }

      ]} }) %>
    </div>
    <div class="container-fluid">
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Browser version id"), default_variable: "BROWSER_VERSION_ID", help: {description: tr("Variable in which, after successful execution of the action, internal identifier of browser build will be stored. Version id is obtained for current thread. Other threads can use different versions. IDs are always integers starting from 1."), examples:[
        {code:("1, 2, 3 ...")}
      ]} }) %>
    </div>
    <div class="container-fluid">
      <%= _.template($('#variable_constructor').html())({id:"Save3", description:tr("Browser architecture"), default_variable: "BROWSER_ARCHITECTURE", help: {description: tr("Variable in which, after successful execution of the action, browser architecture will be stored."), examples:[
        {
          code:("x64")
        },
        {
          code:("x86")
        }
      ]} }) %>
    </div>

    
    
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get info about current Chrome version.</div>
      <div class="tr tooltip-paragraph-fold">Each BAS distribution may be shipped with one or several browser versions. This action can obtain Chrome version used in current thread. Other threads can use different versions.</div>
      <div class="tr tooltip-paragraph-fold">By default BAS will choose latest browser version available.</div>
      <div class="tr tooltip-paragraph-fold">In order to get all available versions for current BAS build, use "Get list of available browser versions" action.</div>
      <div class="tr tooltip-paragraph-last-fold">If you want to switch browser version for current thread, use "Browser Settings" action with "Browser Version" parameter.</div>
    
      
    </div>
    
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="dragelement">
    <div class="container-fluid dragelement">
      <%= _.template($('#path').html())({selector:selector}) %>
    </div>
    <%= _.template($('#movefields').html())({}) %>
    <%= _.template($('#emulationfields').html())({}) %>

    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Start drag from given element.</div>

      <div class="tr tooltip-paragraph-fold">Target coordinates are always random but they are located close to center.</div>
      <div class="tr tooltip-paragraph-fold">If element is not visible, page will be scrolled.</div> 
      <div class="tr tooltip-paragraph-fold">Mouse move trajectory is always random and reminds one made by human, you can twaek move parameters with settings button located near cancel.</div>
      <div class="tr tooltip-paragraph-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
      <div class="tr tooltip-paragraph-last-fold">If you used this action, you must also call "Drop" or "Drop On Element" action.</div>
    </div>

    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, use_move: true, use_emulation: true, name: tr("Drag On Element")}) %>
  </script>


  <script type="text/template" id="dropelement">
    <div class="container-fluid dropelement">
      <%= _.template($('#path').html())({selector:selector}) %>

    </div>
    <%= _.template($('#movefields').html())({}) %>
    
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Drop to given element.</div>

      <div class="tr tooltip-paragraph-fold">Target coordinates are always random but they are located close to center.</div>
      <div class="tr tooltip-paragraph-fold">If element is not visible, page will be scrolled.</div> 
      <div class="tr tooltip-paragraph-fold">Mouse move trajectory is always random and reminds one made by human, you can twaek move parameters with settings button located near cancel.</div>
      <div class="tr tooltip-paragraph-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
      <div class="tr tooltip-paragraph-last-fold">Before using this action, you must also call "Drag" or "Drag On Element" action.</div>
    </div>

    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, use_move: true, name: tr("Drop On Element")}) %>
  </script>

  <script type="text/template" id="moveandclickelement">
    <div class="container-fluid moveandclickelement">
      <%= _.template($('#path').html())({selector:selector}) %>
      
      <%= _.template($('#checkbox').html())({id: "Check2", title: tr("Hold ctrl key. Open link in a new tab.")}) %>

      <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), smaller_fonts: true, description: tr("")}) %>
        <%= _.template($('#mouseclicksettings').html())() %>  
        <%= _.template($('#checkbox').html())({id: "Check", title: tr("Disable mouse emulation."), additional_classes: "disable-if-find-by-image", help: {description: tr("Disabling mouse emulation will make this action identical to executing click javascript function on element.")}}) %>
        
      <%= _.template($('#block_end').html())() %>
      

    </div>

    

    <%= _.template($('#movefields').html())({}) %>
    <%= _.template($('#emulationfields').html())({additionalEmulation: true}) %>

    <div class="tooltipinternal ">
      <div class="tr tooltip-paragraph-first-fold">Move mouse and click on given element.</div>
      <div class="tr tooltip-paragraph-fold">Target coordinates are always random but they are located close to center.</div>
      <% if(_SelectorModel.get("is_image") == false){ %>
        <div class="tr tooltip-paragraph-fold">Disabling mouse emulation will make this action identical to executing click javascript function on element.</div>
      <% } %>
      
      <div class="tr tooltip-paragraph-fold">If element is not visible, page will be scrolled.</div> 
      <div class="tr tooltip-paragraph-fold">Mouse move trajectory is always random and reminds one made by human, you can twaek move parameters with settings button located near cancel.</div>
      <div class="tr tooltip-paragraph-fold">If you are clicking on some element, which causes page load, you should select "wait for full page load". Using this option will make browser wait for page load after click.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
      </div>
    <%= _.template($('#back').html())({action:"executeandadd", use_waiter:true,use_timeout: true, use_move: true, use_emulation: true, visible:true, name: tr("Move And Click On Element"), wiki: "how_to_click_on_buttons_and_links"}) %>
  </script>

  <script type="text/template" id="clear">
    <div class="container-fluid">
      <%= _.template($('#path').html())({selector:selector}) %>

    </div>
    <%= _.template($('#movefields').html())({}) %>
    <%= _.template($('#emulationfields').html())({additionalEmulation: true}) %>
    <div class="tooltipinternal ">
      <div class="tr tooltip-paragraph-first-fold">Clear edit. Works only on edit.</div>
      <div class="tr tooltip-paragraph-fold">This action is equivalent to typing &lt;CONTROL&gt;A&lt;BACK&gt;.</div>
      <div class="tr tooltip-paragraph-fold">If element is not visible, page will be scrolled.</div> 
      <div class="tr tooltip-paragraph-fold">Mouse move trajectory is always random and reminds one made by human, you can twaek move parameters with settings button located near cancel.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, use_move: true, use_emulation: true, name: tr("Clear Edit"), wiki: "how_to_click_on_buttons_and_links"}) %>
  </script>

  <script type="text/template" id="typeelement">

    <div class="container-fluid">
      <%= _.template($('#path').html())({selector:selector}) %>

      <%= _.template($('#input_constructor').html())({id:"TypeData", description:tr("Text to type"), default_selector: "string", disable_int:true, help: {description: tr("This could be any character sequence."), examples:[{code:"hello world!",description:tr("Input hello world!")},{code:"&lt;CONTROL&gt;V",description:tr("Paste text")},{code:"&lt;CONTROL&gt;A&lt;DELETE&gt;",description:tr("Clear input")},{code:"&lt;ESCAPE&gt;",description:tr("Press escape")}]}}) %>
      
      <%= _.template($('#block_start').html())({id: "SpecialKeys", name: tr("Special keys"), smaller_fonts: true, description: tr("")}) %>
        <%= _.template($('#special_buttons').html())({}) %>
      <%= _.template($('#block_end').html())() %>


      <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), smaller_fonts: true, description: tr("")}) %>
        <%= _.template($('#input_constructor').html())({id:"TypeInterval", description:tr("Interval in milliseconds"), default_selector: "int", disable_string:true, value_number: 100, step_number: 100, min_number: 0, max_number:10000, help: {description: tr("Interval between each key press in milliseconds. BAS uses different interval for every key which is close to this parameter. For example, if you set interval to 100, that could result following sequence: key #1, wait 91 millisecond, key #2, wait 117 millisecond, key #3, etc"), examples:[{code:"100",description:tr("Default value. Human like input emulation.")},{code:"0",description:tr("Text is entered instantly.")}]}}) %>
        <%= _.template($('#checkbox').html())({id: "Check", additional_classes: "disable-if-find-by-image", title: tr("Disable mouse and keyboard emulation."), help: {description: tr("Click and input text using javascript. Not recommended to use.")}}) %>
      <%= _.template($('#block_end').html())() %>

      

    </div>
    <%= _.template($('#movefields').html())({}) %>
    <%= _.template($('#emulationfields').html())({additionalEmulation: true}) %>

    <div class="tooltipinternal ">
      <div class="tr tooltip-paragraph-first-fold">Type text inside element.</div>
      <div class="tr tooltip-paragraph-fold">This action is capable to input any characters including special keys like enter, backspace, insert, delete, etc.</div>
      <div class="tr tooltip-paragraph-fold">If you want to type big text, use 0 interval or "Set Clipboard" and type &lt;CONTROL&gt;V text.</div>
      <% if(_SelectorModel.get("is_image") == false){ %>
        <div class="tr tooltip-paragraph-fold">Disabling mouse move emulation will make it action act same as executing self.value = "value".</div> 
      <% } %>
      
      <div class="tr tooltip-paragraph-fold">If element is not visible, page will be scrolled.</div> 
      <div class="tr tooltip-paragraph-fold">Mouse will be moved to random point close to center before input.</div> 
      <div class="tr tooltip-paragraph-fold">Mouse move trajectory is always random and reminds one made by human, you can twaek move parameters with settings button located near cancel.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>


    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, use_waiter:true, use_move: true, use_emulation: true, name: tr("Type Text"), wiki: "how_to_type_text"}) %>
  </script>

  <script type="text/template" id="exist">
    <div class="container-fluid exist">
      <%= _.template($('#path').html())({selector:selector, hide_options:true, waitelement: false, failaction: false}) %>

      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "IS_EXISTS", help: {description: tr("Check result with boolean type. Could be true or false. Use \"if\" action to process it."), examples:[{code:"true",description:tr("Element found")},{code:"false",description:tr("Element not found")}]}}) %>
      <%= _.template($('#checkbox').html())({id: "Check", additional_classes: "disable-if-find-by-image", title: tr("Also check if visible on a screen")}) %>


    </div>


    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Checks if element exists on page.</div>
      <div class="tr tooltip-paragraph-fold">This action returns instantly.</div>
      <div class="tr tooltip-paragraph-fold">It writes result to variable which is true or false, use "if" action to process it.</div> 
      <div class="tr tooltip-paragraph-last-fold">If "Check if visible on a screen" is checked, action returns true only if element exists and visible on screen.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, name: tr("Is Element Exists"), wiki: "how_to_check_if_page_element_exists"}) %>
  </script>

  <script type="text/template" id="style">
    <div class="container-fluid style">
      <%= _.template($('#path').html())({selector:selector}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "SAVED_STYLE", help: {description: tr("Computed style as a string.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Style To Check"), default_selector: "string", disable_int:true, help: {description: tr("Css value to check. Internally this action calls window.getComputedStyle(self)."), examples:[{code:"display",description:tr("Check visibility")},{code:"width",description:tr("Get width")}]}}) %>
    </div>
    <div class="tooltipinternal ">
      <div class="tr tooltip-paragraph-first-fold">Get element css style.</div>
      <div class="tr tooltip-paragraph-fold">Use "display" to check if element is visible, "width" to check element width etc.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, use_timeout:true, name: tr("Get Element Style")}) %>
  </script>

  <script type="text/template" id="check">
    <div class="container-fluid check">
      <%= _.template($('#path').html())({selector:selector}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Check cehckbox. Works only on checkboxes.</div>
    </div>
    <%= _.template($('#movefields').html())({}) %>
    <%= _.template($('#emulationfields').html())({}) %>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, use_move: true, use_emulation: true, name: tr("Set Checkbox")}) %>
  </script>

  <script type="text/template" id="waitelement">
    <span class="path2">
      <div class="container-fluid waitelement">
       <%= _.template($('#path').html())({selector:selector, disable_options:true}) %>
       <%= _.template($('#checkbox').html())({id: "Check", title: tr("Also check if visible on a screen"), additional_classes: "disable-if-find-by-image"}) %>
      </div>
      <div class="tooltipinternal">
        <div class="tr tooltip-paragraph-first-fold">Wait while matching query element exists on page.</div>
        <div class="tr tooltip-paragraph-fold">If "Check if visible on a screen" is checked, action ends only if element exists and visible on screen.</div>
        <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
      </div>
      <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, name: tr("Wait While Element Exists")}) %>
    </span>
  </script>

  <script type="text/template" id="focus">
    <div class="container-fluid focus">
      <%= _.template($('#path').html())({selector:selector}) %>
      <%= _.template($('#checkbox').html())({id: "Check", title: tr("Use mouse wheel or touch")}) %>
    </div>
    <%= _.template($('#scrollparamsfields').html())({}) %>
    <%= _.template($('#emulationfields').html())({}) %>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">This action ensures that certian element is visible on screen.</div>
      <div class="tr tooltip-paragraph-fold">If element is already visible, than this action will do nothing, otherwise it will scroll viewport in such way, that element are located as close as possible to screen center.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, use_scroll_params: true, use_emulation: true, name: tr("Scroll To Element")}) %>
  </script>

  <script type="text/template" id="set">
    <div class="container-fluid set">
      <%= _.template($('#path').html())({selector:selector}) %>
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Set String"), default_selector: "string", disable_int:true, help: {description: tr("String which contains exact value present in combobox")}}) %>
    </div>
    <%= _.template($('#emulationfields').html())({}) %>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Set combobox value to desired string. Works only on comboboxes(not text input).</div>
      <div class="tr tooltip-paragraph-fold">In case if combobox don't contain default markup, this function won't work. In that case, use "Set Combobox Index" action instead.</div>
      <div class="tr tooltip-paragraph-fold">You can use "type text" action to set combobox value. Click on combobox inside browser and select "Type Text" option, than input desired value or several first letters with &lt;RETURN&gt; at the end. For example, if combobox contains two values: male and female, you can select male by typing male&lt;RETURN&gt; or ma&lt;RETURN&gt;.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, use_emulation: true, name: tr("Set Combobox Value"), wiki: "how_to_set_combobox"}) %>
  </script>

  <script type="text/template" id="set_integer">
    <div class="container-fluid set_integer">
      <%= _.template($('#path').html())({selector:selector}) %>
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Set Index"), default_selector: "int", disable_string:true, help: {description: tr("Integer which contains combobox index starting from zero")}}) %>
    </div>
    <%= _.template($('#emulationfields').html())({}) %>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Set combobox index to desired int. Works only on comboboxes(not text input).</div>
      <div class="tr tooltip-paragraph-fold">You can use "type text" action to set combobox value. Click on combobox inside browser and select "Type Text" option, than input desired value or several first letters with &lt;RETURN&gt; at the end. For example, if combobox contains two values: male and female, you can select male by typing male&lt;RETURN&gt; or ma&lt;RETURN&gt;.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, use_emulation: true, name: tr("Set Combobox Index"), wiki: "how_to_set_combobox"}) %>
  </script>

  <script type="text/template" id="set_random">
    <div class="container-fluid set_random">
      <%= _.template($('#path').html())({selector:selector}) %>
    </div>
    <%= _.template($('#emulationfields').html())({}) %>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Set combobox index to random int. Works only on comboboxes(not text input).</div>
      <div class="tr tooltip-paragraph-fold">In case if combobox don't contain default markup, this function won't work. In that case, use "Set Combobox Index" action instead.</div>
      <div class="tr tooltip-paragraph-fold">You can use "type text" action to set combobox value. Click on combobox inside browser and select "Type Text" option, than input desired value or several first letters with &lt;RETURN&gt; at the end. For example, if combobox contains two values: male and female, you can select male by typing male&lt;RETURN&gt; or ma&lt;RETURN&gt;.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, use_emulation: true, name: tr("Set Combobox To Random"), wiki: "how_to_set_combobox"}) %>
  </script>

  <script type="text/template" id="attr">
    <div class="container-fluid attr">
      <%= _.template($('#path').html())({selector:selector}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "SAVED_ATTRIBUTE", help: {description: tr("This variable will contain element attribute value as a string")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Attribute Name"), default_selector: "string", disable_int:true, help: {description: tr("Attribute name as a string."), examples:[{code:"id",description:tr("Get element id")},{code:"style",description:tr("Get element styles")}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get html attribute of selected element.</div>
      <div class="tr tooltip-paragraph-fold">For example, if element is a link and has following markup &lt;a href="https://google.com"&gt;google&lt;/a&gt;, than you can find reference by getting attribute href.</div>
      <div class="tr tooltip-paragraph-fold">If element has markup &lt;div id="message"&gt;text&lt;/a&gt;, you can get id by selecting attribute id.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, use_timeout:true, name: tr("Get Element Attribute")}) %>
  </script>

  <script type="text/template" id="set_attr">
    <div class="container-fluid attr">
      <%= _.template($('#path').html())({selector:selector}) %>
      <%= _.template($('#input_constructor').html())({id:"Name", description:tr("Attribute Name"), default_selector: "string", disable_int:true, help: {description: tr("Attribute name as a string.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Attribute Value"), default_selector: "string", disable_int:true, help: {description: tr("This variable contains element attribute value as a string")}}) %>

    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Set html attribute of given element.</div>
      <div class="tr tooltip-paragraph-fold">For example, you can change id of element with markup &lt;div id="message-old"&gt;text&lt;/a&gt; if you use this action with parameters id and message-new.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, use_timeout:true, name: tr("Set Element Attribute")}) %>
  </script>

  <script type="text/template" id="captcha">
    <div class="container-fluid captcha">
      <%= _.template($('#path').html())({selector:selector}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "CAPTCHA_RESULT", help: {description: tr("String with captcha result")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Method", description:tr("Solve Method"), default_selector: "string", disable_int:true, value_string: "manual", variants: ["manual","antigate","rucaptcha","2captcha","xevil","capmonster","dbc","captchasniper"], size: 3, help: {description: tr("Solve method is a string, you can set value directly or use variable or resource."), examples:[{code:"manual",description:tr("Image is solved directly by person who uses BAS.")},{code:"antigate",description:tr("Solve with http://anti-captcha.com/ service")},{code:"rucaptcha",description:tr("Solve with http://rucaptcha.com/ service")},{code:"2captcha",description:tr("Solve with http://2captcha.com/ service")},{code:"capmonster",description:tr("Use capmonster")},{code:"dbc",description:tr("Use http://deathbycaptcha.com/ service")}]}}) %>

      <%= _.template($('#input_constructor').html())({id:"Antigate", description:tr("Antigate/Rucaptcha/2captcha/DBC Key. Can be blank"), default_selector: "string", disable_int:true, help: {description: tr("This key is needed only if you are using services to solve captcha. It is not needed in manual, capmonster and captchasniper modes. In case of deathbycaptcha this field must contain dbc_login:dbc:password.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Server", description:tr("Server url. Can be blank"), default_selector: "string", disable_int:true, help: {description: tr("String which contains server url."), examples:[{code:"http://127.0.0.3:8083/"},{code:tr("Empty string"), description: tr("Use default server url, http://rucaptcha.com for rucaptcha, etc")}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">This action solves image captcha(not recaptcha). Image is obtained as result of element render.</div>
      <div class="tr tooltip-paragraph-fold">Captcha text is saved to variable and can be used later.</div>
      <div class="tr tooltip-paragraph-fold">If you want take image from cache, from file or from any base64 string, you should use "Solve Captcha" action from "Browser" module.</div>
      <div class="tr tooltip-paragraph-fold">If element is not visible, page will be scrolled.</div> 
      <div class="tr tooltip-paragraph-fold">If you want to solve recaptcha, click on recaptcha checkbox inside browser and choose "Solve Recaptcha 2.0" action.</div> 
      <div class="tr tooltip-paragraph-fold">Rendering element can leave additional image border or slightly change color of some pixels due to render inaccuracies, and thus this method is good only if your captcha will be solved by human. In case of automatic machine solver it is important to get captcha picture execatly the same as generated on server, thats why if you use capmonster, captchasniper or xevil, this action will take image from cache. Taking image from cache is not automatic, at first run you will get error which gives captcha url and name of action that you need to use, which is "Allow cache". It is important to partition constant url part and part which is always changes. You should replace changing part with * and leave as is constant part. For example, if you have /image?id=1234, than cache mask would be /image?id=*. Of cource, you can add every url to cache by using * mask, but that would increase memory consumption and may cause other bugs.</div>
      <div class="tr tooltip-paragraph-last-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, name: tr("Solve Captcha"),wiki: "how_to_solve_captcha"}) %>
  </script>
  
  <script type="text/template" id="clickextensionbutton">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"ExtensionId", description:tr("Extension id or name"), default_selector: "string", disable_int:true, help: {description: tr("Extension id or name. It is not necessary to input whole id or whole name, only its part is allowed."), examples:[{code:"padekgcemlokbadohgkifijomclgjgif",description:tr("Trigger extension with id padekgcemlokbadohgkifijomclgjgif.")},{code:"padekgcem",description:tr("Trigger extension, which id contains padekgcem.")},{code:"Proxy SwitchyOmega",description:tr("Trigger extension by name.")},{code:"Proxy",description:tr("Trigger extension by name part.")}]}}) %>

    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Click on extension button.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Executing this action is same as clicking on following</span> <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=chrome_2021-05-15_12-50-15.png');return false" class="tr">button</a>.</div>
      <div class="tr tooltip-paragraph-fold">Extension must be installed first before this action can be used. Use "Browser settings" action to install extension.</div>
      <div class="tooltip-paragraph-last-fold"><span class='tr'>More information about using extensions can be found on this this</span> <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=using_extensions');return false" class="tr-en">page</a><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=ru:using_extensions');return false" class="tr-ru">странице</a>.</div> 
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, waiter_enabled: true, use_waiter: true, use_timeout:true}) %>
  </script>

  <script type="text/template" id="touch">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"Enable", description:tr("Use touch screen"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true","false"], help: {description: tr("Enable touch screen for current browser session."), examples:[{code:"true",description:tr("Enable touch screen")},{code:"false",description:tr("Desktop mode")}]}}) %>

      
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Enable touch screen.</div>
      <div class="tr tooltip-paragraph-fold">Touch screen will be enabled automatically after changing fingerprint, so this action is not required to call explicitly.</div>
      <div class="tr tooltip-paragraph-fold">In touch mode browser will behave exactly the same as mobile browser: mouse movement events won't be sent, click events will be replaced with touch events, lots of browser internal methods will be modified, etc.</div>
      <div class="tr tooltip-paragraph-fold">Special keys like TAB, CTRL or arrows will remain functional, but browser won't receive any notifications about these events.</div> 
      <div class="tr tooltip-paragraph-last-fold">Mouse wheel will be replaced with swipes.</div> 
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="screenshot">
    <div class="container-fluid">
      <%= _.template($('#path').html())({selector:selector}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save screenshot as base64"), default_variable: "SCREENSHOT_BASE64", help: {description: tr("After action will finish, this variable will contain base64 encoded image data, you can use it as captcha or write to file.")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">This action makes screenshot of selected element and saves it to png image encoded as base64 string.</div>
      <div class="tr tooltip-paragraph-last-fold">If element is not visible, page will be scrolled.</div> 
      <div class="tr tooltip-paragraph-fold">If element won't be found instantly, BAS will wait while it will appear for one minute. If element won't be found for 10 seconds, notice will be written to log and if it won't be found for a minute, BAS will stop thread with error. You can handle this error if you uncheck "Fail thread if element not found" checkbox(at page top) or if you wrap this action in ignore error. You can also set max wait time by clicking on hourglass icon near cancel button.</div>

      </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true,use_timeout: true, name: tr("Screenshot")}) %>
  </script>


  <script type="text/template" id="length">
    <span class="path2">

    

    <div class="container-fluid length">
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "ELEMENT_LENGTH", help: {description: tr("After action will finish this variable will contain number of elements matching selector.")}}) %>

      <%= _.template($('#path').html())({selector:selector, disable_options:true, is_multiple_elements: true}) %>

    </div>


    <%= _.template($('#multiselect').html())() %>
    </span>

    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get elements number matching query.</div>
      <div class="tr tooltip-paragraph-fold">To generate query, click on element inside browser and select "Get Element Count" action. BAS will automatically guess, which elements are similar to element that you have chosen and select them. This prediction won't always be correct, so you can tweak it in following way. Add element, which selection must include by selecting it and clicking with left button. This will create green background for element, it always will be included into selection. Alternatively click on element, which was inсluded into selection(elements with blue background). This will create red background for element, it always will be excluded from selection. By сonstantly clarifying which elements will be in the cycle and which will not, you can gradually achieve an acceptable result.</div>

      <div class="tr tooltip-paragraph-fold">This action always returns immediately and doesn't wait in case if element doesn't exist.</div>
      <div class="tr tooltip-paragraph-fold">In case of absence of an element it returns zero.</div> 
      <div class="tr tooltip-paragraph-last-fold">You can iterate through all elements which match certain selector, for example selector by class "c". To do that you should get number of elements with this action, than start for loop from 0 to element length - 1. And finally select element with &gt;CSS&gt; .c &gt;AT&gt; [[CYCLE_INDEX]] inside loop.</div> 
      
    </div>

    <%= _.template($('#back').html())({action:"executeandadd", visible:true, name: tr("Get Element Count")}) %>

  </script>

  <script type="text/template" id="loopelement">
    <span class="path2">

    <div class="container-fluid loopelement">
      <%= _.template($('#path').html())({selector:selector,disable_options:true, is_multiple_elements: true}) %>
    </div>

    <%= _.template($('#multiselect').html())() %>
    </span>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Starts loop which iterates over all elements matching query.</div>
      <div class="tr tooltip-paragraph-fold">To start loop, click on element inside browser and choose Start Loop action. BAS will automatically guess, which elements are similar to element that you have chosen and create loop over them. This prediction won't always be correct, so you can tweak it in following way. Add element, which loop must include by selecting it and clicking with left button. This will create green background for element, it always will be included into loop. Alternatively click on element, which was inсluded into loop(elements with blue background). This will create red background for element, it always will be excluded from loop. By сonstantly clarifying which elements will be in the cycle and which will not, you can gradually achieve an acceptable result.</div>
      <div class="tr tooltip-paragraph-fold">You also can write selector manually. For example, selector &gt;CSS&gt; a will find all links on page, &gt;CSS&gt; .my-class will find elements by class, etc.</div>
      <div class="tr tooltip-paragraph-fold">Clicking ok button will create a loop. Than you need to put some actions inside loop body, every action which you will put there will be executed for each element matching query. To add action click on any element inside browser and select action, which you want to perform. Select "Element from the loop" in order to execute action for each element in the loop. BAS creates selector for your action automatically.</div>
      <div class="tr tooltip-paragraph-fold">You can also iterate over element with "Get Elements Count" action.</div> 
      <div class="tr tooltip-paragraph-fold">Selectors created by BAS usually looks like this [[FOR_EACH_CSS]]&gt;AT&gt;[[CYCLE_INDEX]] and you can update them. For example, if you want to get subelement, change selector like this [[FOR_EACH_CSS]]&gt;AT&gt;[[CYCLE_INDEX]]&gt;CSS&gt; your subselector.</div>
      <div class="tr tooltip-paragraph-fold">Not only element actions may be used inside loop, but any other action like: log, writing to file, etc.</div>
      <div class="tr tooltip-paragraph-last-fold">This type of cycle has small delay between each step, so if you want to parse page very fast, get page source and use xpath or regular expression.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:false,use_timeout: true, name: tr("Start Loop"), wiki: "how_to_iterate_over_elements"}) %>
  </script>

  <script type="text/template" id="move">
    <div class="container-fluid move">
      <%= _.template($('#input_constructor').html())({id:"MoveX", description:tr("Move x position"), default_selector: "int", disable_string:true, value_number: model['x'], help: {description: tr("Integer value, offset from the left edge of the page")}}) %>
      <%= _.template($('#input_constructor').html())({id:"MoveY", description:tr("Move y position"), default_selector: "int", disable_string:true, value_number: model['y'], help: {description: tr("Integer value, offset from the top edge of the page")}}) %>
    </div>
    <%= _.template($('#movefields').html())({}) %>
    <%= _.template($('#emulationfields').html())({}) %>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Move cursor to given coordinates.</div>
      <div class="tr tooltip-paragraph-fold">If you want to move on element, select it inside browser and choose "Move On Element".</div>
      <div class="tr tooltip-paragraph-fold">This action works with absolute coordinates.</div> 
      <div class="tr tooltip-paragraph-fold">If coordinates is not visible, page will be scrolled.</div>
      <div class="tr tooltip-paragraph-last-fold">Mouse move trajectory is always random and reminds one made by human, you can twaek move parameters with settings button located near cancel.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, use_move: true, use_emulation: true, name: tr("Move"), wiki: "how_to_move_mouse"}) %>
  </script>

  <script type="text/template" id="click">
    <div class="container-fluid click">
      <%= _.template($('#input_constructor').html())({id:"ClickX", description:tr("Click x position"), default_selector: "int", disable_string:true, value_number: model['x'], help: {description: tr("Integer value, offset from the left edge of the page")}}) %>
      <%= _.template($('#input_constructor').html())({id:"ClickY", description:tr("Click y position"), default_selector: "int", disable_string:true, value_number: model['y'], help: {description: tr("Integer value, offset from the top edge of the page")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Click on given coordinates.</div>
      <div class="tr tooltip-paragraph-fold">If you want to click on element, select it inside browser and choose "Click On Element".</div>
      <div class="tr tooltip-paragraph-fold">This action works with absolute coordinates.</div> 
      <div class="tr tooltip-paragraph-fold">If coordinates is not visible, page will be scrolled.</div>
      <div class="tr tooltip-paragraph-last-fold">If you are clicking on some element, which causes page load, you should select "wait for full page load". Using this option will make browser wait for page load after click.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", use_waiter:true,use_timeout:true, visible:true, name: tr("Click"), wiki:"how_to_click_on_x_y_coordinates"}) %>
  </script>

  <script type="text/template" id="drag">
    <div class="container-fluid move">
      <%= _.template($('#input_constructor').html())({id:"X", description:tr("Drag x position"), default_selector: "int", disable_string:true, value_number: model['x'], help: {description: tr("Integer value, offset from the left edge of the page")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Y", description:tr("Drop y position"), default_selector: "int", disable_string:true, value_number: model['y'], help: {description: tr("Integer value, offset from the top edge of the page")}}) %>
    </div>
    <%= _.template($('#movefields').html())({}) %>
    <%= _.template($('#emulationfields').html())({}) %>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Start drag from given coordinates.</div>
      <div class="tr tooltip-paragraph-fold">If you want to drag from element, select it inside browser and choose "Drag On Element".</div>
      <div class="tr tooltip-paragraph-fold">This action works with absolute coordinates.</div> 
      <div class="tr tooltip-paragraph-fold">If coordinates is not visible, page will be scrolled.</div>
      <div class="tr tooltip-paragraph-fold">Mouse move trajectory is always random and reminds one made by human, you can twaek move parameters with settings button located near cancel.</div>
      <div class="tr tooltip-paragraph-fold">If you used this action, you must also call "Drop" or "Drop On Element" action.</div>
      <div class="tr tooltip-paragraph-last-fold">If you want to drag file from outside of browser, use "Start Drag File" action.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, use_move: true, use_emulation: true, name: tr("Drag")}) %>
  </script>

  <script type="text/template" id="drop">
    <div class="container-fluid move">
      <%= _.template($('#input_constructor').html())({id:"X", description:tr("Drop x position"), default_selector: "int", disable_string:true, value_number: model['x'], help: {description: tr("Integer value, offset from the left edge of the page")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Y", description:tr("Drop y position"), default_selector: "int", disable_string:true, value_number: model['y'], help: {description: tr("Integer value, offset from the top edge of the page")}}) %>
    </div>
    <%= _.template($('#movefields').html())({}) %>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Drop to given coordinates.</div>
      <div class="tr tooltip-paragraph-fold">If you want to drop to element, select it inside browser and choose "Drop On Element".</div>
      <div class="tr tooltip-paragraph-fold">This action works with absolute coordinates.</div> 
      <div class="tr tooltip-paragraph-fold">If coordinates is not visible, page will be scrolled.</div>
      <div class="tr tooltip-paragraph-fold">Mouse move trajectory is always random and reminds one made by human, you can twaek move parameters with settings button located near cancel.</div>
      <div class="tr tooltip-paragraph-last-fold">Before using this action, you must also call "Drag" or "Drag On Element" action.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, use_move: true, name: tr("Drop")}) %>
  </script>

  <!-- Tabs templates -->

  <script type="text/template" id="addtab">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"Url", description:tr("Url"), default_selector: "string", disable_int:true, help: {description: tr("Url to load. Protocol may be omitted."), examples:[{code:"google.com",description:tr("Load google.com")},{code:"instagram.com",description:tr("Load instagram.com")}]}}) %>
      <%= _.template($('#input_constructor').html())({id:"IsSilent", description:tr("Load silently"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true","false"], help: {description: tr("Adding tab silently means, that new tab will be added and specified url will be loaded only when the tab becomes active for the first time."),examples:[{code:"true",description:tr("Create new tab, load specified url only when tab gets switched to.")},{code:"false",description:tr("Create new tab, switch to it and load it immediately.")}]}}) %>
      <%= _.template($('#input_constructor').html())({id:"Referrer", description:tr("Referrer. Can be blank"), default_selector: "string", disable_int:true, help: {description: tr("Referrer used for current page load."), examples:[{code:"https://google.com",description:tr("Page is loaded by clicking on google search result.")},{code:tr("Empty string"),description:tr("Page is loaded by typing url in address bar.")}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Add a new tab with the specified Url.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", use_waiter:true, waiter_enabled: true, use_timeout:true, visible:true, name: tr("Add Tab")}) %>
  </script>

  <script type="text/template" id="selecttab">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"Index", description:tr("Tab Index"), default_selector: "int", disable_string:true, value_number: model['index'], min_number:0, max_number:999999}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Switch to the tab with the specified index.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, name: tr("Select Tab")}) %>
  </script>

  <script type="text/template" id="tabinfo">
    <div class="container-fluid">
      <%= _.template($('#variable_constructor').html())({id:"UrlList", description:tr("Url list"), default_variable: "URL_LIST", help: {description: tr("List of urls. Each url corresponds to one tab.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"TotalTabs", description:tr("Number of tabs"), default_variable: "TOTAL_TABS", help: {description: tr("Total number of tabs.")}}) %>
      <%= _.template($('#variable_constructor').html())({id:"CurrentIndex", description:tr("Current tab index"), default_variable: "TAB_INDEX", help: {description: tr("Index of current tab. Index starts with 0.")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get list of tabs, index of current tab and save it to variables.</div>
      <div class="tr tooltip-paragraph-fold">Variable [[URL_LIST]] will contain list of urls. Each url corresponds to one tab. Use "List" module to process it. For example, action "First Element" can get url of first tab, action "Get Element" can get url of specified tab.</div>
      <div class="tr tooltip-paragraph-last-fold">Variable [[TAB_INDEX]] will hold index of active tab. Index starts from 0, so first tab will have index 0, second tab - index 1, etc.</div> 
    </div>
    <%= _.template($('#back').html())({action:"executeandadd",visible:true, name: tr("Get information about tabs")}) %>
  </script>

  <script type="text/template" id="closetab">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"Index", description:tr("Tab Index"), default_selector: "int", disable_string:true, value_number: model['index'], min_number:1, max_number:999999}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Close tab with the specified index.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd",visible:true, name: tr("Close Tab")}) %>
  </script>

  <script type="text/template" id="threadnumber">
    <div class="container-fluid threadnumber">
      <%= _.template($('#input_constructor').html())({id:"ThreadNumber", description:tr("Thread number"), default_selector: "int", disable_string:true, disable_string:true, disable_variable:true, min_number: 1}) %>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:false}) %>
  </script>

  <script type="text/template" id="failnumber">
    <div class="container-fluid failnumber">
      <%= _.template($('#input_constructor').html())({id:"FailNumber", description:tr("Fail number"), default_selector: "int", disable_string:true, disable_string:true, disable_variable:true, min_number: 1}) %>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:false}) %>
  </script>

  <script type="text/template" id="successnumber">
    <div class="container-fluid successnumber">
      <%= _.template($('#input_constructor').html())({id:"SuccessNumber", description:tr("Success number"), default_selector: "int", disable_string:true, disable_string:true, disable_variable:true, min_number: 1}) %>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:false}) %>
  </script>

  <script type="text/template" id="moveandclick">
    <div class="container-fluid moveandclick">
      <%= _.template($('#input_constructor').html())({id:"X", description:tr("Move and click x position"), default_selector: "int", disable_string:true, value_number: model['x'], help: {description: tr("Integer value, offset from the left edge of the page")}}) %>
      <%= _.template($('#input_constructor').html())({id:"Y", description:tr("Move and click y position"), default_selector: "int", disable_string:true, value_number: model['y'], help: {description: tr("Integer value, offset from the top edge of the page")}}) %>
      
      <%= _.template($('#checkbox').html())({id: "Check2", title: tr("Hold ctrl key. Open link in a new tab.")}) %>

      <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), smaller_fonts: true, description: tr("")}) %>
        <%= _.template($('#mouseclicksettings').html())() %>
      <%= _.template($('#block_end').html())() %>
    </div>
    
    <%= _.template($('#movefields').html())({}) %>
    <%= _.template($('#emulationfields').html())({additionalEmulation: true}) %>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Move mouse and click on given coordinates.</div>
      <div class="tr tooltip-paragraph-fold">If you want to click on element, select it inside browser and choose "Move And Click On Element".</div>
      <div class="tr tooltip-paragraph-fold">This action works with absolute coordinates.</div> 
      <div class="tr tooltip-paragraph-fold">If coordinates is not visible, page will be scrolled.</div>
      <div class="tr tooltip-paragraph-fold">Mouse move trajectory is always random and reminds one made by human, you can twaek move parameters with settings button located near cancel.</div>
      <div class="tr tooltip-paragraph-last-fold">If you are clicking on some element, which causes page load, you should select "wait for full page load". Using this option will make browser wait for page load after click.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", use_waiter:true,use_timeout: true, use_move: true, use_emulation: true, visible:true, name: tr("Move And Click"), wiki: "how_to_click_on_x_y_coordinates"}) %>
  </script>

  <script type="text/template" id="type">
    <div class="container-fluid type">
      <%= _.template($('#input_constructor').html())({id:"TypeData", description:tr("Text to type"), default_selector: "string", disable_int:true, help: {description: tr("This could be any character sequence."), examples:[{code:"hello world!",description:tr("Input hello world!")},{code:"&lt;CONTROL&gt;V",description:tr("Paste text")},{code:"&lt;CONTROL&gt;A&lt;DELETE&gt;",description:tr("Clear input")},{code:"&lt;ESCAPE&gt;",description:tr("Press escape")}]}}) %>
      <%= _.template($('#block_start').html())({id: "SpecialKeys", name: tr("Special keys"), description: tr("")}) %>
        <%= _.template($('#special_buttons').html())({}) %>
      <%= _.template($('#block_end').html())() %>
      
      <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), description: tr("")}) %>
        <%= _.template($('#input_constructor').html())({id:"TypeInterval", description:tr("Interval in milliseconds"), default_selector: "int", disable_string:true, value_number: 100, step_number: 100, min_number: 0, max_number:10000, help: {description: tr("Interval between each key press in milliseconds. BAS uses different interval for every key which is close to this parameter. For example, if you set interval to 100, that could result following sequence: key #1, wait 91 millisecond, key #2, wait 117 millisecond, key #3, etc"), examples:[{code:"100",description:tr("Default value. Human like input emulation.")},{code:"0",description:tr("Text is entered instantly.")}]}}) %>
      <%= _.template($('#block_end').html())() %>
      

    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Type text inside element with focus.</div>
      <div class="tr tooltip-paragraph-fold">If you want to type inside specific element, click on it and choose "Type Text".</div>
      <div class="tr tooltip-paragraph-fold">This action is capable to input any characters including special keys like enter, backspace, insert, delete, etc.</div> 
      <div class="tr tooltip-paragraph-last-fold">If you want to type big text, use 0 interval or "Set Clipboard" and type &lt;CONTROL&gt;V text.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, use_waiter:true, use_timeout: true, name: tr("Type Text"), wiki: "how_to_type_text"}) %>
  </script>

  <script type="text/template" id="resize">
    <div class="container-fluid">
      <%= _.template($('#input_constructor').html())({id:"ResizeX", description:tr("Width"), default_selector: "int", disable_string:true,value_number: 1024, step_number: 1, min_number: 100, max_number:10000, help: {description: tr("Browser width in pixels")}}) %>
      <%= _.template($('#input_constructor').html())({id:"ResizeY", description:tr("Height"), default_selector: "int", disable_string:true,value_number: 768, step_number: 1, min_number: 100, max_number:10000, help: {description: tr("Browser height in pixels")}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Changes browser resolution. Standart value is 1024x600. If you want to get typical resolutions for different platforms, use service <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://fp.bablosoft.com'); return false;">fingerprint switcher</a>.</div>
      <span class="short-description tr">Changes browser resolution. Standart value is 1024x600.</span>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:false}) %>
  </script>

  <script type="text/template" id="proxy">
    <div class="container-fluid" >
      <%= _.template($('#input_constructor').html())({id:"ProxyText", description:tr("Proxy String"), default_selector: "string", disable_int:true, help: {description: tr("String with information about proxy. It may contain ip, port, proxy type in different formats. This string may also contain login and password, if it doesn't, auth can be set with \"Proxy Login\" and \"Proxy Password\" parameters."), examples:[{code:"210.10.10.10:1085"},{code:"username:password@210.10.10.10:1085"},{code:"socks5://210.10.10.10:1085"},{code:"socks:210.10.10.10:1085:username:password"},{code:"http:username:password:210.10.10.10:1085"},{code:"{{proxy}}", description: tr("Get from resource")},{code:tr("Empty string"),description:tr("Without proxy")}   ]}}) %>


      <%= _.template($('#input_constructor').html())({id:"ProxyType", description:tr("Proxy Type"), default_selector: "string", disable_int:true, value_string: "http", variants: ["http","socks5","auto<br/><span style='color:gray;font-size:small'>" + tr("Proxy type will be extracted from proxy line") + "</span>"], help: {description: tr("socks5 and http proxy types are supported."), examples:[{code:"socks"},{code:"socks5",description:tr("Same as socks")},{code:"http"},{code:"https",description:tr("Same as http")}]}}) %>
      <%= _.template($('#input_constructor').html())({id:"ProxyLogin", description:tr("Proxy Login. Can be blank."), default_selector: "string", disable_int:true, help: {description: tr("Proxy login, overrides login set in proxy string. Useful if you have many proxy with same login and password.")}}) %>
      <%= _.template($('#input_constructor').html())({id:"ProxyPassword", description:tr("Proxy password. Can be blank."), default_selector: "string", disable_int:true, help: {description: tr("Proxy password, overrides password set in proxy string. Useful if you have many proxy with same login and password.")}}) %>


    <%= _.template($('#block_start').html())({id: "SecuritySettings", name: tr("Security settings"), description: tr("Options below will help you to adjust different browser settings to match new proxy, for example: timezone and geolocation. Default settings will work fine.")}) %>

      <%= _.template($('#input_constructor').html())({id:"ChangeTimezone", description:tr("Change timezone"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true","false"], help: {description: tr("Change browser timezone according to proxy ip. For example, if proxy is located in United Kingdom, then browser timezone offset will be equal to 0(UTC+00:00). You can set timezone to custom value with 'Timezone' module."),examples:[{code:"true",description:tr("Change timezone.")},{code:"false",description:tr("Don't change timezone.")}]}}) %>

      <%= _.template($('#input_constructor').html())({id:"ChangeGeolocation", description:tr("Change geolocation"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true","false"], help: {description: tr("Change browser geolocation according to proxy ip. Location will be set to a point which is close to proxy longitude/latitude. You can set geolocation to custom value with 'Timezone' module."),examples:[{code:"true",description:tr("A browser request to access your geolocation will be accepted. Browser location will be set to proxy location.")},{code:"false",description:tr("Don't change geolocation. A browser request to access your geolocation will be rejected.")}]}}) %>

      <%= _.template($('#input_constructor').html())({id:"ChangeBrowserLanguage", description:tr("Change browser language"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true","false"], help: {description: tr("Change browser language according to country of proxy. This setting will change 'Accept-Language' header as well as navigator.language and navigator.languages javascript properties. By default language value will be equal to language and country code separated with dash, for example 'de-DE' for Germany. This value is valid, but most browsers uses more complicated strings. If you want to make BAS look like real browser, use FingerprintSwitcher service, it will set language to more natural value, for example for iPhone from Germany it will equal 'de, en;q=0.8, *;q=0.01'. You can also set this value explicitly by using 'Set Header' action"),examples:[{code:"true",description:tr("Change browser language according to proxy country.")},{code:"false",description:tr("Don't change browser language, default will be 'en-US,en;q=0.9'.")}]}}) %>

    <%= _.template($('#block_end').html())() %>


    <%= _.template($('#block_start').html())({id: "WebRTC", name: tr("WebRTC settings"), description: tr("The options below allow you to set a IPs exposed through WebRTC. Default settings will work fine.")}) %>

      <%= _.template($('#input_constructor').html())({id:"ChangeWebrtcIp", description:tr("WebRTC mode"), default_selector: "string", disable_int:true, value_string: "replace", variants: ["disable<br/><span style='color:gray;font-size:small'>" + tr("Disable WebRTC") + "</span>","enable<br/><span style='color:gray;font-size:small'>" + tr("Enable WebRTC, route all requests through proxy. Requires proxy to support UDP") + "</span>","replace<br/><span style='color:gray;font-size:small'>" + tr("Enable WebRTC, replace exposed IPs with specified values") + "</span>"], help: {description: tr("This option defines how WebRTC replacement will work. If you want to change it without setting proxy, please use 'Browser Settings' action."),examples:[{code:"disable",description:tr("Disable WebRTC API completely")},{code:"enable",description:tr("Enable WebRTC with all requests routed through the proxy. Ensure the proxy supports UDP for requests to complete successfully.")},{code:"replace",description:tr("Enable WebRTC, replace exposed IPs with values specified below.")}]}}) %>

      <%= _.template($('#input_constructor').html())({id:"PublicIPv4", description:tr("Public IPv4"), default_selector: "string", disable_int:true, value_string: "auto", variants: ["auto<br/><span style='color:gray;font-size:small'>" + tr("Detect external IPv4 automatically") + "</span>", "disable"], help: {description: tr("Specify the external IPv4 address which will be exposed through WebRTC. This option is applicable only when the 'WebRTC mode' is set to 'replace'. It is highly recommended to use the default value, 'auto', but you can also provide an exact IP address if needed. If you want to change it without setting proxy, please use 'Browser Settings' action."),examples:[{code:"auto",description:tr("Detect external IPv4 automatically based on settings located in 'IP detection tab'")},{code:"123.123.123.123",description:tr("Exact IPv4 address may be specified.")},{code:"disable",description:tr("Don't expose public IPv4 through WebRTC.")}]}}) %>

      <%= _.template($('#input_constructor').html())({id:"PublicIPv6", description:tr("Public IPv6"), default_selector: "string", disable_int:true, value_string: "auto", variants: ["auto<br/><span style='color:gray;font-size:small'>" + tr("Detect external IPv6 automatically") + "</span>", "disable"], help: {description: tr("Specify the external IPv6 address which will be exposed through WebRTC. This option is applicable only when the 'WebRTC mode' is set to 'replace'. It is highly recommended to use the default value, 'auto', but you can also provide an exact IP address if needed. If you want to change it without setting proxy, please use 'Browser Settings' action."),examples:[{code:"auto",description:tr("Detect external IPv6 automatically based on settings located in 'IP detection tab'. If proxy doesn't support IPv6, no address will be exposed.")},{code:"2001:0db8:85a3:0000:0000:8a2e:0370:7334",description:tr("Exact IPv6 address may be specified.")},{code:"disable",description:tr("Don't expose public IPv6 through WebRTC.")} ]}}) %>

      <%= _.template($('#input_constructor').html())({id:"PrivateIPv4", description:tr("Private IPv4"), default_selector: "string", disable_int:true, value_string: "local", variants: ["local<br/><span style='color:gray;font-size:small'>" + tr("Replace with local name, like 3cd88d80-5c8a-40c4-85e8-30b4078e78ec.local") + "</span>", "private class a<br/><span style='color:gray;font-size:small'>" + tr("10.0.0.0 - 10.255.255.255") + "</span>", "private class b<br/><span style='color:gray;font-size:small'>" + tr("172.16.0.0 - 172.31.255.255") + "</span>", "private class c<br/><span style='color:gray;font-size:small'>" + tr("192.168.0.0 - 192.168.255.255") + "</span>", "disable"], help: {description: tr("Specify the internal IPv4 address which will be exposed through WebRTC. This option is applicable only when the 'WebRTC mode' is set to 'replace'. If you want to change it without setting proxy, please use 'Browser Settings' action."),examples:[{code:"local",description:tr("Replace an exposed internal IPv4 address revealed by WebRTC with a randomly generated local address, like this: 3cd88d80-5c8a-40c4-85e8-30b4078e78ec.local")},{code:"private class a",description:tr("10.0.0.0 - 10.255.255.255")},{code:"private class b",description:tr("172.16.0.0 - 172.31.255.255")},{code:"private class c",description:tr("192.168.0.0 - 192.168.255.255")},{code:"123.123.123.123",description:tr("Exact IPv4 address may be specified.")},{code:"disable",description:tr("Don't expose private IPv4 through WebRTC.")}]}}) %>

      <%= _.template($('#input_constructor').html())({id:"PrivateIPv6", description:tr("Private IPv6"), default_selector: "string", disable_int:true, value_string: "local", variants: ["local<br/><span style='color:gray;font-size:small'>" + tr("Replace with local name, like 3cd88d80-5c8a-40c4-85e8-30b4078e78ec.local") + "</span>", "unique local address<br/><span style='color:gray;font-size:small'>" + tr("FD00:0000:0000:0000:0000:0000:0000:0000 - FDFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF") + "</span>", "disable"], help: {description: tr("Specify the internal IPv6 address which will be exposed through WebRTC. This option is applicable only when the 'WebRTC mode' is set to 'replace'. If you want to change it without setting proxy, please use 'Browser Settings' action."),examples:[{code:"local",description:tr("Replace an exposed internal IPv6 address revealed by WebRTC with a randomly generated local address, like this: 3cd88d80-5c8a-40c4-85e8-30b4078e78ec.local")},{code:"unique local address",description:tr("FD00:0000:0000:0000:0000:0000:0000:0000 - FDFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF")}, {code:"fd01:0db8:85a3:0000:0000:8a2e:0370:7334",description:tr("Exact IPv6 address may be specified.")},{code:"disable",description:tr("Don't expose private IPv6 through WebRTC.")}]}}) %>

      

    <%= _.template($('#block_end').html())() %>

      <%= _.template($('#block_start').html())({id: "DNS", name: tr("Custom DNS"), description: tr("Below are the available options for Chromium's built-in custom DNS implementation. In real browser, this feature is enabled by default, and it is recommended to keep it enabled to improve privacy and authenticity.")}) %>

      <%= _.template($('#input_constructor').html())({id:"DNSMode", description:tr("DNS mode"), default_selector: "string", disable_int:true, value_string: "System DNS. Through proxy", variants: ["Custom DNS. Directly<br/><span style='color:gray;font-size:small'>" + tr("Recomended if you want to use custom DNS") + "</span>","Custom DNS. Through proxy<br/><span style='color:gray;font-size:small'>" + tr("Proxy must support UDP") + "</span>", "System DNS. Through proxy<br/><span style='color:gray;font-size:small'>" + tr("Safe option") + "</span>"], help: {description: tr("By default, the browser uses a custom DNS implementation that supports additional DNS features. If these features are missing, websites may detect the absence. Rather than relying on native OS DNS functions (like getaddrinfo), the custom DNS sends requests directly via UDP or TCP. BAS provides an option to enable this custom DNS feature, allowing you to route DNS traffic through a proxy or send UDP packets directly. Enabling custom DNS also requires specifying a DNS server IP. Although custom DNS is generally more difficult for websites to detect, they may still recognize that you are using a DNS server different from your ISP's default."),examples:[{code:"Custom DNS. Directly",description:tr("This is recomended option if you want to use custom DNS. Use Chrome's built-in custom DNS implementation to make DNS requests locally (via UDP or TCP), while routing all other traffic through the proxy.")},{code:"Custom DNS. Through proxy",description:tr("Use Chrome's built-in custom DNS implementation to make DNS requests through proxy. Proxy must support UDP.")},{code:"System DNS. Through proxy",description:tr("Use the system DNS implementation. All DNS queries will be handled by the proxy server, which uses its own DNS. The hostname is sent to the proxy as part of this process.")}]}}) %>

      <%= _.template($('#input_constructor').html())({id:"CustomDNSIP", description:tr("DNS IP(only for custom DNS)"), default_selector: "string", disable_int:true, value_string: "1.1.1.1", help: {description: tr("Using the custom Chrome DNS implementation requires specifying a DNS IP address. Unlike the default method - where the hostname is sent to the proxy and the proxy performs the DNS lookup - this approach resolves IP addresses locally, making it necessary to configure a DNS server IP for the browser. A valid DNS IP address is required when using the 'Custom DNS' mode for proper DNS resolution. If 'System DNS' mode is selected, this setting will have no effect."),examples:[{code:"1.1.1.1",description:tr("Cloudflare DNS.")}]}}) %>

    <%= _.template($('#block_end').html())() %>

    <%= _.template($('#block_start').html())({id: "IPDetection", name: tr("IP detection"), description: tr("The options below allow you to set a custom URL for external IP detection. By default, the ip4.bablosoft.com and ip6.bablosoft.com urls will be used, which is reliable for most cases.")}) %>

        <%= _.template($('#input_constructor').html())({id:"DetectExternalIp", description:tr("Detect external IPv4"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true","false"], help: {description: tr("Detect proxy's IPv4 by querying external service. BAS will use an ip4.bablosoft.com url to detect external IPv4 and will set timezone, geolocation and IPv4 exposed by WebRTC according to correct IPv4 value."),examples:[{code:"true",description:tr("Use external IPv4 obtained by service.")},{code:"false",description:tr("Don't use external service, disable possibility to obtain IPv6 through WebRTC.")}]}}) %>

        <%= _.template($('#input_constructor').html())({id:"ServiceURL", description:tr("Service URL"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("This service URL is used to detect the external IPv4 address. The URL will be queried through the currently installed proxy, and the response must contain the external IPv4 address."),examples:[{code:tr("Empty string"),description:tr("Default service http://ip4.bablosoft.com/ will be used.")},{code:"http://url.com/",description:tr("Custom URL to detect external IPv4.")}]}}) %>

        <%= _.template($('#input_constructor').html())({id:"IpExtractionMethod", description:tr("IPv4 extraction method"), default_selector: "string", disable_int:true, value_string: "raw", variants: [{value:"raw",description:tr("Treat the entire response as an IPv4 address")}, {value:"regexp",description:tr("Use regexp to extract IPv4 from response")}, {value:"jsonpath",description:tr("Use JSONPath to extract IPv4 from response")}, {value:"xpath",description:tr("Use XPath to extract IPv4 from response")}], help: {description: tr("After receiving a response from the service URL, the IPv4 address will be extracted from the response. This parameter specifies the method for extracting the IPv4 address. The 'IPv4 extraction param' must also be specified in combination with this parameter. Depending on the method used, the param will be treated differently. For example, if the 'regexp' method is used, the param must contain a regular expression, and so on."),examples:[{code:"raw",description:tr("The entire response will be treated as the IPv4 address without any processing. Use this parameter if the service URL returns only the IPv4 address without any additional information.")}, {code:"regexp",description:tr("Use regular expression to extract IPv4 address from response.")}, {code:"jsonpath",description:tr("Use JSONPath to extract IPv4 address from response. Useful if response has JSON format.")}, {code:"xpath",description:tr("Use Xpath to extract IPv4 address from response. Useful if response has HTML or XML format.")} ]}}) %>

        <%= _.template($('#input_constructor').html())({id:"IpExtractionParam", description:tr("IPv4 extraction param"), default_selector: "string", disable_int:true, value_string: "", variants: [{value:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}",description:tr("Standard regexp to extract IPv4")}], help: {description: tr("After receiving a response from the service URL, the IPv4 address will be extracted from the response. This parameter specifies the param for extracting the IPv4 address. This param will be treated differently depending on 'IPv4 extraction method'. For example, if the 'regexp' method is used, this param must contain a regular expression, and so on."),examples:[{code:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}",description:tr("Use specified regular expression to extract IPv4 from response. In order to work correctly, 'regexp' must be specified as 'IPv4 extraction method'.")}, {code:"Your ip: (?P&lt;result&gt;.*)",description:tr("By default regexp will extract whole match. If you want to extract only certain part of the match, place it within in the group with name 'result'.")}, {code:"$.result.ip",description:tr("Use JSONPath to extract IPv4 address from response. This JSONPath will extract data from JSON like this {\"result\": {\"ip\": \"111.111.111.111\"}}. In order to work correctly, 'jsonpath' must be specified as 'IPv4 extraction method'.")}, {code:"//result/ip",description:tr("Use Xpath to extract IPv4 address from response. This Xpath will extract data from HTML like this &lt;result&gt;&lt;ip&gt;111.111.111.111&lt;/ip&gt;&lt;/result&gt;. In order to work correctly, 'xpath' must be specified as 'IPv4 extraction method'.")} ]}}) %>

        <%= _.template($('#block_start').html())({id: "IPv6", name: tr("IPv6"), description: tr("Verify if the proxy supports an IPv6 interface and, if available, detect the external IPv6 address.")}) %>

          <%= _.template($('#input_constructor').html())({id:"DetectExternalIpV6", description:tr("Detect external IPv6"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true","false"], help: {description: tr("Detect proxy's IPv6 by querying external service. BAS will use an ip6.bablosoft.com url to detect external IPv6 and will set IPv6 exposed by WebRTC according to detected value."),examples:[{code:"true",description:tr("Use external IPv6 obtained by service.")},{code:"false",description:tr("Don't use external service, don't expose IPv6 through WebRTC.")}]}}) %>

          <%= _.template($('#input_constructor').html())({id:"ServiceURLV6", description:tr("Service URL"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("This service URL is used to detect the external IPv6 address. The URL will be queried through the currently installed proxy, and the response must contain the external IPv6 address."),examples:[{code:tr("Empty string"),description:tr("Default service http://ip6.bablosoft.com/ will be used.")},{code:"http://url.com/",description:tr("Custom URL to detect external IPv6.")}]}}) %>

          <%= _.template($('#input_constructor').html())({id:"IpExtractionMethodV6", description:tr("IPv6 extraction method"), default_selector: "string", disable_int:true, value_string: "raw", variants: [{value:"raw",description:tr("Treat the entire response as an IPv6 address")}, {value:"regexp",description:tr("Use regexp to extract IPv6 from response")}, {value:"jsonpath",description:tr("Use JSONPath to extract IPv6 from response")}, {value:"xpath",description:tr("Use XPath to extract IPv6 from response")}], help: {description: tr("After receiving a response from the service URL, the IPv6 address will be extracted from the response. This parameter specifies the method for extracting the IPv6 address. The 'IPv6 extraction param' must also be specified in combination with this parameter. Depending on the method used, the param will be treated differently. For example, if the 'regexp' method is used, the param must contain a regular expression, and so on."),examples:[{code:"raw",description:tr("The entire response will be treated as the IPv6 address without any processing. Use this parameter if the service URL returns only the IPv6 address without any additional information.")}, {code:"regexp",description:tr("Use regular expression to extract IPv6 address from response.")}, {code:"jsonpath",description:tr("Use JSONPath to extract IPv6 address from response. Useful if response has JSON format.")}, {code:"xpath",description:tr("Use Xpath to extract IPv6 address from response. Useful if response has HTML or XML format.")} ]}}) %>

          <%= _.template($('#input_constructor').html())({id:"IpExtractionParamV6", description:tr("IPv6 extraction param"), default_selector: "string", disable_int:true, value_string: "", variants: [{value:"[0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4}){7}|(([0-9a-fA-F]{1,4}:){1,7}:)|(:([0-9a-fA-F]{1,4}:){1,7})|::",description:tr("Standard regexp to extract IPv6")}], help: {description: tr("After receiving a response from the service URL, the IPv6 address will be extracted from the response. This parameter specifies the param for extracting the IPv6 address. This param will be treated differently depending on 'IPv6 extraction method'. For example, if the 'regexp' method is used, this param must contain a regular expression, and so on."),examples:[{code:"[0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4}){7}|(([0-9a-fA-F]{1,4}:){1,7}:)|(:([0-9a-fA-F]{1,4}:){1,7})|::",description:tr("Use specified regular expression to extract IPv6 from response. In order to work correctly, 'regexp' must be specified as 'IPv6 extraction method'.")}, {code:"Your ip: (?P&lt;result&gt;.*)",description:tr("By default regexp will extract whole match. If you want to extract only certain part of the match, place it within in the group with name 'result'.")}, {code:"$.result.ip",description:tr("Use JSONPath to extract IPv6 address from response. This JSONPath will extract data from JSON like this {\"result\": {\"ip\": \"2001:0db8:85a3:0000:0000:8a2e:0370:7334\"}}. In order to work correctly, 'jsonpath' must be specified as 'IPv6 extraction method'.")}, {code:"//result/ip",description:tr("Use Xpath to extract IPv6 address from response. This Xpath will extract data from HTML like this &lt;result&gt;&lt;ip&gt;2001:0db8:85a3:0000:0000:8a2e:0370:7334&lt;/ip&gt;&lt;/result&gt;. In order to work correctly, 'xpath' must be specified as 'IPv6 extraction method'.")} ]}}) %>

        <%= _.template($('#block_end').html())() %>

    <%= _.template($('#block_end').html())() %>

      <%= _.template($('#ip_information').html())() %>

      <%= _.template($('#targetfields').html())({}) %>
    </div>

    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">By default browser works without proxy, this action sets browser proxy.</div>
      <div class="tr tooltip-paragraph-fold">Use resources if you want to take them from file, url or database.</div>
      <div class="tr tooltip-paragraph-fold">You can change proxy before or after browser created or page is loaded.</div> 
      <div class="tr tooltip-paragraph-fold">Proxy with empty parameter will reset it to default value(direct connection).</div>
      <div class="tr tooltip-paragraph-last-fold">'Security settings' will help you to adjust different browser settings to match new proxy, for example: timezone and geolocation. This will make your application less detectable, check information for each individual setting to understand what are they needed for. Default settings will work fine.</div>
    </div>

    <%= _.template($('#back').html())({action:"executeandadd",visible:true, wiki: "how_to_set_proxy"}) %>
  </script>

  <script type="text/template" id="Checksum_String"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "input",
		description: tr("String"),
		default_selector: "string",
		disable_int: true,
		value_string: "",
		help: {
			description: tr("The string for which needs to calculate the checksum."),
			examples: [
				{code: "hello"},
				{code: "Test string"},
				{code: "Hello World!"}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "algorithm",
		description: tr("Algorithm"),
		default_selector: "string",
		variants: [
			{value:"md5", description:"Message Digest 5 - 128-" + tr("bit hashing algorithm")},
			{value:"sha1", description:"Secure Hash Algorithm 1 - 160-" + tr("bit hashing algorithm")},
			{value:"sha-224", description:"Secure Hash Algorithm 2 - 224-" + tr("bit hashing algorithm")},
			{value:"sha-256", description:"Secure Hash Algorithm 2 - 256-" + tr("bit hashing algorithm")},
			{value:"sha-384", description:"Secure Hash Algorithm 2 - 384-" + tr("bit hashing algorithm")},
			{value:"sha-512", description:"Secure Hash Algorithm 2 - 512-" + tr("bit hashing algorithm")},
			{value:"sha3-224", description:"Secure Hash Algorithm 3 - 224-" + tr("bit hashing algorithm")},
			{value:"sha3-256", description:"Secure Hash Algorithm 3 - 256-" + tr("bit hashing algorithm")},
			{value:"sha3-384", description:"Secure Hash Algorithm 3 - 384-" + tr("bit hashing algorithm")},
			{value:"sha3-512", description:"Secure Hash Algorithm 3 - 512-" + tr("bit hashing algorithm")},
			{value:"shake-128", description:"Secure Hash Algorithm 3 - 128-" + tr("bit hashing algorithm") + " " + tr("with extendable result")},
			{value:"shake-256", description:"Secure Hash Algorithm 3 - 256-" + tr("bit hashing algorithm") + " " + tr("with extendable result")},
			{value:"keccak-224", description:"Keccak - 224-" + tr("bit hashing algorithm")},
			{value:"keccak-256", description:"Keccak - 256-" + tr("bit hashing algorithm")},
			{value:"keccak-384", description:"Keccak - 384-" + tr("bit hashing algorithm")},
			{value:"keccak-512", description:"Keccak - 512-" + tr("bit hashing algorithm")},
			{value:"blake2b-512", description:"Blake 2b - 512-" + tr("bit hashing algorithm")},
			{value:"blake2s-256", description:"Blake 2s - 256-" + tr("bit hashing algorithm")},
			{value:"blake3", description:"Blake 3 - 256-" + tr("bit hashing algorithm")},
			{value:"crc-16", description:"Cyclic Redundancy Check - 16-" + tr("bit hashing algorithm")},
			{value:"crc-32", description:"Cyclic Redundancy Check - 32-" + tr("bit hashing algorithm")},
		],
		disable_int: true,
		value_string: "sha-512",
		help: {
			description: tr("The name of the hashing algorithm. An algorithm is a set of rules used when hashing data."),
			examples: [
				{code:"md5", description:"Message Digest 5 - 128-" + tr("bit hashing algorithm")},
				{code:"sha1", description:"Secure Hash Algorithm 1 - 160-" + tr("bit hashing algorithm")},
				{code:"sha-512", description:"Secure Hash Algorithm 2 - 512-" + tr("bit hashing algorithm")},
				{code:"keccak-512", description:"Keccak - 512-" + tr("bit hashing algorithm")},
				{code:"blake3", description:"Blake 3 - 256-" + tr("bit hashing algorithm")}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>

		<%= _.template($('#checkbox').html())({id: "Check", title: tr("String is base64 encoded")}) %>

		<%= _.template($('#input_constructor').html())({
			id: "outputLength",
			description: tr("Shake result length"),
			default_selector: "int",
			variants: [
				{value:2, description:"16-" + tr("bit"), type:"int"},
				{value:4, description:"32-" + tr("bit"), type:"int"},
				{value:8, description:"64-" + tr("bit"), type:"int"},
				{value:16, description:"128-" + tr("bit"), type:"int"},
				{value:28, description:"224-" + tr("bit"), type:"int"},
				{value:32, description:"256-" + tr("bit"), type:"int"},
				{value:48, description:"384-" + tr("bit"), type:"int"},
				{value:64, description:"512-" + tr("bit"), type:"int"}
			],
			disable_string: true,
			value_number: "",
			min_number: 1,
			max_number: 999999,
			help: {
				description: tr("Optional parameter.") + " " + tr("The length of the raw checksum, used only for <code style=\"font-size:85%\">shake</code> algorithms. The length can be any integer that is greater than zero."),
				examples: [
					{code:2, description:"16-" + tr("bit")},
					{code:4, description:"32-" + tr("bit")},
					{code:8, description:"64-" + tr("bit")},
					{code:16, description:"128-" + tr("bit")},
					{code:28, description:"224-" + tr("bit")},
					{code:32, description:"256-" + tr("bit")},
					{code:48, description:"384-" + tr("bit")},
					{code:64, description:"512-" + tr("bit")},
					{code:tr("Empty string"), description:tr("Default length for the selected algorithm")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#input_constructor').html())({
		id: "outputEncoding",
		description: tr("Result format"),
		default_selector: "string",
		variants: [
			{value:"hex encoded", description:"5d41402abc4b2a76b9719d911017c592"},
			{value:"base64 encoded", description:"XUFAKrxLKna5cZ2REBfFkg=="},
		],
		disable_int: true,
		value_string: "hex encoded",
		help: {
			description: tr("The format in which the final checksum will be written to the specified variable."),
			examples: [
				{code: "hex encoded", description: tr("Each byte is encoded as 16-bit number converted to 2-byte string from <code style=\"font-size:85%\">00</code> to <code style=\"font-size:85%\">ff</code>. Example: <code style=\"font-size:85%\">5d41402abc4b2a76b9719d911017c592</code>")},
				{code: "</br>base64 encoded", description: tr("Raw hash data encoded in base64. Example: <code style=\"font-size:85%\">XUFAKrxLKna5cZ2REBfFkg==</code>")}
			]
		}
	}) %>
	<%= _.template($('#variable_constructor').html())({
		id: "Save",
		description: tr("Variable to save the result"),
		default_variable: "STRING_CHECKSUM",
		help: {
			description: tr("Variable in which, after successful execution of the action, the final checksum will be written."),
			examples: [
				{code: "3610a686", description: "<code style=\"font-size:85%\">crc-32</code> - <code style=\"font-size:85%\">hex encoded</code>"},
				{code: "hmQ3y3p5S84rcnrMA2LuJw==", description: "<code style=\"font-size:85%\">md4</code> - <code style=\"font-size:85%\">base64 encoded</code>"},
				{code: "5d41402abc4b2a76b9719d911017c592", description: "<code style=\"font-size:85%\">md5</code> - <code style=\"font-size:85%\">hex encoded</code>"},
				{code: "aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d", description: "<code style=\"font-size:85%\">sha1</code> - <code style=\"font-size:85%\">hex encoded</code>"},
				{code: "RVJOxFS8x9S490NQxKTmKAn8tJvCnfYuYbafpA==", description: "<code style=\"font-size:85%\">keccak-224</code> - <code style=\"font-size:85%\">base64 encoded</code>"}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Calculate the checksum of the specified string.</div>
	<div class="tr tooltip-paragraph-fold">This action will return string containing the final checksum in the specified format.</div>
	<div class="tr tooltip-paragraph-fold">Checksum is the value obtained as a result of data processing by a hash function, this function works according to a certain set of rules named an algorithm.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">Checksum for two identical</span> <span class="tr">strings</span> <span class="tr">will always be the same, and if the data is the slightest difference, the checksum will be different.</span></div>
	<div class="tr tooltip-paragraph-fold">In most cases, the checksum is used to check the integrity of data during transmission and storage, as well as to quickly compare a set of data. More information about checksums can be found in the <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/Checksum');return false">Wiki</a>.</div>
	<div class="tr tooltip-paragraph-fold">Result formats:</div>
	<div class="tooltip-paragraph-fold">hex encoded - <span class="tr">Each byte is encoded as 16-bit number converted to 2-byte string from <code style="font-size:85%">00</code> to <code style="font-size:85%">ff</code>. Example: <code style="font-size:85%">5d41402abc4b2a76b9719d911017c592</code></span>.</div>
	<div class="tooltip-paragraph-fold">base64 encoded - <span class="tr">Raw hash data encoded in base64. Example: <code style="font-size:85%">XUFAKrxLKna5cZ2REBfFkg==</code></span>.</div>
	<div class="tr tooltip-paragraph-fold">If the string is encoded in base64, activate the "String is base64 encoded" parameter located in the additional settings. In that case, string will be treated as raw data encoded in base64.</div>
	<div class="tr tooltip-paragraph-fold">For <code>shake</code> algorithms, you can specify the length of the raw checksum by filling in the "Shake result length" parameter located in the additional settings.</div>
	<div class="tr tooltip-paragraph-fold">You can get full list of supported hashing algorithms using the "Get list of algorithms" action.</div>
	<div class="tr tooltip-paragraph-fold">Algorithm <code>blake2b-512</code> is compatible with the NaCl and Sodium libraries.</div>
	<div class="tr tooltip-paragraph-fold">You can calculate the checksum for the file using the "File checksum" action.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>
</script><script type="text/template" id="Checksum_File"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "filePath",
		description: tr("File path"),
		default_selector: "string",
		disable_int: true,
		value_string: "",
		help: {
			description: tr("The path to the file for which needs to calculate the checksum."),
			examples: [
				{code:"{{file}}"},
				{code:"C:/test.txt"},
				{code:"D:/sqlite/your.db"},
				{code:"C:/Program Files/data.zip"}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "algorithm",
		description: tr("Algorithm"),
		default_selector: "string",
		variants: [
			{value:"md5", description:"Message Digest 5 - 128-" + tr("bit hashing algorithm")},
			{value:"sha1", description:"Secure Hash Algorithm 1 - 160-" + tr("bit hashing algorithm")},
			{value:"sha-224", description:"Secure Hash Algorithm 2 - 224-" + tr("bit hashing algorithm")},
			{value:"sha-256", description:"Secure Hash Algorithm 2 - 256-" + tr("bit hashing algorithm")},
			{value:"sha-384", description:"Secure Hash Algorithm 2 - 384-" + tr("bit hashing algorithm")},
			{value:"sha-512", description:"Secure Hash Algorithm 2 - 512-" + tr("bit hashing algorithm")},
			{value:"sha3-224", description:"Secure Hash Algorithm 3 - 224-" + tr("bit hashing algorithm")},
			{value:"sha3-256", description:"Secure Hash Algorithm 3 - 256-" + tr("bit hashing algorithm")},
			{value:"sha3-384", description:"Secure Hash Algorithm 3 - 384-" + tr("bit hashing algorithm")},
			{value:"sha3-512", description:"Secure Hash Algorithm 3 - 512-" + tr("bit hashing algorithm")},
			{value:"shake-128", description:"Secure Hash Algorithm 3 - 128-" + tr("bit hashing algorithm") + " " + tr("with extendable result")},
			{value:"shake-256", description:"Secure Hash Algorithm 3 - 256-" + tr("bit hashing algorithm") + " " + tr("with extendable result")},
			{value:"keccak-224", description:"Keccak - 224-" + tr("bit hashing algorithm")},
			{value:"keccak-256", description:"Keccak - 256-" + tr("bit hashing algorithm")},
			{value:"keccak-384", description:"Keccak - 384-" + tr("bit hashing algorithm")},
			{value:"keccak-512", description:"Keccak - 512-" + tr("bit hashing algorithm")},
			{value:"blake2b-512", description:"Blake 2b - 512-" + tr("bit hashing algorithm")},
			{value:"blake2s-256", description:"Blake 2s - 256-" + tr("bit hashing algorithm")},
			{value:"blake3", description:"Blake 3 - 256-" + tr("bit hashing algorithm")},
			{value:"crc-16", description:"Cyclic Redundancy Check - 16-" + tr("bit hashing algorithm")},
			{value:"crc-32", description:"Cyclic Redundancy Check - 32-" + tr("bit hashing algorithm")},
		],
		disable_int: true,
		value_string: "sha-512",
		help: {
			description: tr("The name of the hashing algorithm. An algorithm is a set of rules used when hashing data."),
			examples: [
				{code:"md5", description:"Message Digest 5 - 128-" + tr("bit hashing algorithm")},
				{code:"sha1", description:"Secure Hash Algorithm 1 - 160-" + tr("bit hashing algorithm")},
				{code:"sha-512", description:"Secure Hash Algorithm 2 - 512-" + tr("bit hashing algorithm")},
				{code:"keccak-512", description:"Keccak - 512-" + tr("bit hashing algorithm")},
				{code:"blake3", description:"Blake 3 - 256-" + tr("bit hashing algorithm")}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#input_constructor').html())({
			id: "outputLength",
			description: tr("Shake result length"),
			default_selector: "int",
			variants: [
				{value:2, description:"16-" + tr("bit"), type:"int"},
				{value:4, description:"32-" + tr("bit"), type:"int"},
				{value:8, description:"64-" + tr("bit"), type:"int"},
				{value:16, description:"128-" + tr("bit"), type:"int"},
				{value:28, description:"224-" + tr("bit"), type:"int"},
				{value:32, description:"256-" + tr("bit"), type:"int"},
				{value:48, description:"384-" + tr("bit"), type:"int"},
				{value:64, description:"512-" + tr("bit"), type:"int"}
			],
			disable_string: true,
			value_number: "",
			min_number: 0,
			max_number: 999999,
			help: {
				description: tr("Optional parameter.") + " " + tr("The length of the raw checksum, used only for <code style=\"font-size:85%\">shake</code> algorithms. The length can be any integer that is greater than zero."),
				examples: [
					{code:2, description:"16-" + tr("bit")},
					{code:4, description:"32-" + tr("bit")},
					{code:8, description:"64-" + tr("bit")},
					{code:16, description:"128-" + tr("bit")},
					{code:28, description:"224-" + tr("bit")},
					{code:32, description:"256-" + tr("bit")},
					{code:48, description:"384-" + tr("bit")},
					{code:64, description:"512-" + tr("bit")},
					{code:tr("Empty string"), description:tr("Default length for the selected algorithm")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#input_constructor').html())({
		id: "outputEncoding",
		description: tr("Result format"),
		default_selector: "string",
		variants: [
			{value:"hex encoded", description:"5d41402abc4b2a76b9719d911017c592"},
			{value:"base64 encoded", description:"XUFAKrxLKna5cZ2REBfFkg=="},
		],
		disable_int: true,
		value_string: "hex encoded",
		help: {
			description: tr("The format in which the final checksum will be written to the specified variable."),
			examples: [
				{code: "hex encoded", description: tr("Each byte is encoded as 16-bit number converted to 2-byte string from <code style=\"font-size:85%\">00</code> to <code style=\"font-size:85%\">ff</code>. Example: <code style=\"font-size:85%\">5d41402abc4b2a76b9719d911017c592</code>")},
				{code: "</br>base64 encoded", description: tr("Raw hash data encoded in base64. Example: <code style=\"font-size:85%\">XUFAKrxLKna5cZ2REBfFkg==</code>")}
			]
		}
	}) %>
	<%= _.template($('#variable_constructor').html())({
		id: "Save",
		description: tr("Variable to save the result"),
		default_variable: "FILE_CHECKSUM",
		help: {
			description: tr("Variable in which, after successful execution of the action, the final checksum will be written."),
			examples: [
				{code: "3610a686", description: "<code style=\"font-size:85%\">crc-32</code> - <code style=\"font-size:85%\">hex encoded</code>"},
				{code: "hmQ3y3p5S84rcnrMA2LuJw==", description: "<code style=\"font-size:85%\">md4</code> - <code style=\"font-size:85%\">base64 encoded</code>"},
				{code: "5d41402abc4b2a76b9719d911017c592", description: "<code style=\"font-size:85%\">md5</code> - <code style=\"font-size:85%\">hex encoded</code>"},
				{code: "aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d", description: "<code style=\"font-size:85%\">sha1</code> - <code style=\"font-size:85%\">hex encoded</code>"},
				{code: "RVJOxFS8x9S490NQxKTmKAn8tJvCnfYuYbafpA==", description: "<code style=\"font-size:85%\">keccak-224</code> - <code style=\"font-size:85%\">base64 encoded</code>"}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Calculate the checksum of the specified file.</div>
	<div class="tr tooltip-paragraph-fold">This action will return string containing the final checksum in the specified format.</div>
	<div class="tr tooltip-paragraph-fold">Checksum is the value obtained as a result of data processing by a hash function, this function works according to a certain set of rules named an algorithm.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">Checksum for two identical</span> <span class="tr">files</span> <span class="tr">will always be the same, and if the data is the slightest difference, the checksum will be different.</span></div>
	<div class="tr tooltip-paragraph-fold">In most cases, the checksum is used to check the integrity of data during transmission and storage, as well as to quickly compare a set of data. More information about checksums can be found in the <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/Checksum');return false">Wiki</a>.</div>
	<div class="tr tooltip-paragraph-fold">Result formats:</div>
	<div class="tooltip-paragraph-fold">hex encoded - <span class="tr">Each byte is encoded as 16-bit number converted to 2-byte string from <code style="font-size:85%">00</code> to <code style="font-size:85%">ff</code>. Example: <code style="font-size:85%">5d41402abc4b2a76b9719d911017c592</code></span>.</div>
	<div class="tooltip-paragraph-fold">base64 encoded - <span class="tr">Raw hash data encoded in base64. Example: <code style="font-size:85%">XUFAKrxLKna5cZ2REBfFkg==</code></span>.</div>
	<div class="tr tooltip-paragraph-fold">For <code>shake</code> algorithms, you can specify the length of the raw checksum by filling in the "Shake result length" parameter located in the additional settings.</div>
	<div class="tr tooltip-paragraph-fold">You can get full list of supported hashing algorithms using the "Get list of algorithms" action.</div>
	<div class="tr tooltip-paragraph-fold">Algorithm <code>blake2b-512</code> is compatible with the NaCl and Sodium libraries.</div>
	<div class="tr tooltip-paragraph-fold">You can calculate the checksum for the finished string using the "String checksum" action.</div>
	<div class="tr tooltip-paragraph-fold">If a resource is specified in the "File path" parameter, resource location will be used.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>
</script><script type="text/template" id="Checksum_GetAlgorithmsList"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({
		id: "Save",
		description: tr("Variable to save the result"),
		default_variable: "SUPPORTED_ALGORITHMS_LIST",
		help: {
			description: tr("Variable in which, after successful execution of the action, the list of supported hashing algorithms will be written."),
			examples: [
				{code: "[\"blake3\",\"crc32\",\"keccak512\",\"sha512\"]"}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get list of supported hashing algorithms.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a full list of the names of the supported hashing algorithms.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">Example</span>: <code>["blake3","crc32","keccak512","sha512"]</code></div>
	<div class="tr tooltip-paragraph-fold">The resulting list can be processed using actions from the "List" module.</div>
	<div class="tr tooltip-paragraph-last-fold">The resulting names of the algorithms can be used in the "String checksum" and "File checksum" actions.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="clickCaptchaElement"><div class="container-fluid">
  <%= _.template($('#path').html())({ selector }) %>
  <%= _.template($('#input_constructor').html())({ id: 'serviceName', description: tr('Service name'), variants: [ 'rucaptcha', '2captcha' ], value_string: 'rucaptcha', default_selector: 'string', disable_int: true, help: {
    description: tr('Captcha solving service name'),
    examples: [
      { code: 'rucaptcha', description: tr('Solve captcha using https://rucaptcha.com/ service') },
      { code: '2captcha', description: tr('Solve captcha using https://2captcha.com/ service') },
    ]
  }}) %>
  <%= _.template($('#input_constructor').html())({ id: 'serviceKey', description: tr('Service key'), disable_int: true, default_selector: 'string', help: {
    description: tr('Captcha solving service key. You can get it in your personal account of selected captcha solving service') 
  }}) %>
  <%= _.template($('#input_constructor').html())({ description: tr('Captcha description. Can be empty.'), value_string: '', default_selector: 'string', disable_int: true, id: 'textInstructions', help: {
    description: tr('If captcha has any description, it can be added with this field.'),
    examples: [
      { code: tr('Select all images where there is a plane') },
      { code: tr('Select all images where there is a boat') }
    ]
  }}) %>

  <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), description: tr(""), smaller_fonts: true}) %>
    <%= _.template($('#checkbox').html())({id: "emulateMouse", title: tr("Emulate mouse movements"), checked: true}) %>
    
    <%= _.template($('#input_constructor').html())({ description: tr('Task solution check interval'), default_selector: 'int', value_number: 5000, disable_string: true, id: 'taskWaitTimeout', help: {
      description: tr('Task solution check interval in milliseconds. With this parameter you can control the length of the pause between each new check of the captcha solution.'),
      examples: [
        { code: '600', description: tr('Wait for 600 milliseconds') },
        { code: '10000', description: tr('Wait for 10 seconds') },
        { code: '5000', description: tr('Wait for 5 seconds') }
      ]
    }}) %>
    <%= _.template($('#input_constructor').html())({ description: tr('Task solution check delay'), default_selector: 'int', value_number: 5000, disable_string: true, id: 'taskWaitDelay', help: {
      description: tr('Task solution check delay in milliseconds. With this parameter you can control the length of the pause between sending the task to the service and the start of waiting for a solution. Most often, captcha-solving services specify the required waiting time, in other cases you can specify any value convenient for you.'),
      examples: [
        { code: '600', description: tr('Wait for 600 milliseconds') },
        { code: '10000', description: tr('Wait for 10 seconds') },
        { code: '5000', description: tr('Wait for 5 seconds') }
      ]
    }}) %>
    <%= _.template($('#input_constructor').html())({ description: tr('Service URL'), default_selector: 'string', disable_int: true, value_string: '', id: 'serviceUrl', help: {
      description: tr('Service URL. Can be blank. You can use this option if the service you want is not on the list of available services. In this case, specify the name of the service that works on a similar API and use the address you need.'),
      examples: [
        { code: tr('Empty string'), description: tr('Use default service URL, http://rucaptcha.com for RuCaptcha, etc') },
        { code: 'http://127.0.0.1:8083', description: tr('Use custom service URL with port 8083') },
        { code: 'http://127.0.0.3:8080', description: tr('Use custom service URL with port 8080') },
      ]
    }}) %>

  <%= _.template($('#block_end').html())() %>

</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Solve any type of captcha that requires clicking on images.</div>
  <div class="tr tooltip-paragraph-fold">For <code>ReCaptcha</code> and <code>HCaptcha</code> solving it is recommended to use the <code>Solve Recaptcha 2.0</code> and <code>Solve HCaptcha</code> actions from the browser context menu, if it's possible. It is easier to use, and the captcha can be solved faster. Also, these actions can perform automatic submit of the solution. Use this action if other options don't suit you for some reason.</div>
  <div class="tr tooltip-paragraph-fold">This action allows you to solve any captcha that requires you to click on images according to specific instructions. These can be <code>ReCaptcha</code>, <code>HCaptcha</code> and other types. To solve such captchas, you need to send an image to the service containing elements to be clicked. If there is a description on the captcha or next to it, it is recommended to send it along with the image to avoid incorrect solutions.</div>
  <div class="tr tooltip-paragraph-fold">All services requires a service key which which must be obtained on the service website and entered in the <code>Service key</code> field.</div>
  <div class="tr tooltip-paragraph-fold">This action, unlike the <code>Solve captcha with clicks</code> action from the <code>Browser</code> module, performs clicks automatically, and you do not need to manually calculate the coordinates for clicks relative to the position of the element on the page. It is recommended to use this action.</div>
  <div class="tr tooltip-paragraph-fold">An important point - this action does not automatically confirm the solution of the captcha. You have to do it yourself. For example, if you solve <code>ReCaptcha2</code> using this method, you should click the checkbox yourself, and after clicking on the coordinates, click the <code>Next</code> or <code>Done</code> button.</div>
  <div class="tr tooltip-paragraph-fold">The <code>Task solution check interval</code> parameter is responsible for the frequency of sending requests to the service to check the captcha solution. The more you set the value, the longer BAS will wait before sending the next request. It is recommended to use a delay of at least 5 seconds.</div>
  <div class="tr tooltip-paragraph-fold">The <code>Task solution check delay</code> parameter is responsible for the duration of waiting before the BAS starts checking the captcha. First, the captcha sent to the service, then the BAS will wait for the specified time, after which the task status check itself will begin. Most services recommend waiting at least 5 seconds.</div>
  <div class="tr tooltip-paragraph-fold">If the required service is not in the list of available ones, but it works through an API similar to the selected service, then you can specify required server URL in the <code>Service URL</code> field located in the additional settings.</div>
  <div class="tr tooltip-paragraph-fold">If you use programs such as <code>CapMonster</code>, <code>XEvil</code> or similar software, you must fill in the <code>Service URL</code> field in accordance with the documentation for this software.</div>
  <div class="tr tooltip-paragraph-last-fold">Detailed documentation for solving such captchas can be found <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://2captcha.com/2captcha-api#coordinates');return false">here</a>.</div>
</div>
<%= _.template($('#back').html())({ action: 'executeandadd', visible: true, name: tr('Solve captcha with clicks') }) %></script><script type="text/template" id="clipboard_getclipboard"><div class="container-fluid">
  <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "CLIPBOARD_CONTENT"}) %>
  <%= _.template($('#input_constructor').html())({id:"MimeType", description:tr("Mime Type"), default_selector: "string", disable_int:true, value_string: "text/plain", variants:["text/plain", "text/html"]}) %>

  <%= _.template($('#checkbox').html())({id: "Check", title: tr("Save In Base64 Format")}) %>

</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Read data of the specified type from the clipboard.</div>
  <div class="tr tooltip-paragraph-last-fold">Clipboard is global to whole system and should be locked in multithreaded mode.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="clipboard_setclipboard"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Data"), default_selector: "string", disable_int:true}) %>
  <%= _.template($('#input_constructor').html())({id:"MimeType", description:tr("Mime Type"), default_selector: "string", disable_int:true, value_string: "text/plain", variants:["text/plain", "text/html"]}) %>
    
  <%= _.template($('#checkbox').html())({id: "Check", title: tr("Data Is In Base64 Format")}) %>

</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Write data of the specified type to the clipboard.</div>
  <div class="tr tooltip-paragraph-last-fold">Clipboard is global to whole system and should be locked in multithreaded mode.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="Database_GetGroupList">  <div class="container-fluid">

    <div class="col-xs-12">
      <form class="form-horizontal">
        <div class="form-group">
          <div class="col-xs-12">
            <div class="input-group">
              <span data-preserve="true" data-preserve-type="select" data-preserve-id="Table">
                <select class="form-control input-sm" id="Table" placeholder="Result">
                    <% _Schema.forEach(function(t){ %>
                     <option value="<%= t.id %>"><%= t.description %></option>
                    <% }) %>
                </select>
              </span>
              <span class="input-group-addon" style="font-size: smaller;">
                <span class="tr">Database table</span>
                <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-placement="bottom" data-html="true" title="<%= tr('Table name, for which operation will be applied') %>" ></i>

              </span>
            </div>
          </div>
        </div>
      </form>
    </div>

    <%= _.template($('#variable_constructor').html())({id:"GroupList", description:tr("Group list"), default_variable: "GROUP_LIST", help: {description: tr("After action completes, this variable will contain result as a list of strings. Each string describes one group with csv format. You can parse it with \"Parse Line\" action. First component is a group id, second is group name, and third - group description."),examples:[
  {code:"[\"5b1d2284644bc0759b5dfe15:GroupName1:GroupDescription1\", \"5b1d2284644bc0759b5dfe16:GroupName2:GroupDescription2\"]"},
]}
}) %>
  </div>

  <div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get group list from database.</div>
    <div class="tooltip-paragraph-fold tr">This action can be used to find group id and put records inside that group.</div>
    <div class="tr tooltip-paragraph-fold">Groups are analogous of files. Same as each file may contain several lines, each group may contain several records.</div>
    <div class="tooltip-paragraph-fold"><span class="tr">After action completes, variable will contain result as a list of strings. Each string describes one group with csv format. You can parse it with "Parse Line" action. First component is a group id, second is group name, and third - group description.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=iterateovergroups.png');return false">screen</a>).</div>
    <div class="tooltip-paragraph-fold tr">If you have created resource with type database, then you can select one or several groups to set data with which script will be working.</div>
    <div class="tooltip-paragraph-last-fold"><span class="tr">Groups are displayed and may be edited in database manager</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=grouplistlocation.png');return false">screen</a>).</div>
  </div>
  <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "tutorial3"}) %>
</script><script type="text/template" id="Database_CreateGroup"><div class="container-fluid">

  <div class="col-xs-12">
    <form class="form-horizontal">
      <div class="form-group">
        <div class="col-xs-12">
          <div class="input-group">
            <span data-preserve="true" data-preserve-type="select" data-preserve-id="Table">
              <select class="form-control input-sm" id="Table" placeholder="Result">
                  <% _Schema.forEach(function(t){ %>
                   <option value="<%= t.id %>"><%= t.description %></option>
                  <% }) %>
              </select>
            </span>
            <span class="input-group-addon" style="font-size: smaller;">
              <span class="tr">Database table</span>
              <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-placement="bottom" data-html="true" title="<%= tr('Table name, for which operation will be applied') %>" ></i>

            </span>
          </div>
        </div>
      </div>
    </form>
  </div>

    <%= _.template($('#input_constructor').html())({id:"Name", description:tr("Name"), default_selector: "string", disable_int:true,help: {description: tr("Group name, which you are creating. Can be any string.")}}) %>
    <%= _.template($('#input_constructor').html())({id:"Description", description:tr("Description"), default_selector: "string", disable_int:true,help: {description: tr("Group description, which you are creating. Can be any string.")}}) %>
    <%= _.template($('#variable_constructor').html())({id:"GroupId", description:tr("Group id"), default_variable: "NEW_GROUP_ID",help: {description: tr("Group id will be written to this variable after action will be completed. You can use this id to interact with this group letter, for example, delete it or change."),examples:[
  {code:"5b1d2284644bc0759b5dfe15"}
 
]}}) %>
</div>

<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Add new group to database.</div>
  <div class="tr tooltip-paragraph-fold">Groups are analogous of files. Same as each file may contain several lines, each group may contain several records.</div>
  <div class="tooltip-paragraph-fold tr">After this action is finished, you can use group identifier returned as variable to interact with group, for example, add records in group.</div>
  <div class="tooltip-paragraph-fold tr">If you have created resource with type database, then you can select one or several groups to set data with which script will be working.</div>
  <div class="tooltip-paragraph-fold tr">If script outputs some data like user accounts or parsed posts, a good practice would be to create group during script start(in function OnApplicationStart) and place all data inside this group. This will help to discern data for different script lauches.</div>
  <div class="tooltip-paragraph-last-fold"><span class="tr">Groups may be created manually in database manager</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=grouplist.png');return false">screen</a>).</div>
</div>


<%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "tutorial3"}) %>
</script><script type="text/template" id="Database_DeleteGroup">
  

  <div class="container-fluid">

    <div class="col-xs-12">
      <form class="form-horizontal">
        <div class="form-group">
          <div class="col-xs-12">
            <div class="input-group">
              <span data-preserve="true" data-preserve-type="select" data-preserve-id="Table">
                <select class="form-control input-sm" id="Table" placeholder="Result">
                    <% _Schema.forEach(function(t){ %>
                     <option value="<%= t.id %>"><%= t.description %></option>
                    <% }) %>
                </select>
              </span>
              <span class="input-group-addon" style="font-size: smaller;">
                <span class="tr">Database table</span>
                <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-placement="bottom" data-html="true" title="<%= tr('Table name, for which operation will be applied') %>" ></i>

              </span>
            </div>
          </div>
        </div>
      </form>
    </div>

    <%= _.template($('#input_constructor').html())({id:"GroupId", description:tr("Group id"), default_selector: "string", disable_int:true,help: {description: tr("Group id, which will be deleted. It can be obtained from \"Create Group\" action or from \"Get Group List\""),examples:[{code:"5b1d2284644bc0759b5dfe15"}]}}) %>

    <%= _.template($('#input_constructor').html())({id:"DeleteData", description:tr("Delete data from group"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true", "false"], help: {description: tr("Choose if all rows from selected group will be deleted with group."), examples:[
  {code:"true",description:tr("Delete group with data")},
  {code:"false",description:tr("Delete group without data")},
]}
                  }) %>

  </div>

  <div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Delete group from database.</div>
    <div class="tr tooltip-paragraph-fold">Groups are analogous of files. Same as each file may contain several lines, each group may contain several records.</div>
    <div class="tr tooltip-paragraph-fold">You can select, if you want to delete group with or without data.</div>
    <div class="tooltip-paragraph-last-fold"><span class="tr">Groups are displayed and may be edited in database manager</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=grouplistlocation.png');return false">screen</a>).</div>
  </div>

  <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "tutorial3"}) %>
</script><script type="text/template" id="Database_ChangeGroup"><div class="container-fluid">

  <div class="col-xs-12">
    <form class="form-horizontal">
      <div class="form-group">
        <div class="col-xs-12">
          <div class="input-group">
            <span data-preserve="true" data-preserve-type="select" data-preserve-id="Table">
              <select class="form-control input-sm" id="Table" placeholder="Result">
                  <% _Schema.forEach(function(t){ %>
                   <option value="<%= t.id %>"><%= t.description %></option>
                  <% }) %>
              </select>
            </span>
            <span class="input-group-addon" style="font-size: smaller;">
              <span class="tr">Database table</span>
              <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-placement="bottom" data-html="true" title="<%= tr('Table name, for which operation will be applied') %>" ></i>

            </span>
          </div>
        </div>
      </div>
    </form>
  </div>

    <%= _.template($('#input_constructor').html())({id:"GroupId", description:tr("Group id"), default_selector: "string", disable_int:true, 
      help: {
          description: tr("Group id, which will be changed. It can be obtained from \"Create Group\" action or from \"Get Group List\". Leave blank to change last created group."),examples:[
          {code:"5b1d2284644bc0759b5dfe15"},
          {code:tr("Empty string"),description: tr("Change group, which was created last with this script.")}
        ]}
}) %>
    <%= _.template($('#input_constructor').html())({id:"Name", description:tr("Name"), default_selector: "string", disable_int:true,help: {description: tr("New group name. Can be any string. Leave blank not to change the name.")}}) %>
    <%= _.template($('#input_constructor').html())({id:"Description", description:tr("Description"), default_selector: "string", disable_int:true,help: {description: tr("New group description. Can be any string. Leave blank not to change the description.")}}) %>

</div>

<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Change group name and description.</div>
  <div class="tr tooltip-paragraph-fold">Groups are analogous of files. Same as each file may contain several lines, each group may contain several records.</div>
  <div class="tooltip-paragraph-fold"><span class="tr">Possible usecase would be to create group for parsed posts and update parse date in its description with this action.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=dateingroupdescription.png');return false">screen</a>).</div>
  <div class="tooltip-paragraph-last-fold"><span class="tr">Groups may be created manually in database manager</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=grouplist.png');return false">screen</a>).</div>
</div>


<%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "tutorial3"}) %>
</script><script type="text/template" id="Database_CopyGroup">
  

  <div class="container-fluid">

    <div class="col-xs-12">
      <form class="form-horizontal">
        <div class="form-group">
          <div class="col-xs-12">
            <div class="input-group">
              <span data-preserve="true" data-preserve-type="select" data-preserve-id="Table">
                <select class="form-control input-sm" id="Table" placeholder="Result">
                    <% _Schema.forEach(function(t){ %>
                     <option value="<%= t.id %>"><%= t.description %></option>
                    <% }) %>
                </select>
              </span>
              <span class="input-group-addon" style="font-size: smaller;">
                <span class="tr">Database table</span>
                <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-placement="bottom" data-html="true" title="<%= tr('Table name, for which operation will be applied') %>" ></i>

              </span>
            </div>
          </div>
        </div>
      </form>
    </div>

    <%= _.template($('#input_constructor').html())({id:"GroupId", description:tr("Group id"), default_selector: "string", disable_int:true,help: {description: tr("Group id, which will be duplicated. It can be obtained from \"Create Group\" action or from \"Get Group List\". Leave blank to copy last created group."),examples:[{code:"5b1d2284644bc0759b5dfe15"},
          {code:tr("Empty string"),description: tr("Copy group, which was created last with this script.")}]}}) %>

    <%= _.template($('#variable_constructor').html())({id:"DuplicatedGroupId", description:tr("Result group id"), default_variable: "DUPLICATED_GROUP_ID",help: {description: tr("Group id will be written to this variable after action will be completed. You can use this id to interact with this group letter, for example, delete it or change."),examples:[
  {code:"5b1d2284644bc0759b5dfe15"}]}}) %>

  </div>

  <div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Duplicate group name, description and data.</div>
    <div class="tr tooltip-paragraph-fold">Groups are analogous of files. Same as each file may contain several lines, each group may contain several records.</div>
    <div class="tr tooltip-paragraph-fold">Duplicated group will have same name and description as original, but you can change it later with "Change Group" action.</div>
    <div class="tooltip-paragraph-last-fold"><span class="tr">Groups are displayed and may be edited in database manager</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=grouplistlocation.png');return false">screen</a>).</div>
  </div>

  <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "tutorial3"}) %>
</script><script type="text/template" id="Database_MoveRecordToGroup">
  

  <div class="container-fluid">

    <div class="col-xs-12">
      <form class="form-horizontal">
        <div class="form-group">
          <div class="col-xs-12">
            <div class="input-group">
              <span data-preserve="true" data-preserve-type="select" data-preserve-id="Table">
                <select class="form-control input-sm" id="Table" placeholder="Result">
                    <% _Schema.forEach(function(t){ %>
                     <option value="<%= t.id %>"><%= t.description %></option>
                    <% }) %>
                </select>
              </span>
              <span class="input-group-addon" style="font-size: smaller;">
                <span class="tr">Database table</span>
                <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-placement="bottom" data-html="true" title="<%= tr('Table name, for which operation will be applied') %>" ></i>

              </span>
            </div>
          </div>
        </div>
      </form>
    </div>

    <%= _.template($('#input_constructor').html())({id:"GroupId", description:tr("Group id"), default_selector: "string", disable_int:true,help: {description: tr("Group id, in which record will be moved. It can be obtained from \"Create Group\" action or from \"Get Group List\". Leave blank to delete record from all groups."),examples:[{code:"5b1d2284644bc0759b5dfe15"},
          {code:tr("Empty string"),description: tr("Remove record from all groups.")}]}}) %>

    <%= _.template($('#input_constructor').html())({id:"RecordId", description:tr("Record id"), default_selector: "string", disable_int:true,help: {description: tr("Record id, which will be moved to group. It can be obtained from resource with type \"Database\" or from list returned from \"Select Records\" action."),examples:[{code:"5b1d2284644bc0759b5dfe15"}]}}) %>

    <%= _.template($('#input_constructor').html())({id:"MoveType", description:tr("Record move type"), default_selector: "string", disable_int:true, value_string: "move", variants: ["move", "copy", "reference"], help: {description: tr("Choose a way, how you want to move record."), examples:[
  {code:"move",description:tr("Record will be removed from current group and will be added to a group filled in \"Group id\" field")},
  {code:"copy",description:tr("Record will be copied to a group filled in \"Group id\" field. Old copy will remain, so there will two same records after action completes.")},
  {code:"reference",description:tr("A reference to record will be created. Unlike copy, if you use reference and change record, old one will change too.")},

  ]}}) %>

    <%= _.template($('#variable_constructor').html())({id:"MovedRecordId", description:tr("Record id after move"), default_variable: "MOVED_RECORD_ID",help: {description: tr("This variable will contain id of moved record.")}
}) %>

  </div>

  <div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Move or copy action to other group.</div>
    <div class="tr tooltip-paragraph-fold">Groups are analogous of files. Same as each file may contain several lines, each group may contain several records.</div>
    <div class="tr tooltip-paragraph-fold">You can choose move type by changing field "Record move type". It gives possibility to move or copy or make a reference of existing record.</div>
    <div class="tr tooltip-paragraph-fold">By lefting group id empty you can remove record from all groups. This won't remove record from database, record will still be available in group "All". If you want to remove it completely, use "Delete Record" action.</div>
    <div class="tooltip-paragraph-last-fold"><span class="tr">Groups are displayed and may be edited in database manager</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=grouplistlocation.png');return false">screen</a>).</div>
  </div>

  <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "tutorial3"}) %>
</script><script type="text/template" id="Database_InsertRecord"><div class="container-fluid">
	<div class="col-xs-12">
      <form class="form-horizontal">
        <div class="form-group">
          <div class="col-xs-12">
            <div class="input-group">
              <span data-preserve="true" data-preserve-type="select" data-preserve-id="Table">
                <select class="form-control input-sm" id="Table" placeholder="Result">
                    <% _Schema.forEach(function(t){ %>
                     <option value="<%= t.id %>"><%= t.description %></option>
                    <% }) %>
                </select>
              </span>
              <span class="input-group-addon" style="font-size: smaller;">
                <span class="tr">Database table</span>
                <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-placement="bottom" data-html="true" title="<%= tr('Table name, for which operation will be applied') %>" ></i>

              </span>
            </div>
          </div>
        </div>
      </form>
    </div>

    <%= _.template($('#input_constructor').html())({id:"GroupId", description:tr("Group id"), default_selector: "string", disable_int:true, help: {description: tr("Group id where record will be inserted. It can be obtained from \"Create Group\" action or from \"Get Group List\". Leave blank to insert in last created group."),examples:[{code:"5b1d2284644bc0759b5dfe15"},{code:tr("Empty string"),description: tr("Insert record in last created group.")}]}
  }) %>

    <%= _.template($('#input_constructor').html())({id:"AddToResources", description:tr("Add record to resources"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true", "false"], help: {description: tr("Select if you want to add new record to resources system besides database. If there is no resource connected to current table, this setting will do nothing."), examples:[
  {code:"true",description:tr("Add record to resources and to database")},
  {code:"false",description:tr("Add record only to database")},
]}}) %>

    <% _Schema.forEach(function(t){ %>
        <% t["columns"].forEach(function(c){ %>
          <span data-table-id="<%= t["id"] %>" style="<%= (t["id"] != _Schema[0]["id"])?"display:none":"" %>" data-id="<%= c["id"] %>">
            <% if(c["type"] == "string"){ %>
              <%= _.template($('#input_constructor').html())({id:"Table_" + t["id"] + "_Column_" + c["id"], description:c["description"], default_selector: "string", disable_int:true, help: {description: tr("Field with type string.")}}) %>          
            <% } %>
            <% if(c["type"] == "int"){ %>
              <%= _.template($('#input_constructor').html())({id:"Table_" + t["id"] + "_Column_" + c["id"], description:c["description"], default_selector: "int", disable_string:true, min_number: -999999, help: {description: tr("Field with type integer.")}}) %>          
            <% } %>
            <% if(c["type"] == "bool"){ %>
              <%= _.template($('#input_constructor').html())({id:"Table_" + t["id"] + "_Column_" + c["id"], description:c["description"], size:4, default_selector: "string", disable_int:true, value_string: "true", variants: ["true","false"], help: {description: tr("Field with type boolean. Could be true or false.")}}) %>          
            <% } %>
            <% if(c["type"] == "date"){ %>
              <%= _.template($('#input_constructor').html())({id:"Table_" + t["id"] + "_Column_" + c["id"], description:c["description"], default_selector: "expression", disable_string:true, help: {description: tr("Field with type date. You can set it by filling this field with milliseconds from 1 january 1970, or leave blank to use current date."), examples:[
                {code:"1528756932119", description:tr("Exact date value")},
                {code:tr("Empty string"), description:tr("Current date")},
                {code:"Date.now()", description:tr("Current date")},
                {code:"Date.now() - 5 * 60 * 1000", description:tr("5 minutes before current date")}

                ]}}) %>          
            <% } %>
          </span>
        <% }) %>      
    <% }) %>

    <%= _.template($('#variable_constructor').html())({id:"Record", description:tr("New Record id"), default_variable: "NEW_RECORD_ID",help: {description: tr("Record id will be written to this variable after action will be completed. You can use this id to interact with this record letter, for example, delete it or change."),examples:[
  {code:"5b1d2284644bc0759b5dfe15"}]}}) %>

    
</div>

<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Insert new record to database.</div>
  <div class="tooltip-paragraph-fold tr">By default this action doesn't synchronize database and resources, if you want to insert record to resources besides database, you need to check "Add record to resources" field.</div>
  <div class="tr tooltip-paragraph-fold">You can also insert record with "Add Element" action from resource module. In fact you can use only resources system to interact with database.</div>
  <div class="tooltip-paragraph-fold tr">This action returns id of inserted record, you can use it to manipulate record later.</div>
  <div class="tooltip-paragraph-fold tr">It is synchronous, so feel free to use action in several threads.</div>
  <div class="tooltip-paragraph-fold tr">Action contains all fields, that you added in database manager. You can fill it, all values will be delivered into database.</div>
  <div class="tooltip-paragraph-last-fold tr">Records are displayed and may be edited in database manager.</div>

</div>


<%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "tutorial3"}) %>
</script><script type="text/template" id="Database_UpdateRecord"><div class="container-fluid">
  <div class="col-xs-12">
      <form class="form-horizontal">
        <div class="form-group">
          <div class="col-xs-12">
            <div class="input-group">
              <span data-preserve="true" data-preserve-type="select" data-preserve-id="Table">
                <select class="form-control input-sm" id="Table" placeholder="Result">
                    <% _Schema.forEach(function(t){ %>
                     <option value="<%= t.id %>"><%= t.description %></option>
                    <% }) %>
                </select>
              </span>
              <span class="input-group-addon" style="font-size: smaller;">
                <span class="tr">Database table</span>
                <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-placement="bottom" data-html="true" title="<%= tr('Table name, for which operation will be applied') %>" ></i>

              </span>
            </div>
          </div>
        </div>
      </form>
    </div>

    <%= _.template($('#input_constructor').html())({id:"RecordId", description:tr("Record id"), default_selector: "string", disable_int:true,help: {description: tr("Record id, which will updated. It can be obtained from resource with type \"Database\" or from list returned from \"Select Records\" action."),examples:[{code:"5b1d2284644bc0759b5dfe15"},{code:tr("Empty string"), description:tr("Update last record obtained as resource.")}]}}) %>

    <%= _.template($('#input_constructor').html())({id:"UpdateResources", description:tr("Update resources"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true", "false"], help: {description: tr("Select if you want to update record in resources system besides database. If there is no resource connected to current table, this setting will do nothing."), examples:[
      {code:"true",description:tr("Update record in resources and in database")},
      {code:"false",description:tr("Update record only in database")},
    ]}}) %>

    <% _Schema.forEach(function(t){ %>
        <% t["columns"].forEach(function(c){ %>
          <span data-table-id="<%= t["id"] %>" style="<%= (t["id"] != _Schema[0]["id"])?"display:none":"" %>" data-id="<%= c["id"] %>">
            <% if(c["type"] == "string"){ %>
              <%= _.template($('#input_constructor').html())({id:"Table_" + t["id"] + "_Column_" + c["id"], description:c["description"], default_selector: "string", disable_int:true, help: {description: tr("Field with type string. Leave it blank to not update that field. If you want to update this field with empty string, change field type to \"expression\" and fill it with two quotes \"\"")}}) %>          
            <% } %>
            <% if(c["type"] == "int"){ %>
              <%= _.template($('#input_constructor').html())({id:"Table_" + t["id"] + "_Column_" + c["id"], description:c["description"], default_selector: "expression",value_string: "", disable_string:true, min_number: -999999, help: {description: tr("Field with type integer. Leave it blank to not update that field.")}}) %>          
            <% } %>
            <% if(c["type"] == "bool"){ %>
              <%= _.template($('#input_constructor').html())({id:"Table_" + t["id"] + "_Column_" + c["id"], description:c["description"], size:4, default_selector: "string", disable_int:true, variants: ["true","false"], help: {description: tr("Field with type boolean. Could be true or false. Leave it blank to not update that field.")}}) %>          
            <% } %>
            <% if(c["type"] == "date"){ %>
              <%= _.template($('#input_constructor').html())({id:"Table_" + t["id"] + "_Column_" + c["id"], description:c["description"], default_selector: "expression", disable_string:true, help: {description: tr("Field with type date. Leave it blank to not update that field. You can set it by filling this field with milliseconds from 1 january 1970"), examples:[
                {code:"1528756932119", description:tr("Exact date value")},
                {code:"Date.now()", description:tr("Current date")},
                {code:"Date.now() - 5 * 60 * 1000", description:tr("5 minutes before current date")}

                ]}}) %>          
            <% } %>
          </span>
        <% }) %>      
    <% }) %>


    
</div>

<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Update record from database.</div>
  
  <div class="tooltip-paragraph-fold tr">If you want to update only certain fields, leave other fields blank. Those that will be blank won't be updated. If you want to update field of string type with empty string, change field type to "expression" and fill it with two quotes "".</div>

  <div class="tooltip-paragraph-fold tr">This action only updates single record, if you wan't to update several fields, use "Update Records By Criteria" action.</div>

  <div class="tooltip-paragraph-fold tr">By default this action doesn't synchronize database and resources, if you want to update record in resources besides database, you need to check "Update resources" field.</div>
  <div class="tooltip-paragraph-fold tr">This action doesn't change id of updated record.</div>
  <div class="tooltip-paragraph-fold tr">It is synchronous, so feel free to use action in several threads.</div>
  <div class="tooltip-paragraph-fold tr">Action contains all fields, that you added in database manager. You can fill it, all values will be delivered into database.</div>
  <div class="tooltip-paragraph-last-fold tr">Records are displayed and may be edited in database manager.</div>

</div>

<%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "tutorial3"}) %>
</script><script type="text/template" id="Database_UpdateRecordsByCriteria"><span id="action-add">

  <div class="container-fluid">
    <div class="col-xs-12">
        <form class="form-horizontal">
          <div class="form-group">
            <div class="col-xs-12">
              <div class="input-group">
                <span data-preserve="true" data-preserve-type="select" data-preserve-id="Table">
                  <select class="form-control input-sm" id="Table" placeholder="Result">
                      <% _Schema.forEach(function(t){ %>
                       <option value="<%= t.id %>"><%= t.description %></option>
                      <% }) %>
                  </select>
                </span>
                <span class="input-group-addon" style="font-size: smaller;">
                  <span class="tr">Database table</span>
                  <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-placement="bottom" data-html="true" title="<%= tr('Table name, for which operation will be applied') %>" ></i>

                </span>
              </div>
            </div>
          </div>
        </form>
      </div>

      <div class="container-fluid" id="database-filters" style="margin-top:10px;">
        <div class="col-xs-12">
          <button type="button" class="btn btn-default btn-sm" id="database-filters-add"><i class="fa fa-filter" aria-hidden="true"></i> <span class="tr">Add filter</span></button>
          <button type="button" class="btn btn-default btn-sm" id="database-filters-clear"><i class="fa fa-eraser" aria-hidden="true"></i> <span class="tr">Remove all filters</span></button>
          
        </div>
      </div>
      <div class="container-fluid" id="database-filters" >
        <div class="col-xs-12">
      
          <div id="database-filters-data" style="margin-bottom:5px">
          </div>
        </div>
      </div>

      <%= _.template($('#input_constructor').html())({id:"GroupId", description:tr("Filter by group"), default_selector: "string", disable_int:true,help: {description: tr("Additional filter by group id. It can be obtained from \"Create Group\" action or from \"Get Group List\". Leave blank not to apply filter by group."),examples:[{code:"5b1d2284644bc0759b5dfe15",description: tr("Action will be applied only to exact group and which matches other filters.")},
          {code:tr("Empty string"),description: tr("Action will be applied to records which matches other filters.")}]}}) %>

      <%= _.template($('#input_constructor').html())({id:"UpdateResources", description:tr("Update resources"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true", "false"], help: {description: tr("Select if you want to update records in resources system besides database. If there is no resource connected to current table, this setting will do nothing."), examples:[
        {code:"true",description:tr("Update records in resources and in database")},
        {code:"false",description:tr("Update records only in database")},
      ]}}) %>

      <% _Schema.forEach(function(t){ %>
          <% t["columns"].forEach(function(c){ %>
            <span data-table-id="<%= t["id"] %>" style="<%= (t["id"] != _Schema[0]["id"])?"display:none":"" %>" data-id="<%= c["id"] %>">
              <% if(c["type"] == "string"){ %>
                <%= _.template($('#input_constructor').html())({id:"Table_" + t["id"] + "_Column_" + c["id"], description:c["description"], default_selector: "string", disable_int:true, help: {description: tr("Field with type string. Leave it blank to not update that field. If you want to update this field with empty string, change field type to \"expression\" and fill it with two quotes \"\"")}}) %>          
              <% } %>
              <% if(c["type"] == "int"){ %>
                <%= _.template($('#input_constructor').html())({id:"Table_" + t["id"] + "_Column_" + c["id"], description:c["description"], default_selector: "expression",value_string: "", disable_string:true, min_number: -999999, help: {description: tr("Field with type integer. Leave it blank to not update that field.")}}) %>          
              <% } %>
              <% if(c["type"] == "bool"){ %>
                <%= _.template($('#input_constructor').html())({id:"Table_" + t["id"] + "_Column_" + c["id"], description:c["description"], size:4, default_selector: "string", disable_int:true, variants: ["true","false"], help: {description: tr("Field with type boolean. Could be true or false. Leave it blank to not update that field.")}}) %>          
              <% } %>
              <% if(c["type"] == "date"){ %>
                <%= _.template($('#input_constructor').html())({id:"Table_" + t["id"] + "_Column_" + c["id"], description:c["description"], default_selector: "expression", disable_string:true, help: {description: tr("Field with type date. Leave it blank to not update that field. You can set it by filling this field with milliseconds from 1 january 1970"), examples:[
                  {code:"1528756932119", description:tr("Exact date value")},
                  {code:"Date.now()", description:tr("Current date")},
                  {code:"Date.now() - 5 * 60 * 1000", description:tr("5 minutes before current date")}

                  ]}}) %>          
              <% } %>
            </span>
          <% }) %>      
      <% }) %>


      
  </div>

  <div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Update records from database.</div>
    
    <div class="tooltip-paragraph-fold tr">This action affects all records matching criteria, be carefull, if you forget to set criteria, all records in database will be changed. If you want to update single record, use "Update One Record" action.</div>

    <div class="tooltip-paragraph-fold tr">By clicking on "Add filter" button you can modify filters. You can add as many filters as you like. Only records that matches all filters will be affected by this action.</div>

    <div class="tooltip-paragraph-fold tr">Filters may also include groups. If you fill group id, this action will be applied to records in that group and which matches other filters.</div>

    <div class="tooltip-paragraph-fold tr">If you want to update only certain fields, leave other fields blank. Those that will be blank won't be updated. If you want to update field of string type with empty string, change field type to "expression" and fill it with two quotes "".</div>

    
    <div class="tooltip-paragraph-fold tr">By default this action doesn't synchronize database and resources, if you want to update record in resources besides database, you need to check "Update resources" field.</div>
    <div class="tooltip-paragraph-fold tr">It may take a lot of time if you are updating a lot of records.</div>
    <div class="tooltip-paragraph-fold tr">This action doesn't change id of updated records.</div>
    <div class="tooltip-paragraph-fold tr">It is synchronous, so feel free to use action in several threads.</div>
    <div class="tooltip-paragraph-fold tr">Action contains all fields, that you added in database manager. You can fill it, all values will be delivered into database.</div>
    <div class="tooltip-paragraph-last-fold tr">Records are displayed and may be edited in database manager.</div>

  </div>

  <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "tutorial3"}) %>
</span>
<span id="filter-add" style="display:none">

<div class="container-fluid">
  <div class="col-xs-12">

    <span class="tr">Field</span>:
    <select class="form-control input-sm" id="FilterFieldInput">
    </select>
    <span class="tr">Filter type</span>:
    <select class="form-control input-sm" id="FilterTypeInput">
    </select>
  </div>
</div>
<div style="margin-top:10px" id="FiledValueInput">
    <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Value"), default_selector: "string"}) %>
</div>



<div class="container-fluid" style="margin-top:0px">
  <div class="col-xs-12">

    <button type="button" class="btn btn-primary filterok standartbutton tr" style="margin-top:5px" >Ok</button>
    <button type="button" class="btn btn-default filtercancel standartbutton tr" style="margin-top:5px" >Cancel</button>
  </div>
</div>



</span>
</script><script type="text/template" id="Database_SelectOne"><div class="container-fluid">
  <div class="col-xs-12">
      <form class="form-horizontal">
        <div class="form-group">
          <div class="col-xs-12">
            <div class="input-group">
              <span data-preserve="true" data-preserve-type="select" data-preserve-id="Table">
                <select class="form-control input-sm" id="Table" placeholder="Result">
                    <% _Schema.forEach(function(t){ %>
                     <option value="<%= t.id %>"><%= t.description %></option>
                    <% }) %>
                </select>
              </span>
              <span class="input-group-addon" style="font-size: smaller;">
                <span class="tr">Database table</span>
                <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-placement="bottom" data-html="true" title="<%= tr('Table name, for which operation will be applied') %>" ></i>

              </span>
            </div>
          </div>
        </div>
      </form>
    </div>

    <%= _.template($('#input_constructor').html())({id:"RecordId", description:tr("Record id"), default_selector: "string", disable_int:true,help: {description: tr("Record id, which will be selected. It can be obtained from resource with type \"Database\" or from list returned from \"Select Records\" action."),examples:[{code:"5b1d2284644bc0759b5dfe15"}]}}) %>

    <%= _.template($('#variable_constructor').html())({id:"RecordString", description:tr("Record"), default_variable: "RECORD_STRING_CSV", help: {description: tr("After action completes, this variable will contain a string in csv format. You can extract different columns of a record with \"Parse Line\" action. Record columns are components of resulting cvs in a same order as defined in database, plus the last component is always record id."),examples:[
  {code:"Cell11:Cell12:5b1d2284644bc0759b5dfe15"},
  {code:tr("Empty string"),description: tr("No record found")}
]}}) %>
    


</div>

<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Select one database record by id.</div>
  
  <div class="tooltip-paragraph-fold tr">This action only selects single record, if you wan't to select more than one or use filters, use "Select Records By Criteria" action.</div>

  <div class="tooltip-paragraph-fold"><span class="tr">After action completes, variable will contain a string in csv format. You can extract different columns of a record with "Parse Line" action. Record columns are components of resulting cvs in a same order as defined in database, plus the last component is always record id.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=parsedatabaserecord.png');return false">screen</a>).</div>

    <div class="tooltip-paragraph-fold"><span class="tr">You can also read from database with resources system. You need to define resource of type "Database" and use it in any field.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=usedatabaseinanyfield.png');return false">screen</a>)</div>

    <div class="tooltip-paragraph-fold tr">You can also create resource of type "Database" and read all content with "Resource To List" action. Main advantage of resource system is ability to distribute data across threads.</div>

    <div class="tooltip-paragraph-fold tr">It is synchronous, so feel free to use action in several threads.</div>
    <div class="tooltip-paragraph-last-fold tr">Records are displayed and may be edited in database manager.</div>

</div>

<%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "tutorial3"}) %>
</script><script type="text/template" id="Database_SelectRecords"><span id="action-add">
  <div class="container-fluid">
    <div class="col-xs-12">
        <form class="form-horizontal">
          <div class="form-group">
            <div class="col-xs-12">
              <div class="input-group">
                <span data-preserve="true" data-preserve-type="select" data-preserve-id="Table">
                  <select class="form-control input-sm" id="Table" placeholder="Result">
                      <% _Schema.forEach(function(t){ %>
                       <option value="<%= t.id %>"><%= t.description %></option>
                      <% }) %>
                  </select>
                </span>
                <span class="input-group-addon" style="font-size: smaller;">
                  <span class="tr">Database table</span>
                  <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-placement="bottom" data-html="true" title="<%= tr('Table name, for which operation will be applied') %>" ></i>

                </span>
              </div>
            </div>
          </div>
        </form>
      </div>

      <div class="container-fluid" id="database-filters" style="margin-top:10px">
        <div class="col-xs-12">
          <button type="button" class="btn btn-default btn-sm" id="database-filters-add"><i class="fa fa-filter" aria-hidden="true"></i> <span class="tr">Add filter</span></button>
          <button type="button" class="btn btn-default btn-sm" id="database-filters-clear"><i class="fa fa-eraser" aria-hidden="true"></i> <span class="tr">Remove all filters</span></button>
          
        </div>
      </div>
      <div class="container-fluid" id="database-filters" >
        <div class="col-xs-12">
      
          <div id="database-filters-data" style="margin-bottom:5px">
          </div>
        </div>
      </div>
  </div>

  <div class="container-fluid">

    <%= _.template($('#input_constructor').html())({id:"GroupId", description:tr("Filter by group"), default_selector: "string", disable_int:true,help: {description: tr("Additional filter by group id. It can be obtained from \"Create Group\" action or from \"Get Group List\". Leave blank not to apply filter by group."),examples:[{code:"5b1d2284644bc0759b5dfe15",description: tr("Action will be applied only to exact group and which matches other filters.")},
          {code:tr("Empty string"),description: tr("Action will be applied to records which matches other filters.")}]}}) %>

  <%= _.template($('#line').html())() %>

    <%= _.template($('#input_constructor').html())({id:"PageNumber", description:tr("Page number"), default_selector: "int", disable_string:true, value_number: 1,help: {description: tr("This value starts from 1 and indicates page number. Page number and page size together set limit and offset of result record list."),examples:[
  {code:tr("Page number - 1, page size - 1000"),description:tr("Gets 1 - 1000 record from database")},
  {code:tr("Page number - 2, page size - 1000"),description:tr("Gets 1001 - 2000 record from database")},
  {code:tr("Page number - 1, page size - 100"),description:tr("Gets 1 - 100 record from database")},
]}
}) %>
    <%= _.template($('#input_constructor').html())({id:"PageSize", description:tr("Page size"), default_selector: "int", disable_string:true, value_number: 1000,help: {description: tr("This value sets maximum list size that you can obtain with this action. Works together with page number, which sets offset. If page number equals one, than this value limits number of results."),examples:[
  {code:tr("Page number - 1, page size - 1000"),description:tr("Gets 1 - 1000 record from database")},
  {code:tr("Page number - 2, page size - 1000"),description:tr("Gets 1001 - 2000 record from database")},
  {code:tr("Page number - 1, page size - 100"),description:tr("Gets 1 - 100 record from database")},
]}
}) %>
      <%= _.template($('#line').html())() %>


      <%= _.template($('#input_constructor').html())({id:"SortingType", description:tr("Sorting type"), default_selector: "string", disable_int:true, value_string: "no sorting", variants: ["no sorting", "ascending", "descending"], help: {description: tr("By default sorting is disabled, but you can enable it by changing this field. Don't forget to change database field(\"Sorting column\") for which sorting will be applied."), examples:[
        {code:"no sorting",description:tr("No sorting")},
        {code:"ascending",description:tr("Sort ascending")},
        {code:"descending",description:tr("Sort descending")}


      ]}}) %>

      <div class="col-xs-12">
          <form class="form-horizontal">
            <div class="form-group">
              <div class="col-xs-12">
                <div class="input-group">

                  <% _Schema.forEach(function(t){ %>
                    <span data-preserve="true" style="<%= (t["id"] != _Schema[0]["id"])?"display:none":"" %>" data-table-id="<%= t["id"] %>" data-preserve-type="select" data-preserve-id="SortColumns<%= t["id"] %>">
                      <select class="form-control input-sm" id="SortColumns<%= t["id"] %>" placeholder="Result">
                        <% t["columns"].forEach(function(c){ %>
                          <option value="<%= c.id %>"><%= c.description %></option>
                        <% }) %>
                      </select>
                    </span>
                  <% }) %>

                  <span class="input-group-addon" style="font-size: smaller;">
                    <span class="tr">Sorting column</span>
                    <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-placement="bottom" data-html="true" title="<%= tr('Column for sorting') %>" ></i>

                  </span>
                </div>
              </div>
            </div>
          </form>
        </div>


    <%= _.template($('#line').html())() %>


    <%= _.template($('#variable_constructor').html())({id:"RecordList", description:tr("Record list"), default_variable: "RECORD_LIST", help: {description: tr("After action completes, this variable will contain result as a list of strings. Each string describes one record with csv format. You can process list with module \"List\" and parse each line with \"Parse Line\" action. Record columns are components of resulting cvs in a same order as defined in database, plus the last component is always record id."),examples:[
  {code:"[\"Cell11:Cell12:5b1d2284644bc0759b5dfe15\", \"Cell21:Cell22:5b1d2284644bc0759b5dfe1\"]"},
]}}) %>
  </div>

<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Select records from database.</div>
  <div class="tr tooltip-paragraph-fold">This action supports filtering, sorting and paging, if you want to use this features, plaese study corresponding fields. If you don't want to use them, just leave default values, it will just select records from database.</div>
  <div class="tooltip-paragraph-fold"><span class="tr">After action completes, variable will contain result as a list of strings. Each string describes one record with csv format. You can process list with module "List" and parse each line with "Parse Line" action. Use "Foreach" action to iterate over records. Record columns are components of resulting cvs in a same order as defined in database, plus the last component is always record id.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=iterateoverrecordsen.png');return false">screen</a>).</div>


  <div class="tooltip-paragraph-fold"><span class="tr">You can also read from database with resources system. You need to define resource of type "Database" and use it in any field.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=usedatabaseinanyfield.png');return false">screen</a>)</div>
  <div class="tooltip-paragraph-fold tr">You can also create resource of type "Database" and read all content with "Resource To List" action. Main advantage of resource system is ability to distribute data across threads.</div>
  <div class="tooltip-paragraph-fold tr">It is synchronous, so feel free to use action in several threads.</div>
  <div class="tooltip-paragraph-last-fold tr">Records are displayed and may be edited in database manager.</div>


</div>

  <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "tutorial3"}) %>
</span>
<span id="filter-add" style="display:none">

<div class="container-fluid">
  <div class="col-xs-12">

    <span class="tr">Field</span>:
    <select class="form-control input-sm" id="FilterFieldInput">
    </select>
    <span class="tr">Filter type</span>:
    <select class="form-control input-sm" id="FilterTypeInput">
    </select>
  </div>
</div>
<div style="margin-top:10px" id="FiledValueInput">
    <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Value"), default_selector: "string"}) %>
</div>



<div class="container-fluid" style="margin-top:0px">
  <div class="col-xs-12">

    <button type="button" class="btn btn-primary filterok standartbutton tr" style="margin-top:5px" >Ok</button>
    <button type="button" class="btn btn-default filtercancel standartbutton tr" style="margin-top:5px" >Cancel</button>
  </div>
</div>



</span>
</script><script type="text/template" id="Database_DeleteOneRecord"><div class="container-fluid">
  <div class="col-xs-12">
      <form class="form-horizontal">
        <div class="form-group">
          <div class="col-xs-12">
            <div class="input-group">
              <span data-preserve="true" data-preserve-type="select" data-preserve-id="Table">
                <select class="form-control input-sm" id="Table" placeholder="Result">
                    <% _Schema.forEach(function(t){ %>
                     <option value="<%= t.id %>"><%= t.description %></option>
                    <% }) %>
                </select>
              </span>
              <span class="input-group-addon" style="font-size: smaller;">
                <span class="tr">Database table</span>
                <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-placement="bottom" data-html="true" title="<%= tr('Table name, for which operation will be applied') %>" ></i>

              </span>
            </div>
          </div>
        </div>
      </form>
    </div>

    <%= _.template($('#input_constructor').html())({id:"RecordId", description:tr("Record id"), default_selector: "string", disable_int:true,help: {description: tr("Record id, which will be deleted. It can be obtained from resource with type \"Database\" or from list returned from \"Select Records\" action."),examples:[{code:"5b1d2284644bc0759b5dfe15"},{code:tr("Empty string"), description:tr("Delete last record obtained as resource.")}]}}) %>

    <%= _.template($('#input_constructor').html())({id:"DeleteResources", description:tr("Delete resource"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true", "false"], help: {description: tr("Select if you want to delete record from resources system besides database. If there is no resource connected to current table, this setting will do nothing."), examples:[
      {code:"true",description:tr("Delete record from resources and from database")},
      {code:"false",description:tr("Delete record only from database")},
    ]}}) %>

    

    
</div>

<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Delete record from database.</div>
  
  <div class="tooltip-paragraph-fold tr">This action only deletes single record, if you wan't to delete more than one, use "Delete Records By Criteria" action.</div>
  <div class="tooltip-paragraph-fold tr">You can also delete record from database obtained with resource by using "Delete Current Element" action.</div>

  <div class="tooltip-paragraph-fold tr">By default this action doesn't synchronize database and resources, if you want to delete record from resources besides database, you need to check "Delete resource" field.</div>
  <div class="tooltip-paragraph-fold tr">It is synchronous, so feel free to use action in several threads.</div>
  <div class="tooltip-paragraph-last-fold tr">Records are displayed and may be edited in database manager.</div>

</div>

<%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "tutorial3"}) %>
</script><script type="text/template" id="Database_DeleteRecords"><span id="action-add">
  <div class="container-fluid">
    <div class="col-xs-12">
        <form class="form-horizontal">
          <div class="form-group">
            <div class="col-xs-12">
              <div class="input-group">
                <span data-preserve="true" data-preserve-type="select" data-preserve-id="Table">
                  <select class="form-control input-sm" id="Table" placeholder="Result">
                      <% _Schema.forEach(function(t){ %>
                       <option value="<%= t.id %>"><%= t.description %></option>
                      <% }) %>
                  </select>
                </span>
                <span class="input-group-addon" style="font-size: smaller;">
                  <span class="tr">Database table</span>
                  <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-placement="bottom" data-html="true" title="<%= tr('Table name, for which operation will be applied') %>" ></i>

                </span>
              </div>
            </div>
          </div>
        </form>
      </div>
      
      <div class="container-fluid" id="database-filters" style="margin-top:10px">
        <div class="col-xs-12">
          <button type="button" class="btn btn-default btn-sm" id="database-filters-add"><i class="fa fa-filter" aria-hidden="true"></i> <span class="tr">Add filter</span></button>
          <button type="button" class="btn btn-default btn-sm" id="database-filters-clear"><i class="fa fa-eraser" aria-hidden="true"></i> <span class="tr">Remove all filters</span></button>
          
        </div>
      </div>
      <div class="container-fluid" id="database-filters" style="margin-bottom:5px" >
        <div class="col-xs-12">
      
          <div id="database-filters-data">
          </div>
        </div>
      </div>

  <%= _.template($('#input_constructor').html())({id:"GroupId", description:tr("Filter by group"), default_selector: "string", disable_int:true,help: {description: tr("Additional filter by group id. It can be obtained from \"Create Group\" action or from \"Get Group List\". Leave blank not to apply filter by group."),examples:[{code:"5b1d2284644bc0759b5dfe15",description: tr("Action will be applied only to exact group and which matches other filters.")},
          {code:tr("Empty string"),description: tr("Action will be applied to records which matches other filters.")}]}}) %>

      <%= _.template($('#input_constructor').html())({id:"DeleteResources", description:tr("Delete resource"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true", "false"], help: {description: tr("Select if you want to delete records from resources system besides database. If there is no resource connected to current table, this setting will do nothing."), examples:[
      {code:"true",description:tr("Delete records from resources and from database")},
      {code:"false",description:tr("Delete records only from database")},
    ]}}) %>

</div>

  <div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Delete records from database.</div>

    <div class="tooltip-paragraph-fold tr">This action deletes records by criteria, if you want to delete single record, use "Delete One Record" action.</div>
   
    <div class="tooltip-paragraph-fold tr">This action affects all records matching criteria, be carefull, if you forget to set criteria, all records in database will be deleted.</div>

    <div class="tooltip-paragraph-fold tr">By clicking on "Add filter" button you can modify filters. You can add as many filters as you like. Only records that matches all filters will be affected by this action.</div>

    <div class="tooltip-paragraph-fold tr">Filters may also include groups. If you fill group id, this action will be applied to records in that group and which matches other filters.</div>

    <div class="tooltip-paragraph-fold tr">By default this action doesn't synchronize database and resources, if you want to delete record from resources besides database, you need to check "Delete resource" field.</div>

    <div class="tooltip-paragraph-fold tr">It may take a lot of time if you are deleting a lot of records.</div>
    <div class="tooltip-paragraph-fold tr">It is synchronous, so feel free to use action in several threads.</div>
    <div class="tooltip-paragraph-last-fold tr">Records are displayed and may be edited in database manager.</div>

  </div>
  <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "tutorial3"}) %>
</span>
<span id="filter-add" style="display:none">

<div class="container-fluid">
  <div class="col-xs-12">

    <span class="tr">Field</span>:
    <select class="form-control input-sm" id="FilterFieldInput">
    </select>
    <span class="tr">Filter type</span>:
    <select class="form-control input-sm" id="FilterTypeInput">
    </select>
  </div>
</div>
<div style="margin-top:10px" id="FiledValueInput">
    <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Value"), default_selector: "string"}) %>
</div>

<div class="container-fluid" style="margin-top:0px">
  <div class="col-xs-12">

    <button type="button" class="btn btn-primary filterok standartbutton tr" style="margin-top:5px" >Ok</button>
    <button type="button" class="btn btn-default filtercancel standartbutton tr" style="margin-top:5px" >Cancel</button>
  </div>
</div>

</span>
</script><script type="text/template" id="Database_CountRecords"><span id="action-add">
  <div class="container-fluid">
    <div class="col-xs-12">
        <form class="form-horizontal">
          <div class="form-group">
            <div class="col-xs-12">
              <div class="input-group">
                <span data-preserve="true" data-preserve-type="select" data-preserve-id="Table">
                  <select class="form-control input-sm" id="Table" placeholder="Result">
                      <% _Schema.forEach(function(t){ %>
                       <option value="<%= t.id %>"><%= t.description %></option>
                      <% }) %>
                  </select>
                </span>
                <span class="input-group-addon" style="font-size: smaller;">
                  <span class="tr">Database table</span>
                  <i class="fa fa-question-circle help-input" data-toggle="tooltip" data-placement="bottom" data-html="true" title="<%= tr('Table name, for which operation will be applied') %>" ></i>

                </span>
              </div>
            </div>
          </div>
        </form>
      </div>
      
      <div class="container-fluid" id="database-filters" style="margin-top:10px">
        <div class="col-xs-12">
          <button type="button" class="btn btn-default btn-sm" id="database-filters-add"><i class="fa fa-filter" aria-hidden="true"></i> <span class="tr">Add filter</span></button>
          <button type="button" class="btn btn-default btn-sm" id="database-filters-clear"><i class="fa fa-eraser" aria-hidden="true"></i> <span class="tr">Remove all filters</span></button>
          
        </div>
      </div>
      <div class="container-fluid" id="database-filters" style="margin-bottom:5px" >
        <div class="col-xs-12">
      
          <div id="database-filters-data">
          </div>
        </div>
      </div>

  <%= _.template($('#input_constructor').html())({id:"GroupId", description:tr("Filter by group"), default_selector: "string", disable_int:true,help: {description: tr("Additional filter by group id. It can be obtained from \"Create Group\" action or from \"Get Group List\". Leave blank not to apply filter by group."),examples:[{code:"5b1d2284644bc0759b5dfe15",description: tr("Action will be applied only to exact group and which matches other filters.")},
          {code:tr("Empty string"),description: tr("Action will be applied to records which matches other filters.")}]}}) %>

<%= _.template($('#variable_constructor').html())({id:"RecordsCount", description:tr("Result with records count"), default_variable: "RECORDS_COUNT",help: {description: tr("This variable will contain count of records matching criteria.")}}) %>

</div>

  <div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get number of records matching criteria.</div>

    <div class="tooltip-paragraph-fold tr">By clicking on "Add filter" button you can modify filters. You can add as many filters as you like. Only records that matches all filters will be affected by this action.</div>

    <div class="tooltip-paragraph-fold tr">Filters may also include groups. If you fill group id, this action will be applied to records in that group and which matches other filters.</div>

    <div class="tooltip-paragraph-fold tr">It is synchronous, so feel free to use action in several threads.</div>

    <div class="tooltip-paragraph-last-fold tr">Records are displayed and may be edited in database manager.</div>

  </div>
  <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki: "tutorial3"}) %>
</span>
<span id="filter-add" style="display:none">

<div class="container-fluid">
  <div class="col-xs-12">

    <span class="tr">Field</span>:
    <select class="form-control input-sm" id="FilterFieldInput">
    </select>
    <span class="tr">Filter type</span>:
    <select class="form-control input-sm" id="FilterTypeInput">
    </select>
  </div>
</div>
<div style="margin-top:10px" id="FiledValueInput">
    <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Value"), default_selector: "string"}) %>
</div>

<div class="container-fluid" style="margin-top:0px">
  <div class="col-xs-12">

    <button type="button" class="btn btn-primary filterok standartbutton tr" style="margin-top:5px" >Ok</button>
    <button type="button" class="btn btn-default filtercancel standartbutton tr" style="margin-top:5px" >Cancel</button>
  </div>
</div>

</span>
</script><script type="text/template" id="datetime_stringtodate"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime string"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"Format", description:tr("DateTime format"), default_selector: "string", disable_int:true, value_string: "auto", variants: ["auto","yyyy-MM-dd","hh:mm:ss","yyyy-MM-ddThh:mm:ss"]}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "PARSED_DATE"}) %>
    <%= _.template($('#info').html())({description: `<a onclick="BrowserAutomationStudio_OpenUrl('http://doc.qt.io/qt-5/qdatetime.html#fromString')" class="tr" style="cursor: pointer;">DateTime formatting</a>`, color: "gray"}) %>

    
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Convert the string to date and time using a specific format.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_datetostring"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime or string"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"Format", description:tr("DateTime format"), default_selector: "string", disable_int:true, value_string: "yyyy-MM-dd", variants: ["yyyy-MM-dd","hh:mm:ss","yyyy-MM-ddThh:mm:ss"]}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "FORMATTED_DATE"}) %>

    <%= _.template($('#info').html())({description: `<a onclick="BrowserAutomationStudio_OpenUrl('http://doc.qt.io/qt-5/qdatetime.html#fromString')" class="tr" style="cursor: pointer;">DateTime formatting</a>`, color: "gray"}) %>

</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Convert date and time to string using a specified format.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_msecondstodate"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("Milliseconds"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "DATE_FROM_MILLISECONDS"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Convert number of milliseconds since epoch start to date.</div>
    <div class="tr tooltip-paragraph-last-fold">The number of milliseconds for this conversion is counted from January 1, 1970, 00:00:00 UTC.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_datetomseconds"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime or string"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "MILLISECONDS_FROM_DATE"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Convert date to number of milliseconds since epoch.</div>
    <div class="tr tooltip-paragraph-last-fold">The number of milliseconds for this conversion is counted from January 1, 1970, 00:00:00 UTC.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_createdate"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Year", description:tr("Year"), default_selector: "int", disable_string:true, value_number: 2010}) %>
	<%= _.template($('#input_constructor').html())({id:"Month", description:tr("Month. From 1 to 12"), default_selector: "int", disable_string:true, value_number: 1}) %>
	<%= _.template($('#input_constructor').html())({id:"Day", description:tr("Day. From 1 to 31"), default_selector: "int", disable_string:true, value_number: 1}) %>
	<%= _.template($('#input_constructor').html())({id:"Hour", description:tr("Hour. From 0 to 23"), default_selector: "int", disable_string:true, value_number: 12}) %>
	<%= _.template($('#input_constructor').html())({id:"Minutes", description:tr("Minutes. From 0 to 59"), default_selector: "int", disable_string:true, value_number: 0}) %>
	<%= _.template($('#input_constructor').html())({id:"Seconds", description:tr("Seconds. From 0 to 59"), default_selector: "int", disable_string:true, value_number: 0}) %>
	<%= _.template($('#input_constructor').html())({id:"Milliseconds", description:tr("Milliseconds. From 0 to 999"), default_selector: "int", disable_string:true, value_number: 0}) %>
    <%= _.template($('#input_constructor').html())({id:"Timezone", description:tr("Timezone as offset from UTC in minutes"), default_selector: "int", disable_string:true, value_number: 0 , variants: ["-840","-780","-765","-720","-660","-630","-600","-570","-540","-525","-510","-480","-420","-390","-360","-345","-330","-300","-270","-240","-210","-180","-120","-60","0","60","120","180","210","240","300","360","420","480","540","570","600","660","720"]}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "DATE"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Create a new date and time object using the specified parameters.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_changedate"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime string"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"Year", description:tr("Year"), default_selector: "int", disable_string:true, value_number: -1}) %>
	<%= _.template($('#input_constructor').html())({id:"Month", description:tr("Month. From 1 to 12"), default_selector: "int", disable_string:true, value_number: -1}) %>
	<%= _.template($('#input_constructor').html())({id:"Day", description:tr("Day. From 1 to 31"), default_selector: "int", disable_string:true, value_number: -1}) %>
	<%= _.template($('#input_constructor').html())({id:"Hour", description:tr("Hour. From 0 to 23"), default_selector: "int", disable_string:true, value_number: -1}) %>
	<%= _.template($('#input_constructor').html())({id:"Minutes", description:tr("Minutes. From 0 to 59"), default_selector: "int", disable_string:true, value_number: -1}) %>
	<%= _.template($('#input_constructor').html())({id:"Seconds", description:tr("Seconds. From 0 to 59"), default_selector: "int", disable_string:true, value_number: -1}) %>
	<%= _.template($('#input_constructor').html())({id:"Milliseconds", description:tr("Milliseconds. From 0 to 999"), default_selector: "int", disable_string:true, value_number: -1}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "CHANGED_DATE"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Change an existing date and time object using the specified parameters.</div>
    <div class="tr tooltip-paragraph-last-fold">This action can change year or month or other properties of date. Leave parameter to -1 if you dont want to change it.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_addsecondstodate"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime or string"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"Seconds", description:tr("Seconds to add. Can be negative."), default_selector: "int", disable_string:true, value_number: 0}) %>
    <%= _.template($('#input_constructor').html())({id:"Minutes", description:tr("Minutes to add. Can be negative."), default_selector: "int", disable_string:true, value_number: 0}) %>
    <%= _.template($('#input_constructor').html())({id:"Hours", description:tr("Hours to add. Can be negative."), default_selector: "int", disable_string:true, value_number: 0}) %>
    <%= _.template($('#input_constructor').html())({id:"Days", description:tr("Days to add. Can be negative."), default_selector: "int", disable_string:true, value_number: 0}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "DATE"}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Add the specified number of seconds to an existing date.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_substractdates"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"DecreasingString", description:tr("Decreasing DateTime or string"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"SubtractedString", description:tr("Subtracted DateTime or string"), default_selector: "string", disable_int:true}) %>  
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "DATE_DIFFERENCE_IN_SECONDS"}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get the difference in seconds between the specified dates.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_datenow"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "DATE_NOW"}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get the current date and time.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_changetimezone"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime string"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"Timezone", description:tr("Timezone as offset from UTC in minutes"), default_selector: "int", disable_string:true, value_number: 0 , variants: ["-840","-780","-765","-720","-660","-630","-600","-570","-540","-525","-510","-480","-420","-390","-360","-345","-330","-300","-270","-240","-210","-180","-120","-60","0","60","120","180","210","240","300","360","420","480","540","570","600","660","720"]}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "DATE_WITH_CHANGED_TIMEZONE"}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Change the timezone of an existing date.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_gettimezone"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime string"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "TIMEZONE_IN_MINUTES"}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get the timezone of an existing date.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_dayofmonth"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime or string"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Day of month. From 1 to 31."), default_variable: "DAY_OF_MONTH"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the day of the month from the specified date.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_dayofweek"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime or string"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Day of week. From 1 to 7."), default_variable: "DAY_OF_WEEK"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the day of the week from the specified date.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_dayofyear"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime or string"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Day of year. From 1 to 366."), default_variable: "DAY_OF_YEAR"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the day of the year from the specified date.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_year"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime or string"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Year"), default_variable: "YEAR"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the year from the specified date.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_month"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime or string"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Month"), default_variable: "MONTH"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the month from the specified date.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_hour"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime or string"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Hours"), default_variable: "HOURS"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the number of hours from the specified date.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_minute"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime or string"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Minutes"), default_variable: "MINUTES"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the number of minutes from the specified date.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_second"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime or string"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Seconds"), default_variable: "SECONDS"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the number of seconds from the specified date.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="datetime_millisecond"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"String", description:tr("DateTime or string"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Milliseconds"), default_variable: "MILLISECONDS"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the number of milliseconds from the specified date.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="EmbeddedLanguagesNodeJs"><div style="margin-top:-4px;overflow:hidden;" id="NodeAll">
	<input data-result-target="#NodeInsertVariableHidden"
		id="NodeInsertVariableHidden"
		disable_globals="true"
		disable_locals="false"
		style="display: none"
	/>
	<table style=" height:100vh; width:100vw;position:relative" >
	<tr>
		<td width="200">
		
			<div style="height:100vh;border-right:1px solid #e4e4e4;position:relative;min-width:200px">
				<div class="list-group" style="padding-bottom: 35px;height: 100vh;padding-top: 5px;margin-left: 4px;margin-right: 4px;overflow:auto" id="NodeFileList">
			        <div class="tr" style="margin-left:15px;margin-bottom: 7px;font-size: small;color: gray;">Files:</div>
					<a href="#" class="btn-sm active list-group-item tr function-item" data-function-name="current" data-selected="true">Current</a>
				
				</div>
				<div style="margin-left: 42px;position: absolute; bottom: 3px;">
					<a tabindex="-1" class="btn btn-sm btn-default" id="add-file"><i class="fa fa-plus" aria-hidden="true" style="font-size: 12px;"></i></a>
					<a tabindex="-1" class="btn btn-sm btn-default disabled" id="remove-file"><i class="fa fa-minus" aria-hidden="true" style="font-size: 12px;"></i></a>
					<a tabindex="-1" class="btn btn-sm btn-default disabled" id="edit-file-name"><i class="fa fa-pencil" aria-hidden="true" style="font-size: 12px;"></i></a>

				</div>
			</div>
		</td>
		<td>
			<div style="height:100vh;">
				<div id="NodeJsCode" style="height:100%;width:100%;border: none; overflow: hidden; outline: none;" />
			</div>
		</td>
		<td width="200" style="border-left:1px solid #e4e4e4">
			<div style="height:100vh;position:relative;min-width:200px">
				<div style="position:absolute;top:3px;right:5px;width:190px;">
			
		        	<span data-preserve="true" data-preserve-type="select" data-preserve-id="NodeVersionList">
				  		<select class="form-control input-sm" id="NodeVersionList" placeholder="Result" style="">
		                </select>
			        </span>
			        <div class="tr" style="margin-top:12px;margin-left:15px;margin-bottom: 7px;font-size: small;color: gray;">Tools:</div>
					<div class="list-group">
						<a href="#" class="btn-sm list-group-item tr" id="NodeInsertVariable">Use variable</a>
						<a href="#" class="btn-sm list-group-item tr" id="NodeSynchronize">Synchronize</a>
						<a href="#" class="btn-sm list-group-item tr" id="NodeCallApi">Call API</a>
						<a href="#" class="btn-sm list-group-item tr" id="NodeFail">Fail</a>
						<a href="#" class="btn-sm list-group-item tr" id="NodeUseFile">Use file</a>
						<hr style="margin-top: 5px;margin-bottom: 5px;"/>
						<a href="#" class="btn-sm list-group-item" id="Manual"><i class="fa fa-question-circle" aria-hidden="true" ></i> <span class="tr">Manual</span></a>
					</div>

					
					<span style="display:none">
			        	<%= _.template($('#input_constructor').html())({id:"Name", description:tr("Name"), default_selector: "string", disable_int:true, value_expression: "Math.random().toString(36).substring(2)"}) %>
			        </span>
        
				</div>
				<div style="margin-left:3px;position: absolute; bottom: 3px;">
					<div style="margin-bottom: 7px;margin-left: 5px;">
						<a href="#" tabindex="-1" id="use-timeout" data-value="<%= (typeof(timeout_value) != "undefined" && timeout_value > 0) ? timeout_value : "0" %>" class="<%= (typeof(timeout_value) != "undefined" && timeout_value > 0) ? "" : "use-timeout-disabled" %> trtitle"  data-enabled="<%= (typeof(timeout_value) != "undefined" && timeout_value > 0) ? "true" : "false" %>" data-toggle="tooltip" data-placement="top" title="Maximum time to perform an action."><i class="fa fa-hourglass-end" aria-hidden="true" ><small id="timeout-is-default" class="tr">default</small></i><small id="timeout-val"></i><%= (typeof(timeout_value) != "undefined" && timeout_value > 0) ? ("" + timeout_value) : "" %></small></a>
              		</div>
              		<div>
						<a tabindex="-1" class="btn btn-success tr" id="node-check" style="min-width: 95px;">Ok</a>
						<a tabindex="-1" class="btn btn-success tr" id="ok" style="display:none">Ok</a> <a tabindex="-1" class="btn btn-danger tr" style="min-width: 95px;" href="#!/" id="backtomain">Cancel</a>
					</div>
				</div>
			</div>
		</td>
	</tr>
	</table>
	<span class="short-description tr">Execute custom code using NodeJS.</span>
</div>

<script>
	$(function() {

		

		
		if(typeof(window.NodeJsResizeAttached) == "undefined")
		{
			window.NodeJsResizeAttached = true

			/* Autoresize code panel */
			$(window).resize(function(){
				$("#NodeJsCode").css("width",($(window).width() - 400) + "px")
			});	

			/* Paste BAS actions */
			document.addEventListener('paste', function(event) {
				var text = event.clipboardData.getData('Text')
				if(text.indexOf("BAS:") == 0)
				{
					text = text.slice(4)
					var text = eval(text)
					
					var all = ""
					text.forEach((el) => {
						var code = el["code"]
						code = code.replace(/\/\*Dat:[^\*]+\*\/\s*/g,"")
						code = code.replace(/\/\*Browser\*\/\s*/g,"")
						if(all.length > 0)
						{
							all += "\n;\n"
						}
						all += code
					})

					setTimeout(function(){
						window.NodeJsGlobal.Editor.trigger('', 'undo');
						var HexRes = Array.from(new TextEncoder("UTF-8").encode(all));
						HexRes = HexRes.map(x => x < 16 ? "0" + x.toString(16) : x.toString(16));
						HexRes = JSON.stringify("_HEX:" + HexRes.join(""));
						InsertText("await BAS_API(" + HexRes + ");");
					},100)

				
				}
				
    			
			});

		}
		

		/* Init model */
		window.NodeJsGlobal = {Editor: null, InitialValue: "", FileList: {}, Selected: "current"}
		
		window.NodeJsGlobal.FileList = _EmbeddedModel.GetAllFiles()

		window.NodeJsGlobal.FileList.forEach((data) => {
			$('#NodeFileList').append($('<a href="#" class="btn-sm list-group-item tr function-item" data-function-name="' + data["data_name"] + '" data-selected="false">' + data["data_name"] + '</a>'));
		})

		
		/* Add new file */
		$("#add-file").click(function(){
			bootbox.prompt(tr("Add new file"), function(result){ 
				if(!result)
					return;
				if(result.length > 0 && result != "current" &&typeof(window.NodeJsGlobal.FileList.find((el) => {return el["data_name"] == result})) == "undefined")
				{
					var data_template = "module.exports = async function(){\n\n}"
					window.NodeJsGlobal.FileList.push({data: data_template, data_name: result, data_type: 1, language_name: "Node",language_version: $("#NodeVersionList").val()})
					var el = $('<a href="#" class="btn-sm list-group-item tr function-item" data-function-name="' + result + '" data-selected="false">' + result + '</a>')
					el.click(FileClick)
					$('#NodeFileList').append(el);
				}
				
			});
		})

		/* Change current file */
		$(".function-item").click(FileClick)

		function FileClick(event){
			event.preventDefault();
			var el = $(this)
			var name = el.attr("data-function-name")
			$(".function-item").removeClass("active")
			el.addClass("active")
			var prev_code = window.NodeJsGlobal.Editor.getValue()

			if(window.NodeJsGlobal.Selected == "current")
			{
				window.NodeJsGlobal.InitialValue = prev_code
			}else
			{
				var found = window.NodeJsGlobal.FileList.find((el) => {return el["data_name"] == window.NodeJsGlobal.Selected})
				if(typeof(found) != "undefined")
				{
					found["data"] = prev_code
				}
				
			}

			window.NodeJsGlobal.Selected = name

			if(name == "current")
			{
				window.NodeJsGlobal.Editor.setValue(window.NodeJsGlobal.InitialValue)

				$("#add-file").removeClass("disabled")
				$("#remove-file").removeClass("disabled").addClass("disabled")
				$("#edit-file-name").removeClass("disabled").addClass("disabled")
			}else
			{
				window.NodeJsGlobal.Editor.setValue(window.NodeJsGlobal.FileList.find((el) => {return el["data_name"] == name})["data"])
				$("#add-file").removeClass("disabled")
				$("#remove-file").removeClass("disabled")
				$("#edit-file-name").removeClass("disabled")
			}
		}

		/* Remove file */
		$("#remove-file").click(function(){
			bootbox.confirm(tr("Are you sure, that you want to remove this file?"), function(result){ 
				if(result)
				{
					$('*[data-function-name="' + window.NodeJsGlobal.Selected + '"]').remove()
					window.NodeJsGlobal.FileList = window.NodeJsGlobal.FileList.filter((el) => {return el["data_name"] != window.NodeJsGlobal.Selected})
					$('*[data-function-name="current"]')[0].click()
				}
			})
		})

		/* Edit file name */
		$("#edit-file-name").click(function(){
			bootbox.prompt(
				{
					title: tr("Edit file name"), 
					value: window.NodeJsGlobal.Selected, 
					callback: function(result){ 
						if(result && result.length > 0 && result != "current" && typeof(window.NodeJsGlobal.FileList.find((el) => {return el["data_name"] == result})) == "undefined")
						{
							var el = $('*[data-function-name="' + window.NodeJsGlobal.Selected + '"]')
							el.attr("data-function-name", result)
							el.text(result)
							var dat = window.NodeJsGlobal.FileList.find((el) => {return el["data_name"] == window.NodeJsGlobal.Selected})
							dat["data_name"] = result
							window.NodeJsGlobal.Selected = result
						}
					}
				}
			)
		})
		
		//Hide upper panel
		$("#breadcrumbcontainer").hide();

		/* Load code editor */
		require(['vs/editor/editor.main'], function() {
			window.NodeJsGlobal.Editor = createCodeEditor(document.getElementById('NodeJsCode'), {
				value: window.NodeJsGlobal.InitialValue
			});
		});

		/* Save results */
		function CollectData()
		{
			var res = []
			var current = {data_name: $("#Name").val(), data_type: 0, language_name: "Node", language_version: $("#NodeVersionList").val()}
			if(window.NodeJsGlobal.Selected == "current")
			{
				current["data"] = window.NodeJsGlobal.Editor.getValue()
			}else
			{
				current["data"] = window.NodeJsGlobal.InitialValue
			}
			res.push(current)

			window.NodeJsGlobal.FileList.forEach(function(data){
				if(window.NodeJsGlobal.Selected == data["data_name"])
				{
					data["data"] = window.NodeJsGlobal.Editor.getValue()
				}
				res.push(data)				
			})

			
			return res;
		}

		$("#node-check").click(function(){

			bootbox.dialog({ message: '<div class="text-center"><i class="fa fa-spin fa-spinner"></i> ' + tr("Updating") + '...</div>', closeButton: false, animate: false})

			_EmbeddedModel.InsertOrReplaceData(CollectData(), "Node", $("#NodeVersionList").val(), function(is_success, error_string){
    			bootbox.hideAll()

	    		if(is_success)
	    		{
	    			$("#ok").click()
	    		}else
	    		{
					var el = $("<pre style='overflow:scroll;max-height: 80vh;'/>")
					el.text(tr("Failed to update") + ":\n\n\n" + error_string)
					bootbox.dialog({ message: el, animate: false, size: "large", onEscape: true, backdrop: true})
	    		}

	    	})
		})



		if(_EmbeddedModel.GetVersionsForLanguages("Node").length == 0 && !_GobalModel.get("isedit"))
		{
			$("#NodeAll").html('<div style="margin-top:50px;text-align:center">' + tr("Node.js is not enabled, use ") + '<a href="#" onclick="BrowserAutomationStudio_OpenUrl(\'settings://settings\'); return false;">' + tr("settings") + '</a> ' + tr("to enable it") + '.</div> <br/> <div style="text-align:center"><a tabindex="-1" class="btn btn-danger standartbutton tr" href="#!/" id="backtomain">Cancel</a></div>')
		}else
		{

			/* Init versions */
			if(_EmbeddedModel.GetVersionsForLanguages("Node").length == 0)
			{
				try
				{
					var version = CurrentDat["d"].find((el) => {return el["id"] == "NodeVersionList"})["data"]
					$('#NodeVersionList').append($('<option>', {
					    value: version,
					    text: "Node.js " + version
					}));
				}catch(e)
				{
					
				}
				
			}else
			{
			    _EmbeddedModel.GetVersionsForLanguages("Node").forEach((version) => {

					$('#NodeVersionList').append($('<option>', {
					    value: version,
					    text: "Node.js " + version
					}));
				})
			}

			/* Load data to current item */
			$("#Name").change(function() {
				var val = _EmbeddedModel.GetFunctionCode($("#Name").val())
				if(window.NodeJsGlobal.Editor)
				{
					window.NodeJsGlobal.Editor.setValue(val);
				}
				else
				{
					window.NodeJsGlobal.InitialValue = val
				}
			});
		}

		/* Process tools */
		function InsertText(text)
		{
			var line = window.NodeJsGlobal.Editor.getPosition();
			console.log(line)
			var range = new monaco.Range(line.lineNumber, line.column, line.lineNumber, line.column);
			var id = { major: 1, minor: 1 };             
			var op = {identifier: id, range: range, text: text, forceMoveMarkers: true};
			window.NodeJsGlobal.Editor.executeEdits("my-source", [op]);
		}

		$("#NodeFail").click(function(event){
			event.preventDefault()
			InsertText("\nthrow \"Stop reason\";\n");
		})

		$("#NodeInsertVariable").click(function(event){
			event.preventDefault()
			if(window.NodeJsGlobal.Selected != "current")
			{
				bootbox.alert(tr("Variables are not allowed inside files"))
				return
			}
			$("#NodeInsertVariableHidden").val("");
			BasVariablesDialog.create($("#NodeInsertVariableHidden"));
		})

		$("#NodeInsertVariableHidden").change(function(){
			event.preventDefault()
			InsertText($("#NodeInsertVariableHidden").val());
		})

		$("#NodeSynchronize").click(function(event){
			event.preventDefault()
			InsertText("\nawait (new Promise((resolve, reject) => {\n\t\/*Place your code here and call resolve to proceed*\/\n\tresolve()\n}));\n");
		})

		$("#NodeCallApi").click(function(event){
			event.preventDefault()
			bootbox.alert(
				tr("You can call any BAS action from node.js code, including working with browser. To do that, you need just copy and paste any action right into code editor.")
				+ "<br/>"
				+ tr("See following") + " <a href='#' onclick='BrowserAutomationStudio_OpenUrl(\"https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=callapi.gif\");return false;' >" + tr("video") + "</a> " + tr("for more info.")
				+ "<br/>"
				+ "<br/>"
				+ tr("You can also call BAS functions and obtain result.")
				+ `<pre>var Result = await BAS_FUNCTION(
	"FunctionName", 
	{ParamName1: "ParamValue1", ParamName2: "ParamValue2"}
)</pre>`
				 + "<a href='#' onclick='BrowserAutomationStudio_OpenUrl(\"https://wiki.bablosoft.com/doku.php?id=node.js#calling_bas_functions\");return false;' >" + tr("More info") + "</a>"

			)
		})

		$("#Manual").click(function(event){
			event.preventDefault()
			BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=node.js');
		})

		$("#NodeUseFile").click(function(event){
			event.preventDefault()
			var options = window.NodeJsGlobal.FileList.map((el) => {return {text: el["data_name"], value: el["data_name"]}})
			if(options.length == 0)
			{
				bootbox.alert(tr("File list is empty, please create one."));
			}else
				bootbox.prompt({
	    			title: tr("Select file"),
	    			inputType: 'select',
	    			inputOptions: options,
	    			callback: function (result) {
						if(result && result.length > 0)
						{
							var FolderName = ""
							if(window.NodeJsGlobal.Selected == "current")
							{
								FolderName = "..";
							}else
							{
								FolderName = ".";
							}
							
							
							InsertText("\nawait require(\"" + FolderName + "/" + result + "\")();\n");
						}
	    			}
				});
			
		})

	

	});
	

	
</script></script><script type="text/template" id="filesystem_readfile"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"Value", description:tr("File path"), default_selector: "string", disable_int:true}) %>
  <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "FILE_CONTENT"}) %>
  <%= _.template($('#input_constructor').html())({id:"From", description:tr("Start position"), default_selector: "int", disable_string:true, value_number: 0,size:3}) %>
  <%= _.template($('#input_constructor').html())({id:"To", description:tr("End position. Leave 0 to read all file."), default_selector: "int", disable_string:true, value_number: 0,size:3}) %>

  <%= _.template($('#checkbox').html())({id: "Check", title: tr("Save In Base64 Format")}) %>

</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Read file content to the variable.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="filesystem_writefile"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"File", description:tr("File path"), default_selector: "string", disable_int:true}) %>
  <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Data"), default_selector: "string", disable_int:true}) %>
  <%= _.template($('#checkbox').html())({id: "Check3", title: tr("Add line ending symbol")}) %>
  <%= _.template($('#checkbox').html())({id: "Check", title: tr("Append")}) %>
  <%= _.template($('#checkbox').html())({id: "Check2", title: tr("Data Is In Base64 Format")}) %>

</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Write text or binary data to file.</div>
  <div class="tr tooltip-paragraph-last-fold">It is better to use <a href="#!/result">Result</a> action to output result.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="filesystem_fileinfo"><div class="container-fluid httpclientgetheader">
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("File Name"), default_selector: "string", disable_int:true}) %>
      <%= _.template($('#variable_constructor').html())({id:"SaveExists", description:tr("File Exists"), default_variable: "FILEINFO_EXISTS"}) %>
      <%= _.template($('#variable_constructor').html())({id:"SaveSize", description:tr("File Size"), default_variable: "FILEINFO_SIZE"}) %>
      <%= _.template($('#variable_constructor').html())({id:"SaveDirectory", description:tr("File Base Directory"), default_variable: "FILEINFO_BASE_DIRECTORY"}) %>
      <%= _.template($('#variable_constructor').html())({id:"SaveIsDirectory", description:tr("Is Directory"), default_variable: "FILEINFO_IS_DIRECTORY"}) %>
      <%= _.template($('#variable_constructor').html())({id:"SaveLastModified", description:tr("Last Modified"), default_variable: "FILEINFO_LAST_MODIFIED"}) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Get detailed information about a file or folder: size, base folder, check existence, etc.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="filesystem_createdir"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Directory Name"), default_selector: "string", disable_int:true}) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Create a new folder at the specified path.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="filesystem_removefile"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"Value", description:tr("File/Folder Name"), default_selector: "string", disable_int:true}) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Remove file or folder.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="filesystem_movefile"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"Value", description:tr("File/Folder Name"), default_selector: "string", disable_int:true}) %>
  <%= _.template($('#input_constructor').html())({id:"ValueDest", description:tr("File/Folder New Location"), default_selector: "string", disable_int:true}) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Move file or folder to a new location.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="filesystem_copyfile"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"Value", description:tr("File/Folder Name"), default_selector: "string", disable_int:true}) %>
  <%= _.template($('#input_constructor').html())({id:"ValueDest", description:tr("File/Folder Destination"), default_selector: "string", disable_int:true}) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Copy file or folder to a new location.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="filesystem_search"><div class="container-fluid filewrite">
	<%= _.template($('#input_constructor').html())({id:"Folder", description:tr("Search In Folder"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"Mask", description:tr("Filename Mask"), default_selector: "string", disable_int:true, value_string:"*"}) %>
    <%= _.template($('#input_constructor').html())({id:"FileContains", description:tr("File Data Must Contain. Can Be Blank"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#checkbox').html())({id: "Check", title: tr("Include Folders"), checked: true}) %>
	<%= _.template($('#checkbox').html())({id: "Check2", title: tr("Include Files"), checked: true}) %>
	<%= _.template($('#checkbox').html())({id: "Check3", title: tr("Search In Subfolders"), checked: true}) %>

    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save Result"), default_variable: "FILE_SEARCH_RESULT"}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Find all files in the specified folder that satisfy certain conditions.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="filesystem_file_to_list"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"Value", description:tr("File path"), default_selector: "string", disable_int:true}) %>
  <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("List To Save"), default_variable: "LIST_WITH_FILE_CONTENT"}) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Read the content of the specified file to list. Each element of the list will contain one line of original file.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="filesystem_list_to_file"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"File", description:tr("File path"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("List To Write To File"), default_variable:""}) %>

    <%= _.template($('#checkbox').html())({id: "Check", title: tr("Append")}) %>
    <%= _.template($('#checkbox').html())({id: "Check2", title: tr("Add line ending symbol")}) %>


</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Write the content of the specified list to file. Each element of the list will be written as a line in a file.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="FingerprintSwitcher_Get"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"Tags", description:tr("Tags"), default_selector: "string", disable_int:true, value_string:"Microsoft Windows,Chrome", variants: ["*", 'Desktop', 'Mobile', 'Microsoft Windows', 'Apple Mac', 'Android', 'Linux', 'iPad', 'iPhone', 'Edge', 'Chrome', 'Safari', 'Firefox', 'YaBrowser', 'Windows 10', 'Windows 7', 'Windows 8'], help: 
		{
			description: tr("Select system and device for which you want to obtain fingerprint. Several tags may be combined together, in that case service will return only fingerprints, which matches all tags."), examples:
			[
				{
					code:"Chrome",description:tr("Select Chrome fingerprint for any platform")
				},
				{
					code:"Microsoft Windows,Chrome",description:tr("Select Chrome fingerprint for Windows. This is the only type of fingerprint which can be used for free.")
				},
				{
					code:tr("Empty string"),description:tr("Select any fingerprint")
				}
			]
		} }) %>
  <%= _.template($('#input_constructor').html())({id:"Key", description:tr("Service key. Can be empty"), default_selector: "string", disable_int:true,
  	variants: ["business<br/><span style='color:gray;font-size:small'>" + tr("Use FingerprintBusiness license.") + "</span><br/><span style='color:gray;font-size:small'>" + tr("It can help to embed fingerprints inside compiled script.") + "</span>"],
   	help: 
	{
		description: tr("Fingerprints are fetched from FingerprintSwitcher service, in order to use that service, you need to buy a key(see the link below). However, you may use it for free with Microsoft Windows,Chrome tags and with requests limits. In order to use free version, leave this field blank."), examples:
		[
			{
				code:"pGGeNdza2e0gIw48oa",description:tr("Key example")
			},
			{
				code:"business",description:tr("Use FingerprintBusiness license. It can help to embed fingerprints inside compiled script. Check following") + " " + `<a href='#' style="color:rgba(157, 153, 108, 1.0)" onclick="BrowserAutomationStudio_OpenUrl('` + tr('https://wiki.bablosoft.com/doku.php?id=fingerprintbusiness') + `');return false">` + tr('link') + `</a>` + " " + tr("for more info.")
			},
			
			{
				code:tr("Empty string"),description:tr("Use a free version")
			}
		]
	} }) %>

	<%= _.template($('#info').html())({color: "gray", description: `<span class="tr">This action works with</span> 
  	<a href="#"  onclick="BrowserAutomationStudio_OpenUrl('https://fp.bablosoft.com'); return false;">
  		<span class="tr">Fingerprint switcher service</span></a>. 
  	<span class="tr">You can get a key there</span>. `}) %>


  <%= _.template($('#block_start').html())({id: "PerfectCanvasBlock", name: "PerfectCanvas", description: 
  `
	<span>${tr('With the help of PerfectCanvas technology, canvas data is replaced in the most accurate way possible. Data is drawn on real devices.')}</span> 
	<a href="#" class="tr-en"  onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=perfectcanvas'); return false;">
		<span>${tr('Learn more.')}</span>
	</a>
	<a href="#" class="tr-ru"  onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=ru:perfectcanvas'); return false;">
		<span>${tr('Learn more.')}</span>
	</a>
	<span>${tr('If you want to use PerfectCanvas, you only need to fill this field:')}</span> 
  `}) %>


  
		 <%= _.template($('#input_constructor').html())({id:"PerfectCanvasRequest", description:tr("PerfectCanvas request. Can be blank."), default_selector: "string", disable_int:true, disable_expression:true, value_string:"", use_textarea:true, disable_type_chooser:true,textarea_height:80,
		 help: 
		 {
			 description: tr("PerfectCanvas request contains all data required to render canvas on remote machine. In order to obtain request, use CanvasInspector application, see wiki for more information and download link. \"PerfectCanvas request\" data is obtained one time for site, not for each fingerprint request."), examples:
			 [
				 {
					code:tr("Empty string"),description:tr("Use standard fingerprint. Canvas data will be replaced, by adding noise.")
				 },
				 {
					code:tr("PerfectCanvas request"),description:tr("Use fingerprint with PerfectCanvas. All canvas data, which matches request will be replaced with images from real devices. Any other canvas data will be replaced by adding noise.")
				 }
			 ]
		 }
		  }) %>
		
		<%= _.template($('#info').html())({color: "gray", description: `
			<a href="#" class="tr-en"  onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=perfectcanvas#how_to_obtain_perfectcanvas_request'); return false;">
				<span class="tr">How to get PerfectCanvas request?</span>
			</a>
			<a href="#" class="tr-ru"  onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=ru:perfectcanvas#%D0%BA%D0%B0%D0%BA_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81_perfectcanvas'); return false;">
				<span class="tr">How to get PerfectCanvas request?</span>
			</a>
		`}) %>
		 

		<%= _.template($('#input_constructor').html())({id:"PerfectCanvasDebug", description:tr("PerfectCanvas logs"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true", "false"],
		 help: 
		 {
			 description: tr("Is it necessary to add logs while obtaining fingerprint with PerfectCanvas."), examples:
			 [
				 {
					code:"true",description:tr("Add logs, may be useful for diagnostic.")
				 },
				 {
					code:"false",description:tr("Disable logs, fingerprint will be obtained without any messages.")
				 }
			 ]
		 } }) %>

		<%= _.template($('#input_constructor').html())({id:"EnablePrecomputedFingerprints", description:tr("Enable precomputed fingerprints with PerfectCanvas"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true", "false"],
		 help: 
		 {
			 description: tr("In case if fingerprint with specified PerfectCanvas request is not present in static database, canvas data will be rendered in real time from machines which are currently connected. This is default behavior, but sometimes you may avoid quering static database and use dynamic rendering instantly. In order to do that, set this value to false. This settings has no effect if PerfectCanvas request is not set or if CustomServers are used."), examples:
			 [
				 {
					code:"true",description:tr("Fingerprints with specified PerfectCanvas request will be searched inside static database, if not found, canvas data will be rendered in real time from machines which are currently connected.")
				 },
				 {
					code:"false",description:tr("Fingerprints with specified PerfectCanvas request will be rendered in real time from machines which are currently connected.")
				 }
			 ]
		 } }) %>
		
	<%= _.template($('#block_end').html())() %>

	<%= _.template($('#block_start').html())({id: "Advanced", name: tr("Options"), description: tr("")}) %>

  		<%= _.template($('#input_constructor').html())({id:"AddedDate", description:tr("Minimum added date"), default_selector: "string", disable_int:true, value_string:"*", variants: ["*", '15 days', '30 days', '60 days'], help: 
		{
			description: tr("Select only fingerprints, which added date matches certain condition"), examples:
			[
				{
					code:"*",description:tr("Doesn't filter on added date")
				},
				{
					code:"15 days",description:tr("Select only fingerprints, which was added to database no more than 15 days ago")
				}
			]
		} }) %>
		<%= _.template($('#input_constructor').html())({id:"BrowserVersion", description:tr("Minimum browser version"), default_selector: "string", value_string:"*", variants: 
		[
			"*", 
			"111<br/><span style='color:gray;font-size:small'>" + tr("Specific browser version or higher") + "</span>",
			"current<br/><span style='color:gray;font-size:small'>" + tr("Browser version equals to BAS browser version or higher") + "</span>"
		], help: 
		{
			description: tr("Select only fingerprints, which has certain browser version. It is recommended to use this option together with explicitly specifying browser name. For example, you can select fingerprints for Chrome browser with version greater than 75. By setting \"Minimum browser version\" and \"Maximum browser version\" to same value, you can select exact version. If you use \"current\" as input parameter for both minimum and maximum browser version, it will help to avoid discrepancy between BAS browser version and browser version from fingerprint. Therefore browser authenticity will be significantly increased."), examples:
			[
				{
					code:"*",description:tr("Doesn't filter on browser version")
				},
				{
					code:"111",description:tr("Browser version must be equal or greater than 111")
				},
				{
					code:"current",description:tr("Browser version must be equal or greater than BAS browser version")
				}
			]
		} }) %>
		<%= _.template($('#input_constructor').html())({id:"MaxBrowserVersion", description:tr("Maximum browser version"), default_selector: "string", value_string:"*", variants: 
		[
			"*", 
			"111<br/><span style='color:gray;font-size:small'>" + tr("Specific browser version or lower") + "</span>",
			"current<br/><span style='color:gray;font-size:small'>" + tr("Browser version equals to BAS browser version or lower") + "</span>"
		], help: 
		{
			description: tr("Select only fingerprints, which has certain browser version. It is recommended to use this option together with explicitly specifying browser name. For example, you can select fingerprints for Chrome browser with version less than 75. By setting \"Minimum browser version\" and \"Maximum browser version\" to same value, you can select exact version. If you use \"current\" as input parameter for both minimum and maximum browser version, it will help to avoid discrepancy between BAS browser version and browser version from fingerprint. Therefore browser authenticity will be significantly increased."), examples:
			[
				{
					code:"*",description:tr("Doesn't filter on browser version")
				},
				{
					code:"111",description:tr("Browser version must be equal or less than 111")
				},
				{
					code:"current",description:tr("Browser version must be equal or less than BAS browser version")
				}
				
			]
		} }) %>
		<%= _.template($('#input_constructor').html())({id:"MinimumWidth", description:tr("Minimum browser width"), default_selector: "string", value_string:"*", variants: ["*", "1600"], help: 
		{
			description: tr("Select only fingerprints, which has minimum browser width."), examples:
			[
				{
					code:"*",description:tr("Doesn't filter on browser width")
				},
				{
					code:"1600",description:tr("Browser width must be equal or greater than 1600")
				}
			]
		} }) %>
		<%= _.template($('#input_constructor').html())({id:"MinimumHeight", description:tr("Minimum browser height"), default_selector: "string", value_string:"*", variants: ["*", "900"], help: 
		{
			description: tr("Select only fingerprints, which has minimum browser height."), examples:
			[
				{
					code:"*",description:tr("Doesn't filter on browser height")
				},
				{
					code:"900",description:tr("Browser height must be equal or greater than 900")
				}
			]
		} }) %>

		<%= _.template($('#input_constructor').html())({id:"MaximumWidth", description:tr("Maximum browser width"), default_selector: "string", value_string:"*", variants: ["*", "2000"], help: 
		{
			description: tr("Select only fingerprints, which has maximum browser width."), examples:
			[
				{
					code:"*",description:tr("Doesn't filter on browser width")
				},
				{
					code:"2000",description:tr("Browser width must be equal or less than 2000")
				}
			]
		} }) %>
		<%= _.template($('#input_constructor').html())({id:"MaximumHeight", description:tr("Maximum browser height"), default_selector: "string", value_string:"*", variants: ["*", "1200"], help: 
		{
			description: tr("Select only fingerprints, which has maximum browser height."), examples:
			[
				{
					code:"*",description:tr("Doesn't filter on browser height")
				},
				{
					code:"1200",description:tr("Browser height must be equal or less than 1200")
				}
			]
		} }) %>

		<%= _.template($('#line').html())({}) %>

		<%= _.template($('#input_constructor').html())({id:"SuppressWarnings", description:tr("Suppress configuration warnings"), default_selector: "string", value_string:"false", variants: ["true", "false"], help: 
		{
			description: tr("By default warnings will be displayed if this action is not configured properly and this configuration may lead to detection. You can suppress these warnings by setting this param. Warnings are displayed only in record mode."), examples:
			[
				{
					code:"true",description:tr("Don't display warnings")
				},
				{
					code:"false",description:tr("Display warnings about incorrect configuration")
				}
			]
		} }) %>
		
	<%= _.template($('#block_end').html())() %>

	<%= _.template($('#block_start').html())({id: "CustomServersBlock", name: tr("Custom servers"), description: tr(`
	<span>${tr('If you are the site owner, you can collect fingerprints from users of your site.')}</span> 
	<a href="#" class="tr-en"  onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=customservers'); return false;">
		<span>${tr('Learn more.')}</span>
	</a>
	<a href="#" class="tr-ru"  onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=ru:customservers'); return false;">
		<span>${tr('Learn more.')}</span>
	</a>
	
	`)}) %>

	<%= _.template($('#input_constructor').html())({id:"EnableCustomServers", description:tr("Use custom server"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true", "false"],
		help: 
		{
			description: tr("This option is useful only if you have custom server functionality enabled in your account. Otherwise, it will always give error. If you have this setting enabled, fingerprint will be obtained only from custom server. It is compatible with PerfectCanvas. Check wiki for more info."), examples:
			[
				{
				code:"true",description:tr("Use custom server to obtain fingerprint.")
				},
				{
				code:"false",description:tr("Obtain fingerprint from common server.")
				}
			]
		} }) %>

	<%= _.template($('#input_constructor').html())({id:"DynamicPerfectCanvas", description:tr("PerfetCanvas rendering in real time"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true", "false"],
		help: 
		{
			description: tr("In case if fingerprint with specified PerfectCanvas request is not present in static database, canvas data will be rendered in real time from machines which are currently connected. This is default behavior, but sometimes you may avoid dynamic rendering to save time or for some other reason. In order to do that, set this value to false. This settings has no effect if PerfectCanvas request is not set."), examples:
			[
				{
				code:"true",description:tr("Fingerprints with specified PerfectCanvas request will be searched inside static database, if not found, canvas data will be rendered in real time from machines which are currently connected.")
				},
				{
				code:"false",description:tr("Fingerprints with specified PerfectCanvas request will be searched inside static database, if not found, error will occur.")
				}
			]
		} }) %>

	<%= _.template($('#block_end').html())() %>

	<%= _.template($('#block_start').html())({id: "Support", name: tr("Researching sites protection"), description: `
		<span>
			<span>${tr('Use following page to report about anti-bot detection on particular site, ')}</span>
			<a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://community.bablosoft.com/topic/12199/'); return false;" class="tr-en">link</a>
			<a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://community.bablosoft.com/topic/12198/'); return false;" class="tr-ru">ссылка</a>
		
		</span>
	`}) %>
		
	<%= _.template($('#block_end').html())() %>


  <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "FINGERPRINT", help: 
	{
		description: tr("This variable will contain fingerprint string. Fingerprint string contains all data necessary to change fingerprint. It can be used immediately with 'Apply fingerprint' action. It also can be saved to a text file or database and reused later.")
	}}) %>

</div>


<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get browser fingerprint, which contains: user agent, screen size, navigator, fonts and many more.</div>
	  <div class="tr tooltip-paragraph-fold">After execution of this action will complete, [[FINGERPRINT]] variable will contain fingerprint string. Fingerprint string contains all data necessary to change fingerprint. It can be used immediately with 'Apply fingerprint' action. It also can be saved to a text file or database and reused later.</div>

      <div class="tr tooltip-paragraph-fold">Using this action is like user agent switcher on steroids. It changes not only user agent, but a lot of browser internals to make BAS actually look like firefox, chrome, safari, on desktop or on mobile.</div>
      <div class="tr tooltip-paragraph-fold">Several additional features may be used to make your browser less detectable. Apply proxy through 'Proxy' action. Change timezone with 'Set timezone and geolocation by ip' action. Use, store and reuse profiles, because starting browser on newly created profiles may be suspicious.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Fingerprints are fetched from</span> <a href="#"  onclick="BrowserAutomationStudio_OpenUrl('https://fp.bablosoft.com'); return false;">
  		FingerprintSwitcher</a> <span class="tr">service, in order to use that service, you need to </span>
		<a href="#"  onclick="BrowserAutomationStudio_OpenUrl('https://bablosoft.com/shop/FingerprintSwitcher'); return false;" class="tr">buy a key</a>.
      </div>
	  <div class="tr tooltip-paragraph-fold">Fingerprints are for personal usage only. Sending them to other users or sharing online is prohibited. This also includes embedding fingerprints inside compiled script. Violating this rule will lead to blocking your key without refund possibility.</div>
	  <div class="tooltip-paragraph-fold">
		<span class="tr">In order to embed fingerprints into your compiled script, you can ask each user to buy its own key. Alternative way is to use</span> 
		<span class="tr-en"><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=fingerprintbusiness'); return false;">FingerprintBusiness</a>.</span>
		<span  class="tr-ru"><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=ru:fingerprintbusiness'); return false;">FingerprintBusiness</a>.</span>
		<span class="tr">This service allows to assign fingerprint licenses to your users through web panel.</span>
	  </div>

      <div class="tr tooltip-paragraph-fold">However, you may get fingerprints for free with Microsoft Windows,Chrome tags and with requests limits. In order to run free version, leave 'Service key' field blank.</div>
      <div class="tr tooltip-paragraph-fold">Fingerprint service fetches data from a real browsers on real devices, so you may be sure, that fingerprints are always fresh - contain actual user agent, plugin versions, etc.</div>
      <div class="tr tooltip-paragraph-fold">Applying fingerprint doesn't require browser restart, so it won't reset your settings.</div>

	  <div class="tooltip-paragraph-fold"><span class="tr">By default FingerprintSwitcher adds noise to canvas data. If you want to have more accurate results, use PerfectCanvas technology. It renders canvas data on real device and then replaces canvas fingerprinting results inside your browser. In order to use it, some preparation must be made. You need to fill "PerfectCanvas request" field. Data for this field can be obtained by using CanvasInspector application. This application is free and easy to install, it allows to get PerfectCanvas request for site that you working with. More info and download link can be found</span> 
	  <a href="#" class="tr-en tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=perfectcanvas#how_to_obtain_perfectcanvas_request'); return false;">here</a>
	  <a href="#" class="tr-ru tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=ru:perfectcanvas#%D0%BA%D0%B0%D0%BA_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81_perfectcanvas'); return false;">here</a>.</div>

	  <div class="tr tooltip-paragraph-fold">In order to replace fingerprint with PerfectCanvas, it is sufficient to call this action with "PerfectCanvas request" field filled out, and then use fingerprint by calling "Apply fingerprint" action.</div>

	  <div class="tr tooltip-paragraph-fold">"PerfectCanvas request" data is obtained one time for site, not for each fingerprint request.</div>

	  <div class="tr tooltip-paragraph-fold">If you leave "PerfectCanvas request" field empty, this action will return standart fingerprint with noise canvas replacement.</div>
	  <div class="tr tooltip-paragraph-fold">Getting fingerprint with PerfectCanvas may require some time depending on request queue length and tag combination that you are using. If you are using combination of tags which are rare, this can be slow. Use * as input for "Tags" field to speed up process. Obtaining fingerprint for popular service may also be slow.</div>
	  <div class="tr tooltip-paragraph-fold">Getting fingerprint with PerfectCanvas can only performed in single thread, you can still use several threads, but rest of the threads will be waiting, while only one will work.</div>

	  <div class="tr tooltip-paragraph-fold">If you have "PerfectCanvas request" field prepared for "site A", and you visit "site B" then canvas data for "site B" will be replaced by adding noise. If you want canvas data to be replaced for both sites, you have to prepare request for both "site A" and "site B".</div>

	  <div class="tr tooltip-paragraph-fold">In order to check if data for PerfectCanvas was actually replaced check log at BrowserAutomationStudio/apps/CURRENT_BAS_VERSION/s/PROCESS_ID.txt file.</div>


	  <div class="tooltip-paragraph-fold"><span class="tr">If you want to select fingerprint with specific browser version, set "Minimum browser version" and "Maximum browser version" parameter to same value. Instead of selecting specific version, you can use special word "current". By using "current" in both minium and maximum version parameters you can unsure that BAS browser version will match browser version from fingerprint. Therefore browser authenticity will be significantly increased.</span>
		<span class="tr-en">
			<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=browserautomationstudio_2023-04-30_07-34-05.png'); return false;">screen</a>.
		</span>
		<span class="tr-ru">
			<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=browserautomationstudio_2023-04-30_08-24-55.png'); return false;">скрин</a>.
		</span>
	  </div>

	  <div class="tr tooltip-paragraph-fold">Each BAS version may be shipped with one or several browser versions. You can change browser version for current thread, in order to do that use "Browser Settings" action with "Browser Version" parameter. After browser version for current thread will be changed, using special word "current" will select fingerprints of changed version.</div>


      <div class="tooltip-paragraph-last-fold"><span class="tr">You can find more information and get test fingerprints on following page</span> <a href="#"  onclick="BrowserAutomationStudio_OpenUrl('https://fp.bablosoft.com'); return false;">
  		FingerprintSwitcher</a>.</div>
</div>


<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="FingerprintSwitcher_Apply"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"Fingerprint", description:tr("Fingerprint"), default_selector: "string", disable_int:true, help: 
	{
		description: tr("This value must contain fingerprint string. Fingerprint string contains all data necessary to change fingerprint. It can be obtained as result of 'Get fingerprint' action. Note that this value may be reused - if you store it into file or database, and load on next BAS start, it will still work.")
	}}) %>

  <%= _.template($('#input_constructor').html())({id:"Key", description:tr("Service key. Can be empty"), default_selector: "string", disable_int:true,
  	variants: ["business<br/><span style='color:gray;font-size:small'>" + tr("Use FingerprintBusiness license.") + "</span><br/><span style='color:gray;font-size:small'>" + tr("It can help to embed fingerprints inside compiled script.") + "</span>"],
   	help: 
	{
		description: tr("Fingerprints are obtained from the FingerprintSwitcher service. To use this service, you need to purchase a key. The key is verified both when fetching and applying the fingerprint. If the fingerprint was obtained using the free version (without a key), you can leave the key field blank. However, if the fingerprint was obtained with the paid version, you must provide a valid key to apply it. To use the free version, simply leave this field blank."), examples:
		[
			{
				code:"pGGeNdza2e0gIw48oa",description:tr("Key example, it is required if fingerprint was obtained with paid version.")
			},
			{
				code:"business",description:tr("Use FingerprintBusiness license. It can help to embed fingerprints inside compiled script. Check following") + " " + `<a href='#' style="color:rgba(157, 153, 108, 1.0)" onclick="BrowserAutomationStudio_OpenUrl('` + tr('https://wiki.bablosoft.com/doku.php?id=fingerprintbusiness') + `');return false">` + tr('link') + `</a>` + " " + tr("for more info.")
			},
			
			{
				code:tr("Empty string"),description:tr("Use a free version. Only if fingerprint was obtained with free version.")
			}
		]
	} }) %>

  <%= _.template($('#info').html())({color: "gray", description: `<span class="tr">This action works with</span> 
  	<a href="#"  onclick="BrowserAutomationStudio_OpenUrl('https://fp.bablosoft.com'); return false;">
  		<span class="tr">Fingerprint switcher service</span></a>. 
  	<span class="tr">You can get a key there</span>. `}) %>

  <%= _.template($('#block_start').html())({id: "Support", name: tr("How canvas data is being replaced?"), description: `
		<div class="tr">If "Use PerfectCanvas" option is set to true and data for certain image is present inside fingerprint, image will be replaced with data obtained from real device.</div>
    <div class="tr">This is the best option. Try to use PerfectCanvas whenever it is possible.</div>
    <div class="tr">If PerfectCanvas data for specific image is not available, or PerfectCanvas is not available at all, either noise will be added to image, or image obtained from current device will be used. This behavior depends on following settings: "Add noise to canvas data", "Add noise to WebGL data" and "Add noise to audio data".</div>
    <div class="tr">Adding noise could be dangerous  if site checks canvas uniqueness, while using native image can expose your real fingerprint, so it is better to use PerfectCanvas.</div>
	`}) %>
 <%= _.template($('#block_end').html())() %>
 
 <%= _.template($('#input_constructor').html())({id:"PerfectCanvas", description:tr("Use PerfectCanvas"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true", "false"], help: { description: tr("If this settings is set to true, PerfectCanvas replacement will be enabled. Fingerprint must contain PerfectCanvas data in order to make it work. See \"Get fingerprint\" action for explanation.")}}) %>

 <%= _.template($('#input_constructor').html())({id:"CanvasNoise", description:tr("Add noise to canvas data"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true", "false"], help: { description: tr("If this settings is set to true, canvas will be enabled and noise will be added to all data returned from canvas")}}) %>

  <%= _.template($('#input_constructor').html())({id:"WebglNoise", description:tr("Add noise to WebGL data"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true", "false"], help: { description: tr("If this settings is set to true, WebGL will be enabled, noise will be added to WebGL canvas and your hardware properties, like video card vendor and renderer, will be changed")}}) %>

  <%= _.template($('#input_constructor').html())({id:"AudioNoise", description:tr("Add noise to audio data"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true", "false"], help: { description: tr("If this settings is set to true, audio will be enabled, noise will be added to sound and your hardware properties, like sample rate and naumber of channels, will be changed")}}) %>

  <%= _.template($('#input_constructor').html())({id:"SafeBattery", description:tr("Safe Battery"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true", "false"], help: { description: tr("If this settings is set to true battery API will show different values for each thread, this prevents sites for detecting your real identity. In case if device from which fingerprint was obtained doesn't have battery API, 100% charge level will always be returned.")}}) %>
  
  <%= _.template($('#input_constructor').html())({id:"FontData", description:tr("Use font pack"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true", "false"], help: { description: tr("By default browser searches for fonts only in system font folder. This may lead to inconsistencies during fingerprint emulation if target fingerprint has more fonts than local system. Therefore, it is recommended to download font pack with most popular fonts. This setting allows to use font pack if it is installed.")}}) %>

  <%= _.template($('#info').html())({color: "gray", description: `<span class="tr">More info about font pack and download link can be found</span>
    <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=fontpack'); return false;" class="tr-en">here</a>
    <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=ru:fontpack'); return false;" class="tr-ru">здесь</a>`}) %>

  <%= _.template($('#input_constructor').html())({id:"SafeRectangles", description:tr("Safe Element Size"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true", "false"], help: { description: tr("If this settings is set to true, results of API which returns element coordinates will be updated to protect against 'client rects' fingerprinting.")}}) %>
  
  <%= _.template($('#input_constructor').html())({id:"EmulateSensor", description:tr("Emulate Sensor API"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true", "false"], help: { description: tr("Chrome browser has Sensor API, which allows to read data from devices like accelerometer, gyroscope or others. Data from that devices is available only on mobile platforms. After checking this setting data for that devices will be generated and replaced automatically. Enable this option in order to emulate mobile fingerprints more precisely.")}}) %>

  <%= _.template($('#input_constructor').html())({id:"EmulateDeviceScaleFactor", description:tr("Emulate device scale factor"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true", "false"], help: { description: tr("Allows to better emulate devices with higher pixel density. With this setting enabled, emulation will be done in the most natural way. It means that browser will render the page in a bigger resolution, just like on real device. The tradeoff is higher system resources usage, because you need to perform more calculations to render a bigger picture. Javascript settings related to pixel density, for example devicePixelRatio, will be replaced correctly regardless if this setting will be enabled or not.")}}) %>

  
</div>



<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Change browser fingerprint, which contains: user agent, screen size, navigator, fonts and many more.</div>
	<div class="tr tooltip-paragraph-fold">'Fingerprint' input parameter must contain fingerprint string. Fingerprint string contains all data necessary to change fingerprint. It can be obtained as result of 'Get fingerprint' action. Note that this value may be reused - if you store it into file or database, and load on next BAS start, it will still work.</div>
      <div class="tr tooltip-paragraph-fold">Using this action is like user agent switcher on steroids. It changes not only user agent, but a lot of browser internals to make BAS actually look like firefox, chrome, safari, on desktop or on mobile.</div>
      <div class="tr tooltip-paragraph-fold">Several additional features may be used to make your browser less detectable. Apply proxy through 'Proxy' action. Change timezone with 'Set timezone and geolocation by ip' action. Use, store and reuse profiles, because starting browser on newly created profiles may be suspicious.</div>
      <div class="tr tooltip-paragraph-fold">Applying fingerprint doesn't require browser restart, so it won't reset your settings.</div>

      <div class="tooltip-paragraph-last-fold"><span class="tr">You can find more information and get test fingerprints on following page</span> <a href="#"  onclick="BrowserAutomationStudio_OpenUrl('https://fp.bablosoft.com'); return false;">
  		FingerprintSwitcher</a>.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="FingerprintSwitcher_Performance"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"TimeDeformationFrom", description:tr("Time deformation from"), default_selector: "expression", disable_int:true, value_string: "1.0", help: 
		{
			description: tr("Specifies how much the timing measurement results will be stretched. Big values means that site will think, that code execution will take longer than it actually would. Values which are close to 0.0 creates a sense that code executes faster. For example, if resulting time deformation is 1.1 and execution of particular code will take 10 msec, site will think, that code was executed in 11 msec instead. Values below zero are irrelevant. This parameter works only with \"Time deformation to\" parameter."), examples:
			[
				{
					code:"1.0 - 1.2",description:tr("Time deformation coefficient will be selected randomly between 1.0 and 1.2. Time measurements will show higher values than it actually is.")
				},
				{
					code:"0.8 - 1.0",description:tr("Time deformation coefficient will be selected randomly between 0.8 and 1.0. Time measurements will show lower values than it actually is.")
				},
				{
					code:"1.15 - 1.15",description:tr("Set deformation coefficient to exact value.")
				},
				{
					code:"1.0 - 1.0",description:tr("No time deformation will be applied.")
				}
			]
		} }) %>
	<%= _.template($('#input_constructor').html())({id:"TimeDeformationTo", description:tr("Time deformation to"), default_selector: "expression", disable_int:true, value_string: "1.2", help: 
		{
			description: tr("Specifies how much the timing measurement results will be stretched. Big values means that site will think, that code execution will take longer than it actually would. Values which are close to 0.0 creates a sense that code executes faster. For example, if resulting time deformation is 1.1 and execution of particular code will take 10 msec, site will think, that code was executed in 11 msec instead. Values below zero are irrelevant. This parameter works only with \"Time deformation from\" parameter."), examples:
			[
				{
					code:"1.0 - 1.2",description:tr("Time deformation coefficient will be selected randomly between 1.0 and 1.2. Time measurements will show higher values than it actually is.")
				},
				{
					code:"0.8 - 1.0",description:tr("Time deformation coefficient will be selected randomly between 0.8 and 1.0. Time measurements will show lower values than it actually is.")
				},
				{
					code:"1.15 - 1.15",description:tr("Set deformation coefficient to exact value.")
				},
				{
					code:"1.0 - 1.0",description:tr("No time deformation will be applied.")
				}
			]
		} }) %>

	<%= _.template($('#input_constructor').html())({id:"MaxMeasurementTime", description:tr("Max measurement time"), default_selector: "int", disable_string:true, value_number: 100, variants: ["30<br/><span style='color:gray;font-size:small'>" + tr("Do replacement only if interval is less than 30 milliseconds") + "</span>", "100<br/><span style='color:gray;font-size:small'>" + tr("Do replacement only if interval is less than 100 milliseconds") + "</span>", "100000<br/><span style='color:gray;font-size:small'>" + tr("Always do replacement.") + "</span>"], help: 
	{
		description: tr("This action will try to modify time measurements only when it is executed between small time intervals. In case if interval between measurements is big, it can't be used for browser fingerprinting, therefore replacement is not required. This parameter designates maximum time between measurements to perform replacement."), examples:
		[
			{
				code:"100",description:tr("Default value, do replacement only if interval is less than 100 milliseconds.")
			},
			{
				code:"100000",description:tr("Always do replacement.")
			}
		]
	} }) %>

	<%= _.template($('#input_constructor').html())({id:"DisablePerformancePrecision", description:tr("Disable performance precision"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true", "false"],
     help: 
     {
         description: tr("By default time measurement will return value that has high precision, it can be more than 1 milliseconds. For example, value 1200.695 means 1 second and 200.695 milliseconds. This can be used to generate browser fingerprint, but you can limit presicion up to 1 millisecond by using this parameter. This means that returned value will be 1200.0 instead of 1200.695. It will neglect fingerprinting but may look suspicious, so it is better to use time deformation instead."), examples:
         [
             {
                code:"false",description:tr("Default, allow high precision.")
             },
             {
                code:"true",description:tr("Disable high precision.")
             }
         ]
     } }) %>

</div>


<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Modify performance fingerprint.</div>
	<div class="tr tooltip-paragraph-fold">This action allows to bypass device fingerprinting techniques based on measuring the execution time of a certain javascript functionality. For example, site can measure execution time of some cryptographic methods which depends on installed hardware. Results will be the same across different runs and therefore may be used for fingerprinting.</div>
      <div class="tr tooltip-paragraph-fold">Following action will slightly change results of time measurements in order to reduce these techniques. The magnitude of these time changes can be set with "Time deformation from" and "Time deformation to" parameters.</div>
      <div class="tr tooltip-paragraph-fold">Default values must work fine and can be used without changes.</div>
	  <div class="tr tooltip-paragraph-fold">In order to reset default values, set "Time deformation from" and "Time deformation to" parameters with 1.0 value.</div>
	  <div class="tr tooltip-paragraph-fold">This technology is still highly experimental and may lead to unpredictable results.</div>
	  <div class="tr tooltip-paragraph-fold">All values will be saved to current profile and will be automatically restored on next profile usage.</div>
	  <div class="tr tooltip-paragraph-last-fold">By using "Disable performance precision" parameter precision of time measurement will be reduced. It will neglect fingerprinting, but may look suspicious. See parameter description for more details.</div>

     
</div>


<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="FingerprintSwitcher_Override"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({id:"Key", description:tr("FingerprintSwitcher key. Can be empty"), default_selector: "string", disable_int:true,
		variants: ["business<br/><span style='color:gray;font-size:small'>" + tr("Use FingerprintBusiness license.") + "</span><br/><span style='color:gray;font-size:small'>" + tr("It can help to embed fingerprints inside compiled script.") + "</span>"],
		help: 
		{
		description: tr("Fingerprints are obtained from the FingerprintSwitcher service. To use this service, you need to purchase a key. This parameter will override any FingerprintSwitcher key set in actions such as 'Get fingerprint' or 'Apply fingerprint'. The key specified in this parameter will take precedence over any key set in other actions. For example, if this parameter contains key1 and a subsequent 'Get fingerprint' action specifies key2, the key from this parameter (key1) will still be used."), examples:
		[
			{
			code:"pGGeNdza2e0gIw48oa",description:tr("Key example, will override any FingerprintSwitcher key set in actions such as 'Get fingerprint' or 'Apply fingerprint'.")
			},
			{
			code:"business",description:tr("Use FingerprintBusiness license. It can help to embed fingerprints inside compiled script. Check following") + " " + `<a href='#' style="color:rgba(157, 153, 108, 1.0)" onclick="BrowserAutomationStudio_OpenUrl('` + tr('https://wiki.bablosoft.com/doku.php?id=fingerprintbusiness') + `');return false">` + tr('link') + `</a>` + " " + tr("for more info.")
			},
			
			{
			code:tr("Empty string"),description:tr("Use a free version. Empty key will be used in any action which requires FingerprintSwitcher key set, such as 'Get fingerprint' or 'Apply fingerprint'.")
			}
		]
		} }) %>

	<%= _.template($('#info').html())({color: "gray", description: `<span class="tr">This action works with</span> 
  	<a href="#"  onclick="BrowserAutomationStudio_OpenUrl('https://fp.bablosoft.com'); return false;">
  		<span class="tr">Fingerprint switcher service</span></a>. 
  	<span class="tr">You can get a key there</span>. `}) %>
  
</div>



<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">This action will override any FingerprintSwitcher key for actions such as 'Get fingerprint' or 'Apply fingerprint'.</div>
	  <div class="tr tooltip-paragraph-fold">It may be convenient to call it when the thread starts. In that case key specified here will be used for any action which requires FingerprintSwitcher key.</div>
      <div class="tr tooltip-paragraph-fold">This action doesn't actually checks if key is valid or not. So even if you input incorrect key here, you won't get any error. Key will be checked only after getting or applying fingerprint for the first time.</div>
      <div class="tr tooltip-paragraph-fold">Empty value can be used here, in that case free version of FingerprintSwitcher will be used for this thread.</div>
      <div class="tr tooltip-paragraph-last-fold">You can disable the key override by using the 'Disable overriding key' action. In this case, the original behavior will be restored, and the original key values from actions such as 'Get fingerprint' or 'Apply fingerprint' will be used.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="FingerprintSwitcher_DisableOverride"><div class="container-fluid">

  
</div>



<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">This action will disable override of FingerprintSwitcher key previously set with 'Override key' action.</div>
	  <div class="tr tooltip-paragraph-last-fold">It will do nothing if 'Override key' action was not called previously.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="asyncfunction_call"><div class="container-fluid executefunction">
    <div class="col-xs-12" style="margin-bottom: 5px;">
    
    <div class="input-group">
        
        <span data-preserve="true" data-preserve-type="text" data-preserve-id="FunctionName">
        <input class="form-control function-input" type="text" id="FunctionName" placeholder="Function name" />
        <ul class="dropdown-menu input-field-dropdown dropdown-align dropdown-black">
            <li>
            <a tabindex="-1" href="#" class="func" data-result-target="#FunctionName">
                <span class="tr">Select function</span>
            </a>
            </li>
        </ul>
        </span>        

        <span class="input-group-addon input-description tr">Function name</span>
    </div>
    
    </div>
    <div id="FunctionParametersNoReturn">
    </div>
    <%= _.template($('#variable_constructor').html())({id:"ResultThreadId", description:tr("Result thread id"), default_variable: "THREAD_ID", help: { description: tr("Instead of function result, this variable contains identifier, which can be used to obtain function result when function will finish. It also allows communicating with function, with help of it you can: obtain function result, wait for function completion or stop function.")}}) %>

    <%= _.template($('#block_start').html())({id: "Advanced", name: tr("Additional settings"), description: tr("")}) %>
        <%= _.template($('#input_constructor').html())({id:"DesiredThreadId", description:tr("Desired thread id"), default_selector: "int", disable_string:true, value_number:0, min_number:0, max_number:999999, variants: ["0<br/><span style='color:gray;font-size:small'>" + tr("Start in a new thread") + "</span>"], help: 
{
  description: tr("Identifier for thread, where function will start. By default function will be started in new thread, but you can change that behavior by modifying this value."), examples:
  [
    {
      code:"0",description:tr("Start task in a new thread. New thread id will be returned in 'Result thread id' parameter.")
    },
    
    {
      code:"[[THREAD_ID]]",description:tr("Start task in old thread. THREAD_ID variable must be obtained as a result of previously called 'Call function asynchronously' action. Previous action call must set 'Close thread after function finish' parameter to false, otherwise thread will be stopped.")
    }
  ]
}}) %>
        <%= _.template($('#input_constructor').html())({id:"CloseThreadAfterFunctionEnds", description:tr("Close thread after function finish"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true<br/><span style='color:gray;font-size:small'>" + tr("Close thread after function will finish") + "</span>", "false<br/><span style='color:gray;font-size:small'>" + tr("Don't close thread<br/>Next function can be called in this thread") + "</span>"], help: 
{
  description: tr("If thread must be stopped after this function will finish execution. Default value is true, which helps to prevent hanging threads. Set it to false only if you want to use this thread later."), examples:
  [
    {
      code:"true",description:tr("Close thread after function will finish")
    },
    
    {
      code:"false",description:tr("Don't close thread. Next function can be called in this thread. Use 'Desired thread id' to start new function in same thread.")
    }
  ]
}}) %>

    <%= _.template($('#input_constructor').html())({id:"OnIdle", description:tr("On idle"), default_selector: "string", disable_int:true, value_string: "wait", variants: ["wait", "start postponded function"], help: 
{
  description: tr("This setting defines behavior, which will be performed on idle, ie when function will finish but thread will remain active. By using 'start postponded function' option you can achieve such behavior, when all functions will be executed in same pool of threads. This will help to save resources needed to restrat threads and browsers. Don't forget to set 'Close thread after function finish' to false, otherwise threads will be closed automatically, idle state won't be achieved and effect will be neglected."), examples:
  [
    {
      code:"wait",description:tr("Default. When thread has no work to do, it will wait to new function call.")
    },
    
    {
      code:"start postponded function",description:tr("In idle state thread will look for postdonded functions, thoose, which was queued due to 'Maximum async tasks executed simultaneously' setting. If such function will be found, it will be executed in current thread.")
    }
  ]
}}) %>

        <%= _.template($('#input_constructor').html())({id:"MaxThreads", description:tr("Maximum async tasks executed simultaneously"), default_selector: "int", disable_string:true, value_number: 30, min_number:0, max_number:999999, help: 
{
  description: tr("Maximum simultaneously running threads with async functions per application. If function will be started beyond the limit, it will be postponed and will be started immediately after some other async function will finish and the limit will not be exceeded. This is very powerful setting, it allows you to start as many threads as you want and let BAS balance thread number."), examples:
  [
    {
      code:"30",description:tr("Limit the number of threads to 30. Default.")
    },
    
    {
      code:"1",description:tr("Execute async functions sequentially.")
    },
    
    {
      code:"100",description:tr("Limit the number of threads to 100.")
    }
  ]
}}) %>
        <%= _.template($('#variable_constructor').html())({id:"ThreadList", description:tr("List where thread id will be added"), default_variable: "THREAD_LIST", help: { description: tr("List, where thread id will be added. This variable has a list type and can be processed with \"List\" module. It accumulates all started threads so, you can perform bulk actions on it, for example, stop them immediately all together. If variable doesn't exist, it will be created.")}}) %>
    
    <%= _.template($('#block_end').html())() %>



</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Execute function asynchronously without waiting for its completion.</div>

    <div class="tooltip-paragraph-fold"><span class="tr">Function must be defined beforehand. BAS allows define functions through "Function Manager"</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=browserautomationstudio_2020-02-19_12-28-39.png');return false">screen</a>)</div>
    <div class="tr tooltip-paragraph-fold">Functions are containers, which holds action list. It helps to group several actions which does same task. For example, there can be function which logins to account, function that checks account balance, etc. It makes your code clear and well organized.</div> 
    <div class="tr tooltip-paragraph-fold">Another advantage is that one function may be executed as many times as you want from any place in the script. This helps to avoid code duplication. If you want to update function, you need to do that only once, not in every place where it used.</div>
    <div class="tr tooltip-paragraph-fold">This action will start a new thread and execute function in it with specified parameters.</div>
    <div class="tr tooltip-paragraph-fold">It is important to understand that because of function will be started in a new thread, all local variables won't be available inside function. Function will use completely different browser. It means that, for example, authorization on sites performed in thread that called function won't be available inside function.</div>
    <div class="tr tooltip-paragraph-fold">Sharing data. You can pass data to function by setting input parameters, results from function may be obtained by using "Get async function result" action. Results are available only after function finished working.</div>
    <div class="tooltip-paragraph-fold"><span class="tr">Execution of this action will finish immediately upon invocation even if function execution itself takes significant time.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?media=browserautomationstudio_2020-02-19_17-08-03.png');return false">screen</a>)</div>
    <div class="tooltip-paragraph-fold"><span class="tr">You can wait for one or several asynchronous functions to finish by using "Wait for async function completion" action.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?media=browserautomationstudio_2020-02-19_17-10-57.png');return false">screen</a>)</div>

    <div class="tr tooltip-paragraph-fold">This action behaves differently in record and run mode. In run mode it creates a new thread and parallelizes workflow. In record mode it works almost the same as regular function call, because record mode only works with single thread.</div>
    <div class="tooltip-paragraph-fold"><span class="tr">This action returns thread id inside THREAD_ID variable. This identifier allows communicating with function, with help of it you can: obtain function result, wait for function completion or stop function.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?media=browserautomationstudio_2020-02-19_14-57-58.png');return false">screen</a>)</div>
    <div class="tooltip-paragraph-fold"><span class="tr">Use 'Wait for async function completion' and then 'Get async function result' to get async function result</span>. (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?media=browserautomationstudio_2020-02-19_16-12-55.png');return false">screen</a>)</div>

    <div class="tr tooltip-paragraph-fold">It also adds thread identifier to THREAD_LIST variable. This variable has a list type and can be processed with "List" module. It accumulates all started threads so, you can perform bulk actions on it, for example, stop them immediately all together.</div>
    <div class="tooltip-paragraph-fold"><span class="tr">Script execution won't finish until at least one asynchronous function is working. You can use that behavior to stop script automatically when all tasks are done. For example, if main thread starts two functions, one takes 1 minute and second takes 2 minutes. In that case, script will finish in 2 minutes even if main thread will finish immediately after start.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?media=browserautomationstudio_2020-02-19_14-53-55.png');return false">screen</a>) </div>
    <div class="tooltip-paragraph-fold"><span class="tr">You can limit maximum number of simultaneously running threads with async functions by setting "Maximum async tasks executed simultaneously" parameter. If function will be started beyond the limit, it will be postponed and will be started immediately after some other async function will finish and the limit will not be exceeded. This is very powerful setting, it allows you to start as many threads as you want and let BAS balance thread number.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?media=browserautomationstudio_2020-02-19_14-51-19.png');return false">screen</a>) </div>
    <div class="tr tooltip-paragraph-fold">By default, function will be started in a new thread, and after function will finish, thread will be deleted. However, you can keep thread running and even execute new function in it after old is finished. Next function will share same context - same browser and local variables. Consider following example, there are two functions: SetProxy and DoParsing, if you execute them in different threads, parsing will be performed with real ip, and if you execute them in same thread sequentially, parsing will be performed through proxy. In order to start function in old thread, set "Desired thread id" to old thread id, you need also to set "Close thread after function finish" parameter to false.</div>
    <div class="tooltip-paragraph-last-fold"><span class="tr">If new function will be started in thread, that already has function started, new function will be postponed. This new function will be started immediately after old one gets finished.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?media=browserautomationstudio_2020-02-20_20-12-47.png');return false">screen</a>) </div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:false}) %></script><script type="text/template" id="asyncfunction_wait"><div class="container-fluid executefunction">
    <%= _.template($('#input_constructor').html())({id:"ThreadId", description:tr("Thread id"), default_selector: "expression", disable_int:true, disable_string:true, help: 
{
  description: tr("Thread identifier obtained from 'Call function asynchronously' action. In case if parameter is a list, this action will wait for all async functions in a list to finish."), examples:
  [
    {
      code:"[[THREAD_ID]]",description:tr("Wait for single function.")
    },
    
    {
      code:"[[THREAD_LIST]]",description:tr("Wait for all functions in the list.")
    }
  ]
}}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Wait for async function to finish.</div>

    <div class="tr tooltip-paragraph-fold">In order to use this action, function must be started asynchronously with 'Call function asynchronously' action.</div>
    <div class="tr tooltip-paragraph-fold">It is important to understand that async function call returns immediately, and you can obtain its actual result by waiting for function completion with this action.</div>
    <div class="tr tooltip-paragraph-fold">This action may wait for single function or for list of functions. In order to wait for list, place variable with list type into 'Thread id' parameter, usually its name is THREAD_LIST and it is obtained as a result of 'Call function asynchronously' action.</div>
    <div class="tooltip-paragraph-fold"><span class="tr">By default this action will wait infinite amount of time, but you can specify maximum time to wait. If function will not complete by that time, it will be stopped and error will raise. You can process error with "Ignore Errors" action. Setting maximum time to wait is very convinient way to set timeout to any function.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?media=browserautomationstudio_2020-02-19_17-03-54.png');return false">screen</a>). </div> 
    <div class="tooltip-paragraph-last-fold"><span class="tr">Correct workflow to wait for several functions may look like</span> <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?media=browserautomationstudio_2020-02-19_17-01-15.png');return false">this</a>.</div>

</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true, use_timeout: true, timeout_value: 100000}) %></script><script type="text/template" id="asyncfunction_result"><div class="container-fluid executefunction">
    <%= _.template($('#input_constructor').html())({id:"ThreadId", description:tr("Thread id"), default_selector: "expression", disable_int:true, disable_string:true, help: {description: tr("Thread identifier obtained from 'Call function asynchronously' action.")}}) %>
    <%= _.template($('#variable_constructor').html())({id:"Result", description:tr("Result"), default_variable: "THREAD_RESULT", help: { description: tr("Result of thread execution. In order to set this value from executed function, you need to use 'Result' action. If there was no call of 'Result' action inside function, null will be returned.")}}) %>
    <%= _.template($('#variable_constructor').html())({id:"IsRunnig", description:tr("Is running"), default_variable: "THREAD_IS_RUNNING", help: { description: tr("Boolean value(true/false) indicates if function is still running.")}}) %>
    <%= _.template($('#variable_constructor').html())({id:"IsSuccess", description:tr("Is success"), default_variable: "THREAD_IS_SUCCESS", help: { description: tr("Boolean value(true/false) indicates if last function execution was successful.")}}) %>
    <%= _.template($('#variable_constructor').html())({id:"Error", description:tr("Error string"), default_variable: "THREAD_ERROR", help: { description: tr("Error string in case if last function call was not successful.")}}) %>




</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Obtain asynchronous function result.</div>
    <div class="tr tooltip-paragraph-fold">In order to use this action, function must be started asynchronously with 'Call function asynchronously' action.</div>

    <div class="tr tooltip-paragraph-fold">It is important to understand that async function call returns immediately without result, and you can obtain its actual result only by calling this action later, when function will finish.</div>

    <div class="tr tooltip-paragraph-fold">This action obtains result of function execution, it also helps to obtain function state, if it is still running and if there was error during execution.</div>
    <div class="tr tooltip-paragraph-fold">It makes no sense to check THREAD_RESULT until THREAD_IS_RUNNING is set to true, ie until function is still running.</div>
    <div class="tooltip-paragraph-fold"><span class="tr">You can use THREAD_IS_RUNNING to wait for function result, but it is much easier to use 'Wait for async function completion' action.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?media=browserautomationstudio_2020-02-19_16-06-37.png');return false">screen</a>) </div>
    <div class="tr tooltip-paragraph-last-fold">If there was error during function call, use THREAD_IS_SUCCESS and THREAD_ERROR to check it and obtain error message.</div>
    <div class="tooltip-paragraph-fold"><span class="tr">Correct workflow to get async function result may look like</span> <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?media=browserautomationstudio_2020-02-19_16-12-55.png');return false">this</a>.</div>

</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="asyncfunction_stop"><div class="container-fluid executefunction">
    <%= _.template($('#input_constructor').html())({id:"ThreadId", description:tr("Thread id"), default_selector: "expression", disable_int:true, disable_string:true, help: 
{
  description: tr("Thread identifier obtained from 'Call function asynchronously' action. In case if parameter is a list, this action will stop all async functions in a list."), examples:
  [
    {
      code:"[[THREAD_ID]]",description:tr("Stop single function.")
    },
    
    {
      code:"[[THREAD_LIST]]",description:tr("Stop all functions in the list.")
    }
  ]
}}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Stop async function.</div>
    <div class="tr tooltip-paragraph-fold">This action will immediately stop asynchronous function execution.</div>
    <div class="tr tooltip-paragraph-fold">If "Thread id" parameter contains list, each thread from this list will be stopped.</div> 
    <div class="tr tooltip-paragraph-last-fold">This action only works with async functions created with "Call function asynchronously" action.</div>
    
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="IdleEmulationNew"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "time",
		description: tr("Emulation time"),
		default_selector: "string",
		variants: [
			{value: "short", type: "string", description: tr("From 8 to 13 sec")},
			{value: "medium", type: "string", description: tr("From 25 to 35 sec")},
			{value: "long", type: "string", description: tr("From 50 to 70 sec")},
			{value: "300", type: "int", description: tr("300 sec")},
			{value: "{min: 150, max: 300}", type: "expression", description: tr("From 150 to 300 sec")}
		],
		value_string: "long",
		min_number: 1,
		max_number: 999999,
		help: {
			description: tr("The execution time of the idle emulation.") + " " + tr("As a value can be specified as one of the three presets \"short\", \"medium\" or \"long\", or the exact value in seconds."),
			examples: [
				{code: "short", description: tr("From 8 to 13 sec")},
				{code: "medium", description: tr("From 25 to 35 sec")},
				{code: "long", description: tr("From 50 to 70 sec")},
				{code: "300", description: tr("300 sec")},
				{code: "{min: 150, max: 300}", description: tr("From 150 to 300 sec")}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "accuracy",
		description: tr("Actions accuracy"),
		default_selector: "string",
		variants: [
			"low",
			"medium",
			"high"
		],
		disable_int: true,
		value_string: "medium",
		help: {
			description: tr("Accuracy of actions is a parameter that determines the degree of detail of the algorithm's actions on the page. With high accuracy, the algorithm works with fewer elements by pointing the cursor precisely from one element to another. At low accuracy, the algorithm works with more elements performing many aimless movements."),
			examples: [
				{code: "low", description: tr("The probability of misses, delays and pointing to random coordinates is increased")},
				{code: "medium", description: tr("The parameters responsible for the accuracy of actions have average values")},
				{code: "high", description: tr("The probability of misses, delays and pointing to random coordinates is reduced")}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "intensity",
		description: tr("Actions intensity"),
		default_selector: "string",
		variants: [
			"low",
			"medium",
			"high"
		],
		disable_int: true,
		value_string: "medium",
		help: {
			description: tr("Intensity of actions is a parameter controls the level of algorithm activity during emulation. If the intensity is high, the algorithm will interact with the page more frequently and dynamically. At low intensity, on the contrary, the algorithm will behave more restrained and patient."),
			examples: [
				{code: "low", description: tr("The probability of sleeping and the probability of short cursor movements is increased, the cursor speed is reduced")},
				{code: "medium", description: tr("The parameters responsible for the intensity of actions have average values")},
				{code: "high", description: tr("The probability of long cursor movements and page scrolling is increased, while the probability of sleeping is reduced")}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Actions performed"), description: tr("Using the parameters from this block, you can select what actions will be performed during emulation.")}) %>
		<%= _.template($('#input_constructor').html())({
			id: "sleep",
			description: tr("Sleep"),
			default_selector: "string",
			disable_int: true,
			value_string: "enable",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Sleep random time."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "longElementMove",
			description: tr("Long move to element"),
			default_selector: "string",
			disable_int: true,
			value_string: "enable",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Movement to a random element, with a large search radius for elements."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "shortElementMove",
			description: tr("Short move to element"),
			default_selector: "string",
			disable_int: true,
			value_string: "enable",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Movement to a random element, with a small search radius for elements."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "scroll",
			description: tr("Scroll"),
			default_selector: "string",
			disable_int: true,
			value_string: "enable",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Scroll at random distance."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "randomMove",
			description: tr("Random movement"),
			default_selector: "string",
			disable_int: true,
			value_string: "enable",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Cursor movement to random coordinates."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "microMove",
			description: tr("Micro movement"),
			default_selector: "string",
			disable_int: true,
			value_string: "enable",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Small movements of the cursor, simulating raising the mouse."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "goingBeyond",
			description: tr("Going beyond"),
			default_selector: "string",
			disable_int: true,
			value_string: "enable",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Going beyond the screen and returning back."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "moveAlongText",
			description: tr("Movement along text"),
			default_selector: "string",
			disable_int: true,
			value_string: "enable",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Slowly moving the cursor over an element with text from left to right to emulate reading."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#block_start').html())({id:"manualSetting", name: tr("Manual parameter setting"), description: tr("Using the parameters from this block, you can manually configure some emulation parameters. Specified parameters will be taken into account and default settings will be used for unspecified ones.")}) %>
		<%= _.template($('#input_constructor').html())({
			id: "longMax",
			description: tr("Long movements"),
			default_selector: "string",
			variants: [
				"35%",
				"50%",
				"80%"
			],
			value_string: "",
			min_number: 1,
			max_number: 100,
			help: {
				description: tr("The radius of searching for elements during a long movement, measured as a percentage of the screen diagonal."),
				examples: [
					{code: "35%"},
					{code: "50%"},
					{code: "80%"}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "shortMax",
			description: tr("Short movements"),
			default_selector: "string",
			variants: [
				"15%",
				"25%",
				"30%"
			],
			value_string: "",
			min_number: 1,
			max_number: 100,
			help: {
				description: tr("The radius of searching for elements during a short movement, measured as a percentage of the screen diagonal."),
				examples: [
					{code: "15%"},
					{code: "25%"},
					{code: "30%"}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "miss",
			description: tr("Misses on an element"),
			default_selector: "string",
			variants: [
				{value: "disable", description: tr("Disable misses")},
				{value: "low", description: tr("The chance of a miss and its distance is less")},
				{value: "medium", description: tr("The chance of a miss and its distance have average values")},
				{value: "high", description: tr("The chance of a miss and its distance is greater")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("The mode of performing a miss on an element. The chance of a miss and its distance depend on it."),
				examples: [
					{code: "low", description: tr("The chance of a miss and its distance is less")},
					{code: "medium", description: tr("The chance of a miss and its distance have average values")},
					{code: "high", description: tr("The chance of a miss and its distance is greater")},
					{code: "disable", description: tr("Disable misses")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "delay",
			description: tr("Delay before hover"),
			default_selector: "string",
			variants: [
				{value: "disable", description: tr("Disable delay")},
				{value: "low", description: tr("The chance of delay and its duration is less")},
				{value: "medium", description: tr("The chance of delay and its duration have average values")},
				{value: "high", description: tr("The chance of delay and its duration is greater")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("The mode of performing a delay before hover. The chance of a delay and its duration depends on it."),
				examples: [
					{code: "low", description: tr("The chance of delay and its duration is less")},
					{code: "medium", description: tr("The chance of delay and its duration have average values")},
					{code: "high", description: tr("The chance of delay and its duration is greater")},
					{code: "disable", description: tr("Disable delay")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "filters",
			description: tr("Selecting an element to hover"),
			default_selector: "string",
			variants: [
				{value: "all", description: tr("Don't filter elements")},
				{value: "link", description: tr("Links")},
				{value: "input", description: tr("Input fields")},
				{value: "clickable", description: tr("Clickable elements")},
				{value: "header", description: tr("Headings")},
				{value: "text", description: tr("Texts")},
				{value: "image", description: tr("Images")},
				{value: "icon", description: tr("Icons")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("The mode for selecting elements for hovering, by which elements will be filtered for long and short movements."),
				examples: [
					{code: "link", description: tr("Links")},
					{code: "input", description: tr("Input fields")},
					{code: "clickable", description: tr("Clickable elements")},
					{code: "header", description: tr("Headings")},
					{code: "text", description: tr("Texts")},
					{code: "image", description: tr("Images")},
					{code: "icon", description: tr("Icons")},
					{code: "all", description: tr("Don't filter elements")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "hoverMode",
			description: tr("Hover position"),
			default_selector: "string",
			variants: [
				{value: "random", description: tr("Random position")},
				{value: "tocenter", description: tr("Position close to the center")},
				{value: "randomorcenter", description: tr("Random position or close to the center")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("The position on the element to which hovering will be performed."),
				examples: [
					{code: "random", description: tr("Random position")},
					{code: "tocenter", description: tr("Position close to the center")},
					{code: "randomorcenter", description: tr("Random position or close to the center")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "maxRepeatSkip",
			description: tr("Re-hovering over an element"),
			default_selector: "int",
			disable_string: true,
			variants: [
				{value: "0", type: "int", description: tr("The element can be re-hovered immediately")},
				{value: "1", type: "int", description: tr("The element can be re-hovered after one iteration of move to element, from the search of which this element will be excluded")},
				{value: "3", type: "int", description: tr("The element can be re-hovered after 3 iterations of move to element, from the search of which this element will be excluded")},
				{value: "-1", type: "int", description: tr("The element can be re-hovered only after it goes out of visibility")}
			],
			value_number: "",
			min_number: -1,
			max_number: 999999,
			help: {
				description: tr("The number of iterations of move to element after which the element can be hovered again. Also, the element can be hovered again if it goes out of visibility while scrolling."),
				examples: [
					{code: "0", description: tr("The element can be re-hovered immediately")},
					{code: "1", description: tr("The element can be re-hovered after one iteration of move to element, from the search of which this element will be excluded")},
					{code: "3", description: tr("The element can be re-hovered after 3 iterations of move to element, from the search of which this element will be excluded")},
					{code: "-1", description: tr("The element can be re-hovered only after it goes out of visibility")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "overlapByPoints",
			description: tr("Overlap by points"),
			default_selector: "int",
			disable_string: true,
			variants: [
				{value: "1", type: "int", description: tr("An element will be considered accessible if at least one of the points on it is not overlapped")},
				{value: "2", type: "int", description: tr("An element will be considered accessible if at least 2 points on it are not overlapped")},
				{value: "3", type: "int", description: tr("An element will be considered accessible if at least 3 points on it are not overlapped")},
				{value: "4", type: "int", description: tr("An element will be considered accessible if at least 4 points on it are not overlapped")},
				{value: "5", type: "int", description: tr("The element will be considered accessible only if all 5 points are not overlapped")}
			],
			value_number: "",
			min_number: 1,
			max_number: 5,
			help: {
				description: tr("The number of points on the element by which it will be determined whether the found element is overlapped, a maximum of 5 points: top right, top left, center, bottom right, bottom left."),
				examples: [
					{code: "1", description: tr("An element will be considered accessible if at least one of the points on it is not overlapped")},
					{code: "2", description: tr("An element will be considered accessible if at least 2 points on it are not overlapped")},
					{code: "3", description: tr("An element will be considered accessible if at least 3 points on it are not overlapped")},
					{code: "4", description: tr("An element will be considered accessible if at least 4 points on it are not overlapped")},
					{code: "5", description: tr("The element will be considered accessible only if all 5 points are not overlapped")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "reverseScroll",
			description: tr("Reverse scroll chance"),
			default_selector: "string",
			variants: [
				{value: "disable", description: tr("Disable reverse scrolling")},
				{value: "low", description: tr("The chance of reverse scrolling is less")},
				{value: "medium", description: tr("The chance of reverse scrolling have average values")},
				{value: "high", description: tr("The chance of reverse scrolling is greater")},
				{value: "5", type: "int", description: tr("The chance of reverse scrolling 5 percent")}
			],
			value_string: "",
			min_number: 0,
			max_number: 100,
			help: {
				description: tr("Chance of a reverse scroll drop. As a value can be specified as one of the four presets \"disable\", \"low\", \"medium\" or \"high\", or an exact number from 0 to 100."),
				examples: [
					{code: "low", description: tr("The chance of reverse scrolling is less")},
					{code: "medium", description: tr("The chance of reverse scrolling have average values")},
					{code: "high", description: tr("The chance of reverse scrolling is greater")},
					{code: "disable", description: tr("Disable reverse scrolling")},
					{code: "5", description: tr("The chance of reverse scrolling 5 percent")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Emulate browsing of the current web page.</div>
	<div class="tr tooltip-paragraph-fold">This action is a more plausible replacement for the "<a href="#!/sleep">Sleep</a>" action. It emulates viewing the current page as if the user is exploring it or searching for something on it.</div>
	<div class="tr tooltip-paragraph-fold">During emulation, page scrolling, mouse cursor movement, and sleep may occur, but not clicks.</div>
	<div class="tr tooltip-paragraph-fold">This action will instantly execute idle emulation, but there is also a possibility to perform emulation before each action. Emulation before each action will be started before every browser action which has a target, such as "<b>Click On Element</b>", "<b>Type Text</b>" and others. It is disabled by default. You can enable and configure it directly in the actions themselves or globally for all actions using the "<a href="#!/IdleEmulationSetGeneralSettings">Enable automatic idle emulation</a>" action.</div>
	<div class="tr tooltip-paragraph-fold">Whole emulation is splitted into intervals. Intervals are different actions or a combination of several actions. Here is a list of all actions:</div>
	<div class="tooltip-paragraph-fold"><code><span class="tr">Sleep</span></code> - <span class="tr">Sleep random time.</span></div>
	<div class="tooltip-paragraph-fold"><code><span class="tr">Long move to element</span></code> - <span class="tr">Movement to a random element, with a large search radius for elements.</span></div>
	<div class="tooltip-paragraph-fold"><code><span class="tr">Short move to element</span></code> - <span class="tr">Movement to a random element, with a small search radius for elements.</span></div>
	<div class="tooltip-paragraph-fold"><code><span class="tr">Scroll</span></code> - <span class="tr">Scroll at random distance.</span></div>
	<div class="tooltip-paragraph-fold"><code><span class="tr">Random movement</span></code> - <span class="tr">Cursor movement to random coordinates.</span></div>
	<div class="tooltip-paragraph-fold"><code><span class="tr">Micro movement</span></code> - <span class="tr">Small movements of the cursor, simulating raising the mouse.</span></div>
	<div class="tooltip-paragraph-fold"><code><span class="tr">Going beyond</span></code> - <span class="tr">Going beyond the screen and returning back.</span></div>
	<div class="tooltip-paragraph-fold"><code><span class="tr">Movement along text</span></code> - <span class="tr">Slowly moving the cursor over an element with text from left to right to emulate reading.</span></div>
	<div class="tr tooltip-paragraph-fold">Using the parameters from the "<b>Actions performed</b>" block, you can disable some of the actions at your discretion or leave all of them enabled.</div>
	<div class="tr tooltip-paragraph-fold">The action performed in one or another interval is chosen randomly each time. This means that you will get different results each time you run this action.</div>
	<div class="tr tooltip-paragraph-fold">The chance of certain actions occurring and their settings depend on the accuracy and intensity you specify.</div>
	<div class="tr tooltip-paragraph-last-fold">Using the parameters from the "<b>Manual parameter setting</b>" block, you can manually configure some emulation parameters.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="IdleEmulationSetGeneralSettings"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "time",
		description: tr("Maximum emulation time"),
		default_selector: "string",
		variants: [
			{value: "disable", description: tr("Disable emulation")},
			{value: "short", type: "string", description: tr("Short emulation time")},
			{value: "medium", type: "string", description: tr("Average emulation time")},
			{value: "long", type: "string", description: tr("Long emulation time")},
			{value: "30", type: "int", description: tr("30 sec")},
			{value: "{min: 15, max: 30}", type: "expression", description: tr("From 15 to 30 sec")}
		],
		value_string: "short",
		min_number: 1,
		max_number: 999999,
		help: {
			description: tr("Maximum execution time of emulation before action.") + " " + tr("As a value can be specified as one of the three presets \"short\", \"medium\" or \"long\", or the exact value in seconds.") + " " + tr("And also you can disable emulation by specifying \"disable\".") + " " + tr("The exact emulation time will be determined immediately before the action depending on the emulation state."),
			examples: [
				{code: "short", description: tr("Short emulation time")},
				{code: "medium", description: tr("Average emulation time")},
				{code: "long", description: tr("Long emulation time")},
				{code: "disable", description: tr("Disable emulation")},
				{code: "30", description: tr("30 sec")},
				{code: "{min: 15, max: 30}", description: tr("From 15 to 30 sec")},
				{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
				{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "accuracy",
		description: tr("Actions accuracy"),
		default_selector: "string",
		variants: [
			"low",
			"medium",
			"high"
		],
		disable_int: true,
		value_string: "medium",
		help: {
			description: tr("Accuracy of actions is a parameter that determines the degree of detail of the algorithm's actions on the page. With high accuracy, the algorithm works with fewer elements by pointing the cursor precisely from one element to another. At low accuracy, the algorithm works with more elements performing many aimless movements."),
			examples: [
				{code: "low", description: tr("The probability of misses, delays and pointing to random coordinates is increased")},
				{code: "medium", description: tr("The parameters responsible for the accuracy of actions have average values")},
				{code: "high", description: tr("The probability of misses, delays and pointing to random coordinates is reduced")},
				{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
				{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "intensity",
		description: tr("Actions intensity"),
		default_selector: "string",
		variants: [
			"low",
			"medium",
			"high"
		],
		disable_int: true,
		value_string: "medium",
		help: {
			description: tr("Intensity of actions is a parameter controls the level of algorithm activity during emulation. If the intensity is high, the algorithm will interact with the page more frequently and dynamically. At low intensity, on the contrary, the algorithm will behave more restrained and patient."),
			examples: [
				{code: "low", description: tr("The probability of sleeping and the probability of short cursor movements is increased, the cursor speed is reduced")},
				{code: "medium", description: tr("The parameters responsible for the intensity of actions have average values")},
				{code: "high", description: tr("The probability of long cursor movements and page scrolling is increased, while the probability of sleeping is reduced")},
				{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
				{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Actions performed"), description: tr("Using the parameters from this block, you can select what actions will be performed during emulation.")}) %>
		<%= _.template($('#input_constructor').html())({
			id: "sleep",
			description: tr("Sleep"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Sleep random time."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "longElementMove",
			description: tr("Long move to element"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Movement to a random element, with a large search radius for elements."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "shortElementMove",
			description: tr("Short move to element"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Movement to a random element, with a small search radius for elements."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "scroll",
			description: tr("Scroll"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Scroll at random distance."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "randomMove",
			description: tr("Random movement"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Cursor movement to random coordinates."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "microMove",
			description: tr("Micro movement"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Small movements of the cursor, simulating raising the mouse."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "goingBeyond",
			description: tr("Going beyond"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Going beyond the screen and returning back."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "moveAlongText",
			description: tr("Movement along text"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Slowly moving the cursor over an element with text from left to right to emulate reading."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#block_start').html())({id:"manualSetting", name: tr("Manual parameter setting"), description: tr("Manual parameter setting"), description: tr("Using the parameters from this block, you can manually configure some emulation parameters. Specified parameters will be taken into account and default settings will be used for unspecified ones.")}) %>
		<%= _.template($('#input_constructor').html())({
			id: "longMax",
			description: tr("Long movements"),
			default_selector: "string",
			variants: [
				"35%",
				"50%",
				"80%"
			],
			value_string: "",
			min_number: 1,
			max_number: 100,
			help: {
				description: tr("The radius of searching for elements during a long movement, measured as a percentage of the screen diagonal."),
				examples: [
					{code: "35%"},
					{code: "50%"},
					{code: "80%"},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "shortMax",
			description: tr("Short movements"),
			default_selector: "string",
			value_string: "",
			variants: [
				"15%",
				"25%",
				"30%"
			],
			min_number: 1,
			max_number: 100,
			help: {
				description: tr("The radius of searching for elements during a short movement, measured as a percentage of the screen diagonal."),
				examples: [
					{code: "15%"},
					{code: "25%"},
					{code: "30%"},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "miss",
			description: tr("Misses on an element"),
			default_selector: "string",
			variants: [
				{value: "disable", description: tr("Disable misses")},
				{value: "low", description: tr("The chance of a miss and its distance is less")},
				{value: "medium", description: tr("The chance of a miss and its distance have average values")},
				{value: "high", description: tr("The chance of a miss and its distance is greater")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("The mode of performing a miss on an element. The chance of a miss and its distance depend on it."),
				examples: [
					{code: "low", description: tr("The chance of a miss and its distance is less")},
					{code: "medium", description: tr("The chance of a miss and its distance have average values")},
					{code: "high", description: tr("The chance of a miss and its distance is greater")},
					{code: "disable", description: tr("Disable misses")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "delay",
			description: tr("Delay before hover"),
			default_selector: "string",
			variants: [
				{value: "disable", description: tr("Disable delay")},
				{value: "low", description: tr("The chance of delay and its duration is less")},
				{value: "medium", description: tr("The chance of delay and its duration have average values")},
				{value: "high", description: tr("The chance of delay and its duration is greater")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("The mode of performing a delay before hover. The chance of a delay and its duration depends on it."),
				examples: [
					{code: "low", description: tr("The chance of delay and its duration is less")},
					{code: "medium", description: tr("The chance of delay and its duration have average values")},
					{code: "high", description: tr("The chance of delay and its duration is greater")},
					{code: "disable", description: tr("Disable delay")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "targetScroll",
			description: tr("Scroll to target"),
			default_selector: "string",
			variants: [
				{value: "disable", description: tr("Disable scrolling to target")},
				{value: "low", description: tr("Scrolling is slower, the pauses between several spins of the wheel is longer")},
				{value: "medium", description: tr("The scrolling speed and the duration of pauses between several spins of the wheel have average values")},
				{value: "high", description: tr("Scrolling is faster, the pauses between several spins of the wheel is shorter")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("The mode of performing a scroll to target. The scrolling settings and whether it will be executed depend on it."),
				examples: [
					{code: "low", description: tr("Scrolling is slower, the pauses between several spins of the wheel is longer")},
					{code: "medium", description: tr("The scrolling speed and the duration of pauses between several spins of the wheel have average values")},
					{code: "high", description: tr("Scrolling is faster, the pauses between several spins of the wheel is shorter")},
					{code: "disable", description: tr("Disable scrolling to target")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		})%>
		<%= _.template($('#input_constructor').html())({
			id: "targetDelay",
			description: tr("Delay before click"),
			default_selector: "string",
			variants: [
				{value: "disable", description: tr("Disable delay")},
				{value: "low", description: tr("The chance of delay and its duration is less")},
				{value: "medium", description: tr("The chance of delay and its duration have average values")},
				{value: "high", description: tr("The chance of delay and its duration is greater")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("The mode of performing a delay before click. The chance of a delay and its duration depends on it."),
				examples: [
					{code: "low", description: tr("The chance of delay and its duration is less")},
					{code: "medium", description: tr("The chance of delay and its duration have average values")},
					{code: "high", description: tr("The chance of delay and its duration is greater")},
					{code: "disable", description: tr("Disable delay")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		})%>
		<%= _.template($('#input_constructor').html())({
			id: "filters",
			description: tr("Selecting an element to hover"),
			default_selector: "string",
			variants: [
				{value: "all", description: tr("Don't filter elements")},
				{value: "link", description: tr("Links")},
				{value: "input", description: tr("Input fields")},
				{value: "clickable", description: tr("Clickable elements")},
				{value: "header", description: tr("Headings")},
				{value: "text", description: tr("Texts")},
				{value: "image", description: tr("Images")},
				{value: "icon", description: tr("Icons")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("The mode for selecting elements for hovering, by which elements will be filtered for long and short movements."),
				examples: [
					{code: "link", description: tr("Links")},
					{code: "input", description: tr("Input fields")},
					{code: "clickable", description: tr("Clickable elements")},
					{code: "header", description: tr("Headings")},
					{code: "text", description: tr("Texts")},
					{code: "image", description: tr("Images")},
					{code: "icon", description: tr("Icons")},
					{code: "all", description: tr("Don't filter elements")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "hoverMode",
			description: tr("Hover position"),
			default_selector: "string",
			variants: [
				{value: "random", description: tr("Random position")},
				{value: "tocenter", description: tr("Position close to the center")},
				{value: "randomorcenter", description: tr("Random position or close to the center")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("The position on the element to which hovering will be performed."),
				examples: [
					{code: "random", description: tr("Random position")},
					{code: "tocenter", description: tr("Position close to the center")},
					{code: "randomorcenter", description: tr("Random position or close to the center")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "maxRepeatSkip",
			description: tr("Re-hovering over an element"),
			default_selector: "int",
			disable_string: true,
			variants: [
				{value: "0", type: "int", description: tr("The element can be re-hovered immediately")},
				{value: "1", type: "int", description: tr("The element can be re-hovered after one iteration of move to element, from the search of which this element will be excluded")},
				{value: "3", type: "int", description: tr("The element can be re-hovered after 3 iterations of move to element, from the search of which this element will be excluded")},
				{value: "-1", type: "int", description: tr("The element can be re-hovered only after it goes out of visibility")}
			],
			value_number: "",
			min_number: -1,
			max_number: 999999,
			help: {
				description: tr("The number of iterations of move to element after which the element can be hovered again. Also, the element can be hovered again if it goes out of visibility while scrolling."),
				examples: [
					{code: "0", description: tr("The element can be re-hovered immediately")},
					{code: "1", description: tr("The element can be re-hovered after one iteration of move to element, from the search of which this element will be excluded")},
					{code: "3", description: tr("The element can be re-hovered after 3 iterations of move to element, from the search of which this element will be excluded")},
					{code: "-1", description: tr("The element can be re-hovered only after it goes out of visibility")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "overlapByPoints",
			description: tr("Overlap by points"),
			default_selector: "int",
			disable_string: true,
			variants: [
				{value: "1", type: "int", description: tr("An element will be considered accessible if at least one of the points on it is not overlapped")},
				{value: "2", type: "int", description: tr("An element will be considered accessible if at least 2 points on it are not overlapped")},
				{value: "3", type: "int", description: tr("An element will be considered accessible if at least 3 points on it are not overlapped")},
				{value: "4", type: "int", description: tr("An element will be considered accessible if at least 4 points on it are not overlapped")},
				{value: "5", type: "int", description: tr("The element will be considered accessible only if all 5 points are not overlapped")}
			],
			value_number: "",
			min_number: 1,
			max_number: 5,
			help: {
				description: tr("The number of points on the element by which it will be determined whether the found element is overlapped, a maximum of 5 points: top right, top left, center, bottom right, bottom left."),
				examples: [
					{code: "1", description: tr("An element will be considered accessible if at least one of the points on it is not overlapped")},
					{code: "2", description: tr("An element will be considered accessible if at least 2 points on it are not overlapped")},
					{code: "3", description: tr("An element will be considered accessible if at least 3 points on it are not overlapped")},
					{code: "4", description: tr("An element will be considered accessible if at least 4 points on it are not overlapped")},
					{code: "5", description: tr("The element will be considered accessible only if all 5 points are not overlapped")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "reverseScroll",
			description: tr("Reverse scroll chance"),
			default_selector: "string",
			variants: [
				{value: "disable", description: tr("Disable reverse scrolling")},
				{value: "low", description: tr("The chance of reverse scrolling is less")},
				{value: "medium", description: tr("The chance of reverse scrolling have average values")},
				{value: "high", description: tr("The chance of reverse scrolling is greater")},
				{value: "5", type: "int", description: tr("The chance of reverse scrolling 5 percent")}
			],
			value_string: "",
			min_number: 0,
			max_number: 100,
			help: {
				description: tr("Chance of a reverse scroll drop. As a value can be specified as one of the four presets \"disable\", \"low\", \"medium\" or \"high\", or an exact number from 0 to 100."),
				examples: [
					{code: "low", description: tr("The chance of reverse scrolling is less")},
					{code: "medium", description: tr("The chance of reverse scrolling have average values")},
					{code: "high", description: tr("The chance of reverse scrolling is greater")},
					{code: "disable", description: tr("Disable reverse scrolling")},
					{code: "5", description: tr("The chance of reverse scrolling 5 percent")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "additionalEmulation",
			description: tr("Additional emulation"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			variants: [
				{value: "enable", description: tr("Perform")},
				{value: "disable", description: tr("Don't perform")}
			],
			help: {
				description: tr("Perform additional emulation during certain actions, such as \"<b>Type Text</b>\", \"<b>Move And Click On Element</b>\" and others.") + " " + tr("Additional emulation is small actions such as sleep, mouse movement, and in rare cases scrolling performed before, during, and/or after the target action. This emulation may also include improvements to emulate the target action, such as text type stuttering, typing speed changes, and improved hover position selection."),
				examples: [
					{code: "enable", description: tr("Perform")},
					{code: "disable", description: tr("Don't perform")},
					{code: tr("Empty string"), description: tr("Use the previously set value(If it exists) or the default value.")},
					{code: tr("*"), description: tr("Reset the previously set value and use the default value.")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Enable idle emulation before actions which works with browser elements like clicking or typing text.</div>
	<div class="tr tooltip-paragraph-fold">Idle emulation is a more plausible replacement for the "<a href="#!/sleep">Sleep</a>" action. It emulates viewing the current page as if the user is exploring it or searching for something on it.</div>
	<div class="tr tooltip-paragraph-fold">During emulation, page scrolling, mouse cursor movement, and sleep may occur, but not clicks.</div>
	<div class="tr tooltip-paragraph-fold">This action will not execute idle emulation instantly, instead it will enable emulation before each browser action which has a target, such as "<b>Click On Element</b>", "<b>Type Text</b>" and others. By default it is disabled.</div>
	<div class="tr tooltip-paragraph-fold">A good place to use this action is the script start. Placing this action at the start of the script will enable automatic idle emulation for the whole script.</div>
	<div class="tr tooltip-paragraph-fold">This action will set general settings for emulation, which will be used in all subsequent actions. The only exception is if specific action has its own emulation settings set.</div>
	<div class="tr tooltip-paragraph-fold">If you want to set emulation before specific action, you can edit emulation settings inside the action itself.</div>
	<div class="tr tooltip-paragraph-fold">If you want to start emulation instantly, use <a href="#!/IdleEmulationNew">idle emulation</a> action.</div>
	<div class="tr tooltip-paragraph-fold">Only the specified parameters will be saved to the general settings, and the previously set values or default values will be used for unspecified parameters.</div>
	<div class="tr tooltip-paragraph-fold">This makes it possible to combine settings from several actions. General settings take precedence over default settings, and settings in the action itself take precedence over both general and default settings.</div>
	<div class="tr tooltip-paragraph-fold">You can reset previously set values for individual parameters by specifying asterisk <code>*</code> as their value.</div>
	<div class="tr tooltip-paragraph-last-fold">You can reset all general settings using the "<a href="#!/IdleEmulationResetGeneralSettings">Disable automatic idle emulation</a>" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="IdleEmulationResetGeneralSettings"><div class="container-fluid"></div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Disable idle emulation previously enabled by "Enable automatic idle emulation" action.</div>
	<div class="tr tooltip-paragraph-fold">All actions which will be executed after this one won't use idle emulation. The only exception is if idle emulation is set inside specific action settings or if "Enable automatic idle emulation" will be called again.</div>
	<div class="tr tooltip-paragraph-last-fold">This action will also reset all other emulation settings previously set using the "<a href="#!/IdleEmulationSetGeneralSettings">Enable automatic idle emulation</a>" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="IdleEmulation"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"IddleTime", description:tr("Time spent on page in seconds"), default_selector: "int", disable_string:true, value_number: 10, help: 
{
	description: tr("This parameter sets idle time duration in seconds. Time setting is not precise, actual action duration can be a little longer than specified."), examples:
	[
		{
			code:"60",description:tr("Idle for one minute")
		},
		{
			code:"300",description:tr("Idle for 5 minutes")
		}
	]
}}) %>
  <%= _.template($('#input_constructor').html())({id:"Distribution", description:tr("Idle type and filling"), default_selector: "expression", disable_string:true,disable_int:true, value_string: "[1,1,2,3,3,3,4,4]"
		, help: 
		{
			description: tr("Whole idle duration is splitted into intervals. Every interval has a type. Here are list of intervals: 1 - scroll page with mouse wheel, 2 - random mouse movements for a long distance, 3 - random mouse movements for a short distance, 4 - sleep. Besides that, frequency of occurrence of interval with some types, may be bigger then others. This parameter must contain list of types, the more often different types will appear in the list, the more often they will meet during idle."), examples:
			[
				{
					code:"[1]",description:tr("Execute only page scrolling.")
				},
				{
					code:"[1,4]",description:tr("Execute page scrolling mixed with sleep. Sleep and page scroll types will appear with same frequency")
				},
				{
					code:"[1,4,4]",description:tr("Execute page scrolling mixed with sleep. Sleep will be executed 2 times more often then scroll.")
				}
				,
				{
					code:"[1,3,4,4]",description:tr("Execute page scrolling mixed with sleep and short mouse moves. Sleep will be executed 2 times more often then scroll. Scroll and short mouse moves has same frequencies.")
				}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Imitate user behavior on webpage.</div>
      <div class="tr tooltip-paragraph-fold">This action is deprecated. It is recommended to use the new <a href="#!/IdleEmulationNew">Start idle emulation</a> action.</div>
      <div class="tr tooltip-paragraph-fold">This is more convenient sleep action replacement.</div>
      <div class="tr tooltip-paragraph-fold">During idle user can scroll and move mouse, but no clicks are performed.</div>
      <div class="tr tooltip-paragraph-fold">Whole idle duration is splitted into intervals. Every interval has a type. Here are list of intervals:</div>
      <div class="tr tooltip-paragraph-fold">1 - scroll page with mouse wheel.</div>
      <div class="tr tooltip-paragraph-fold">2 - random mouse movements for a long distance.</div>
      <div class="tr tooltip-paragraph-fold">3 - random mouse movements for a short distance.</div>
      <div class="tr tooltip-paragraph-fold">4 - sleep.</div>
      <div class="tr tooltip-paragraph-fold">Each interval appearance is randomized. So you'll get completely different behavior each time the action is called.</div>
      <div class="tr tooltip-paragraph-fold">Besides that, frequency of occurrence of interval with some types, may be bigger then others.</div>
      <div class="tr tooltip-paragraph-last-fold">'Idle type and filling' parameter must contain list of types, the more often different types will appear in the list, the more often they will meet during idle. Check help for 'Idle type and filling' parameter for examples.</div>
      
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="IdleEmulationSetDebug"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "enable",
		description: tr("Enable debug"),
		default_selector: "string",
		disable_int: true,
		value_string: "true",
		variants: [
			{value: "true", description: tr("Enable debug")},
			{value: "false", description: tr("Disable debug")}
		],
		help: {
			description: tr("Enable idle emulation module debug."),
			examples: [
				{code: "true", description: tr("Enable debug")},
				{code: "false", description: tr("Disable debug")}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Enable or disable idle emulation debugging.</div>
	<div class="tr tooltip-paragraph-fold">If debug is enabled, then during idle emulation, detailed information about the status of its execution will be displayed in the log.</div>
	<div class="tr tooltip-paragraph-last-fold">Also, if debug is enabled, then in BAS recording mode, during idle emulation, in the browser will be displayed the found elements and the search radius.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="imageprocessingload"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Data", description:tr("Image data in base64 format"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save image id"), default_variable: "LOADED_IMAGE_ID"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Load image from binary data (base64 format). Obtain image id, which will help to manipulate image.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="imageprocessingdelete"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Id", description:tr("Image id"), default_selector: "string", disable_int:true}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Close image with specified id and release used memory.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="imageprocessingcreate"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Width", description:tr("Width"), default_selector: "int", disable_string:true, value_number:800, min_number:0}) %>
    <%= _.template($('#input_constructor').html())({id:"Height", description:tr("Height"), default_selector: "int", disable_string:true, value_number:800, min_number:0}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorR", description:tr("Color Red"), default_selector: "int", disable_string:true, value_number:255, min_number:0, max_number:255}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorG", description:tr("Color Green"), default_selector: "int", disable_string:true, value_number:255, min_number:0, max_number:255}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorB", description:tr("Color Blue"), default_selector: "int", disable_string:true, value_number:255, min_number:0, max_number:255}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorA", description:tr("Color Transparency"), default_selector: "int", disable_string:true, value_number:255, min_number:0, max_number:255}) %>
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save image id"), default_variable: "CREATED_IMAGE_ID"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Create an empty image using the specified options.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="imageprocessingconvert"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Id", description:tr("Image id"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"Format", description:tr("Image format"), default_selector: "string", disable_int:true, variants: ["png","jpeg"]}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Change image format: png, jpeg.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="imageprocessinggetdata"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Id", description:tr("Image id"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save image data"), default_variable: "IMAGE_DATA"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get image data with specific id in base64 format. Can be used to save to file.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="imageprocessinggetpixel"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Id", description:tr("Image id"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"X", description:tr("X"), default_selector: "int", disable_string:true, value_number:0, min_number:0}) %>
    <%= _.template($('#input_constructor').html())({id:"Y", description:tr("Y"), default_selector: "int", disable_string:true, value_number:0, min_number:0}) %>
    <%= _.template($('#variable_constructor').html())({id:"R", description:tr("Color Red"), default_variable: "PIXEL_R"}) %>
    <%= _.template($('#variable_constructor').html())({id:"G", description:tr("Color Green"), default_variable: "PIXEL_G"}) %>
    <%= _.template($('#variable_constructor').html())({id:"B", description:tr("Color Blue"), default_variable: "PIXEL_B"}) %>
    <%= _.template($('#variable_constructor').html())({id:"A", description:tr("Color Transparency"), default_variable: "PIXEL_A"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the color of a pixel by its coordinates in the image.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="imageprocessingsetpixel"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Id", description:tr("Image id"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"X", description:tr("X"), default_selector: "int", disable_string:true, value_number:0, min_number:0}) %>
    <%= _.template($('#input_constructor').html())({id:"Y", description:tr("Y"), default_selector: "int", disable_string:true, value_number:0, min_number:0}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorR", description:tr("Color Red"), default_selector: "int", disable_string:true, value_number:255, min_number:0, max_number:255}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorG", description:tr("Color Green"), default_selector: "int", disable_string:true, value_number:255, min_number:0, max_number:255}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorB", description:tr("Color Blue"), default_selector: "int", disable_string:true, value_number:255, min_number:0, max_number:255}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorA", description:tr("Color Transparency"), default_selector: "int", disable_string:true, value_number:255, min_number:0, max_number:255}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Set the color of a pixel by its coordinates in the image.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="imageprocessinggetsize"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Id", description:tr("Image id"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#variable_constructor').html())({id:"Width", description:tr("Variable to save width"), default_variable: "IMAGE_WIDTH"}) %>
    <%= _.template($('#variable_constructor').html())({id:"Height", description:tr("Variable to save height"), default_variable: "IMAGE_HEIGHT"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get image width and height.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="imageprocessingresize"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Id", description:tr("Image id"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"Width", description:tr("Width"), default_selector: "int", disable_string:true, value_number:100, min_number:1}) %>
    <%= _.template($('#input_constructor').html())({id:"Height", description:tr("Height"), default_selector: "int", disable_string:true, value_number:100, min_number:1}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Change image width and height.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="imageprocessinginsert"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Id1", description:tr("Image target id"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"Id2", description:tr("Image source id"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"X", description:tr("X"), default_selector: "int", disable_string:true, value_number:100, min_number:0}) %>
    <%= _.template($('#input_constructor').html())({id:"Y", description:tr("Y"), default_selector: "int", disable_string:true, value_number:100, min_number:0}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Insert one image into another using specific coordinates.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="imageprocessingfind"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Id1", description:tr("Image target id"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"Id2", description:tr("Image source id"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#variable_constructor').html())({id:"X", description:tr("Found x coordinate in target image"), default_variable: "FOUND_SUBIMAGE_X"}) %>
    <%= _.template($('#variable_constructor').html())({id:"Y", description:tr("Found y coordinate in target image"), default_variable: "FOUND_SUBIMAGE_Y"}) %>
    <%= _.template($('#variable_constructor').html())({id:"Threshold", description:tr("How well the image fits. 100 - exactly fits, 0 - does not fit at all."), default_variable: "FOUND_THRESHOLD"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Find one image in another and get the coordinates of the found location.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="imageprocessingfill"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Id", description:tr("Image id"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"X", description:tr("X"), default_selector: "int", disable_string:true, value_number:0, min_number:0}) %>
    <%= _.template($('#input_constructor').html())({id:"Y", description:tr("Y"), default_selector: "int", disable_string:true, value_number:0, min_number:0}) %>
    <%= _.template($('#input_constructor').html())({id:"Width", description:tr("Width"), default_selector: "int", disable_string:true, value_number:100, min_number:1}) %>
    <%= _.template($('#input_constructor').html())({id:"Height", description:tr("Height"), default_selector: "int", disable_string:true, value_number:100, min_number:1}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorR", description:tr("Color Red"), default_selector: "int", disable_string:true, value_number:255, min_number:0, max_number:255}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorG", description:tr("Color Green"), default_selector: "int", disable_string:true, value_number:255, min_number:0, max_number:255}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorB", description:tr("Color Blue"), default_selector: "int", disable_string:true, value_number:255, min_number:0, max_number:255}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorA", description:tr("Color Transparency"), default_selector: "int", disable_string:true, value_number:255, min_number:0, max_number:255}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Fill the rectangle in the image with a specific color.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="imageprocessingsub"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Id", description:tr("Image id"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"X", description:tr("X"), default_selector: "int", disable_string:true, value_number:0, min_number:0}) %>
    <%= _.template($('#input_constructor').html())({id:"Y", description:tr("Y"), default_selector: "int", disable_string:true, value_number:0, min_number:0}) %>
    <%= _.template($('#input_constructor').html())({id:"Width", description:tr("Width"), default_selector: "int", disable_string:true, value_number:800, min_number:0}) %>
    <%= _.template($('#input_constructor').html())({id:"Height", description:tr("Height"), default_selector: "int", disable_string:true, value_number:800, min_number:0}) %>
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save image id"), default_variable: "CROPPED_IMAGE_ID"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Crop the image using specific coordinates and size.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="imageprocessingtext"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Id", description:tr("Image id"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"Text", description:tr("Text"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"X", description:tr("X"), default_selector: "int", disable_string:true, value_number:0, min_number:0}) %>
    <%= _.template($('#input_constructor').html())({id:"Y", description:tr("Y"), default_selector: "int", disable_string:true, value_number:0, min_number:0}) %>
    <%= _.template($('#input_constructor').html())({id:"Width", description:tr("Width"), default_selector: "int", disable_string:true, value_number:800, min_number:0}) %>
    <%= _.template($('#input_constructor').html())({id:"Height", description:tr("Height"), default_selector: "int", disable_string:true, value_number:800, min_number:0}) %>
    <%= _.template($('#input_constructor').html())({id:"FontFamily", description:tr("Font Family"), default_selector: "string", disable_int:true, value_string:"Arial"}) %>
    <%= _.template($('#input_constructor').html())({id:"FontSize", description:tr("Font Size"), default_selector: "int", disable_string:true, value_number:15, min_number:1}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorR", description:tr("Font Color Red"), default_selector: "int", disable_string:true, value_number:0, min_number:0, max_number:255}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorG", description:tr("Font Color Green"), default_selector: "int", disable_string:true, value_number:0, min_number:0, max_number:255}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorB", description:tr("Font Color Blue"), default_selector: "int", disable_string:true, value_number:0, min_number:0, max_number:255}) %>
    <%= _.template($('#input_constructor').html())({id:"ColorA", description:tr("Font Color Transparency"), default_selector: "int", disable_string:true, value_number:255, min_number:0, max_number:255}) %>
    <%= _.template($('#input_constructor').html())({id:"VerticalAlign", description:tr("Vertical align"), default_selector: "string", disable_int:true, value_string: "top", variants: ["top","bottom","center"]}) %>
    <%= _.template($('#input_constructor').html())({id:"HorizontalAlign", description:tr("Horizontal align"), default_selector: "string", disable_int:true, value_string: "center", variants: ["left","right","center"]}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Add text to the image using specified parameters.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="InMail_Configure"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "protocol",
		description: tr("Protocol"),
		default_selector: "string",
		variants: [
			{value: "imap", description: "Internet Message Access Protocol"},
			{value: "pop3", description: "Post Office Protocol Version 3"}
			
		],
		disable_int: true,
		value_string: "imap",
		help: {
			description: tr("The protocol by which the connection to the mail server will be made."),
			examples: [
				{code: "imap", description: "Internet Message Access Protocol"},
				{code: "pop3", description: "Post Office Protocol Version 3"}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "autoConfig",
		description: tr("Auto configuration"),
		default_selector: "string",
		variants: [
			{value: "true", description: tr("Automatically configure connection")},
			{value: "false", description: tr("Specify connection settings manually")}
		],
		disable_int: true,
		value_string: "false",
		help: {
			description: tr("If the value is <code>true</code> and the username is an email address along with a domain, then the action will try to automatically determine the server address, port and encryption type.") + " " + tr("To automatically determine the settings, a pre-prepared list is used, if the settings cannot be determined, the action will fail."),
			examples: [
				{code: "true", description: tr("Automatically configure connection")},
				{code: "false", description: tr("Specify connection settings manually")}
			]
		}
	}) %>
	<span id="advancedSettings">
		<%= _.template($('#input_constructor').html())({
			id: "host",
			description: tr("Server address"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Address (URL or IP) of the mail server.") + " " + tr("The value of this parameter is ignored if auto configuration is enabled."),
				examples: [
					{code: "imap.site.com"},
					{code: "pop.example.com"},
					{code: "96.256.27.26"}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "port",
			description: tr("Port"),
			variants: [
				{value: "auto", description: tr("Automatically detect port based on protocol and encryption type")},
				{value: "993", description: tr("Default port for imap protocol with SSL encryption")},
				{value: "995", description: tr("Default port for pop3 protocol with SSL encryption")},
				{value: "143", description: tr("Default port for imap protocol without encryption or with STARTTLS encryption")},
				{value: "110", description: tr("Default port for pop3 protocol without encryption or with STARTTLS encryption")}
			],
			default_selector: "string",
			value_string: "auto",
			help: {
				description: tr("Port number of the mail server.") + " " + tr("The value of this parameter is ignored if auto configuration is enabled."),
				examples: [
					{code: "auto", description: tr("Automatically detect port based on protocol and encryption type")},
					{code: "993", description: tr("Default port for imap protocol with SSL encryption")},
					{code: "143", description: tr("Default port for imap protocol without encryption or with STARTTLS encryption")},
					{code: "995", description: tr("Default port for pop3 protocol with SSL encryption")},
					{code: "110", description: tr("Default port for pop3 protocol without encryption or with STARTTLS encryption")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "encrypt",
			description: tr("Encryption"),
			default_selector: "string",
			variants: [
				{value: "none", description: tr("Without using encryption")},
				"SSL",
				"TLS",
				"STARTTLS"
			],
			disable_int: true,
			value_string: "SSL",
			help: {
				description: tr("Encryption type of connection to the mail server.") + " " + tr("The value of this parameter is ignored if auto configuration is enabled."),
				examples: [
					{code: "none", description: tr("Without using encryption")},
					{code: "SSL"},
					{code: "TLS"},
					{code: "STARTTLS"}
				]
			}
		}) %>
	</span>
	<%= _.template($('#input_constructor').html())({
		id: "username",
		description: tr("Username") + ". " + tr("Can be blank"),
		default_selector: "string",
		disable_int: true,
		value_string: "",
		help: {
			description: tr("The username of the mail server, this is almost always the same as the email address, but may not include the mail domain.") + " " + tr("See the settings of the used protocol for your mail.") + " " + tr("With auto configuration enabled, this field should contain an email address along with the domain."),
			examples: [
				{code: "test@gmail.com"},
				{code: "test", description: tr("The username may also not include the mail domain.") + " " + tr("See the settings of the used protocol for your mail.")}
          ]

		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "authMethod",
		description: tr("Authorization method"),
		default_selector: "string",
		variants: [
			{value: "Password", description: tr("A traditional authorization method where a login and password are required to access the mail server")},
			{value: "OAuth2", description: tr("A modern authorization method based on the OAuth 2.0 protocol, allowing the client to securely log in through a third-party provider without the need to enter a password")}
		],
		disable_int: true,
		value_string: "Password",
		help: {
			description: tr("Mail server authorization method. Determines how the client authenticates when connecting to the mail server. Allows for a choice between classic password-based authentication or the more modern and secure OAuth 2.0 method."),
			examples: [
				{code: "Password", description: tr("A traditional authorization method where a login and password are required to access the mail server")},
				{code: "OAuth2", description: tr("A modern authorization method based on the OAuth 2.0 protocol, allowing the client to securely log in through a third-party provider without the need to enter a password")}
			]
		}
	}) %>
	<span id="authPassword">
		<%= _.template($('#input_constructor').html())({
			id: "password",
			description: tr("Password") + ". " + tr("Can be blank"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("The password of the mail server, it is almost always the same as the email password, but the mail service may have a separate password for access via imap and pop3 protocols.") + " " + tr("See the settings of the used protocol for your mail.")
			}
		}) %>
	</span>
	<span id="authOAuth2">
		<%= _.template($('#input_constructor').html())({
			id: "oauth2Token",
			description: tr("OAuth 2.0 token"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("An access token used for OAuth 2.0 authorization. This token is generated after successfully completing OAuth 2.0 authentication through a provider such as Google, Microsoft, etc. The token is used in place of a password to access the mail server, ensuring a secure connection without the need to store or transmit a password directly.")
			}
		}) %>
	</span>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#input_constructor').html())({
			id: "box",
			description: tr("Folder name"),
			default_selector: "string",
			variants: [
				{value: "INBOX", description: tr("Default folder incoming messages")}
			],
			disable_int: true,
			value_string: "INBOX",
			help: {
				description: tr("The name of the folder in which all actions will be performed if no other folder is specified in their additional settings.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
				examples: [
					{code: "INBOX", description: tr("Default folder incoming messages")},
					{code: "Spam", description: tr("Spam folder, on some mails")},
					{code: "Trash", description: tr("Trash folder, on some mails")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "connectTimeout",
			description: tr("Connection timeout (seconds)"),
			default_selector: "int",
			disable_string: true,
			value_number: 300,
			min_number: 0,
			max_number: 999999,
			help: {
				description: tr("The number of seconds after which the connection to the mail server will be considered unsuccessful.")
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "resetTimeout",
			description: tr("Reset timeout (seconds)"),
			default_selector: "int",
			disable_string: true,
			value_number: 300,
			min_number: 0,
			max_number: 999999,
			help: {
				description: tr("This action won't start connection, it only sets configuration. Connection will be established after first attempt to access server. When action, which triggers connection will be finished, connection won't be closed immediately.") + " " + tr("It will be preserved for a time specified in this parameter.") + " " + tr("If another action will require access to server, connection will be reused.")
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Configure access to the mail server to read email.</div>
	<div class="tr tooltip-paragraph-fold">This action must be called once before performing other actions that work with the mail server.</div>
	<div class="tr tooltip-paragraph-fold">Specify the protocol, imap or pop3, by which the connection to the mail server will be made in the "Protocol" parameter, please note that when using the pop3, most of the module functions will not be available. If the action is not available on pop3, then it will end with an appropriate error.</div>
	<div class="tr tooltip-paragraph-fold">Depending on the mail service, the connection may be available only via imap or only via pop3, or it may not be available at all via these protocols.</div>
	<div class="tr tooltip-paragraph-fold">You also need to fill server address, port, encryption type, your username and password. These can usually be found by searching for the imap/pop3 settings for your mail service, like this: "gmail imap settings".</div>
	<div class="tr tooltip-paragraph-fold">This action can automatically determine the server address, port and encryption type, for this you need to specify <code>true</code> in the "Auto configuration" parameter, and specify the email address along with the domain as the username.</div>
	<div class="tr tooltip-paragraph-fold">To automatically determine the settings, a pre-prepared list is used, if the settings cannot be determined, the action will fail.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">For most mail services, you also need to allow imap/pop3 access in your account settings. Here are <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://support.google.com/mail/answer/7126229?hl=en');return false">settings</a> for gmail.</span> <span class="tr">Also, the mail service may have a separate password for connecting via imap/pop3.</span></div>
	<div class="tooltip-paragraph-fold"><span class="tr">Gmail also requires to</span> <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://myaccount.google.com/lesssecureapps');return false">allow insecure applications</a> <span class="tr">in order to work with BAS</span>.</div>
	<div class="tr tooltip-paragraph-fold">Mail.ru doesn't allow to make search in mailbox.</div>
	<div class="tr tooltip-paragraph-fold">Mailbox can contain several folders, and you can work with messages from a specific folder by changing "Folder name" parameter located in the additional settings. By default it is set to "INBOX", this folder contains incoming messages. Each mail service provides its own default names for different folders. For example, this is default name of gmail trash folder "[Gmail]/Trash" and spam folder is "[Gmail]/Spam". You can also create your own folders and use them in this action.</div>
	<div class="tr tooltip-paragraph-fold">You can get a list of mailbox folders using the "Get list of folders" action.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">This action won't start connection, it only sets configuration. Connection will be established after first attempt to access server. When action, which triggers connection will be finished, connection won't be closed immediately.</span> <span class="tr">It will be preserved for a time specified in "Reset timeout" parameter located in the additional settings.</span> <span class="tr">If another action will require access to server, connection will be reused.</span></div>
	<div class="tr tooltip-paragraph-fold">You don't need to close connection explicitly, it will be closed automatically after timeout or when the script will stop.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
<script>
		
		$(document).ready(function(){
			setTimeout(function(){
				let setVisibleAdvanced = function(e){
					if($('#autoConfig').val() != "true"){
						$('#advancedSettings').show();
					}else{
						$('#advancedSettings').hide();
					};
				};
				
				let setVisibleAuth = function(e){
					let val = $('#authMethod').val();
					if(["Password","OAuth2"].includes(val)){
						$('#authPassword').toggle(val == "Password");
						$('#authOAuth2').toggle(val == "OAuth2");
					}else{
						$('#authPassword').show();
						$('#authOAuth2').show();
					};
				};
				
				$('#autoConfig').on('blur', setVisibleAdvanced);
				$('#authMethod').on('blur', setVisibleAuth);
				
				setVisibleAdvanced();
				setVisibleAuth();
			}, 0);
		});

</script>
</script><script type="text/template" id="InMail_Proxy"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "proxyString",
		description: tr("Proxy String"),
		default_selector: "string",
		disable_int: true,
		help: {
			description: tr("String with information about proxy. It may contain ip, port, proxy type in different formats. This string may also contain login and password, if it doesn't, auth can be set with \"Proxy Login\" and \"Proxy Password\" parameters."),
			examples: [
				{code: "210.10.10.10:1085"},
				{code: "username:password@210.10.10.10:1085"},
				{code: "socks5://210.10.10.10:1085"},
				{code: "socks:210.10.10.10:1085:username:password"},
				{code: "http:username:password:210.10.10.10:1085"},
				{code: "{{proxy}}", description: tr("Get from resource")},
				{code: tr("Empty string"), description: tr("Without proxy")}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "proxyType",
		description: tr("Proxy Type"),
		default_selector: "string",
		disable_int: true,
		value_string: "http",
		variants: [
			"http",
			"socks5",
			{value: "auto", description: tr("Proxy type will be extracted from proxy line")}
		],
		help: {
			description: tr("socks5 and http proxy types are supported."),
			examples: [
				{code: "socks"},
				{code: "socks5", description: tr("Same as socks")},
				{code: "http"},
				{code: "https", description: tr("Same as http")}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "proxyUsername",
		description: tr("Proxy Login. Can be blank."),
		default_selector: "string",
		disable_int: true,
		help: {
			description: tr("Proxy login, overrides login set in proxy string. Useful if you have many proxy with same login and password.")
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "proxyPassword",
		description: tr("Proxy password. Can be blank."),
		default_selector: "string",
		disable_int: true,
		help: {
			description: tr("Proxy password, overrides password set in proxy string. Useful if you have many proxy with same login and password.")
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">By default mail client works without proxy, this action sets proxy for mail client.</div>
	<div class="tr tooltip-paragraph-fold">Use resources if you want to take them from file, url or database.</div>
	<div class="tr tooltip-paragraph-fold">You can change proxy once and it will be applied to every action which works with email.</div>
	<div class="tr tooltip-paragraph-last-fold">Proxy with empty parameter will reset it to default value(direct connection).</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="InMail_GetLastMessage"><div class="container-fluid">
	<%= _.template($('#block_start').html())({id:"Parsing", name: tr("Parsing"), description: tr("Using the parameters from this block, you can select which parts of the message will be fetched and in which variables will be saved.")}) %>
		
		<%= _.template($('#checkbox').html())({id: "getUid", checked: true, title: tr("Get message id"), help: {title: tr("Get message id"), description: tr("If enabled, then the message id will be stored in the variable below."), examples: [{code: tr("Activated"), description: tr("Save message id")}, {code: tr("Deactivated"), description: tr("Don't save message id")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveUid",
			description: tr("Message id"),
			visible_if_checked: "getUid",
			default_variable: "MAIL_ID",
			help: {
				description: tr("Variable in which, after successful execution of the action, the id of the retrieved message will be written."),
				examples: [
					{code: 134},
					{code: 370},
					{code: 458}
				]
			}
		}) %>
		
		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getFrom", title: tr("Get sender of message"), help: {title: tr("Get sender of message"), description: tr("If enabled, then the sender of the message will be retrieved from the server and stored in the variable below."), examples: [{code: tr("Activated"), description: tr("Get message sender from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message sender from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveFrom",
			visible_if_checked: "getFrom",
			description: tr("Sender of message"),
			default_variable: "MAIL_SENDER",
			help: {
				description: tr("Variable in which, after successful execution of the action, the sender of the retrieved message will be written."),
				examples: [
					{code: "admin@site.com"},
					{code: "no-reply@example.com"},
					{code: "Test &lt;info@test.com&gt;"}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getTo", title: tr("Get recipient of message"), help: {title: tr("Get recipient of message"), description: tr("If enabled, then the recipient of the message will be retrieved from the server and stored in the variable below."), examples: [{code: tr("Activated"), description: tr("Get message recipient from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message recipient from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveTo",
			visible_if_checked: "getTo",
			description: tr("Recipient of message"),
			default_variable: "MAIL_RECIPIENT",
			help: {
				description: tr("Variable in which, after successful execution of the action, the recipient of the retrieved message will be written."),
				examples: [
					{code: "you@site.com"},
					{code: "name@example.com"},
					{code: "User &lt;user@test.com&gt;"}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getSubject", title: tr("Get message subject"), help: {title: tr("Get message subject"), description: tr("If enabled, then the subject of the message will be retrieved from the server and stored in the variable below."), examples: [{code: tr("Activated"), description: tr("Get message subject from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message subject from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveSubject",
			visible_if_checked: "getSubject",
			description: tr("Message subject"),
			default_variable: "MAIL_SUBJECT",
			help: {
				description: tr("Variable in which, after successful execution of the action, the subject of the retrieved message will be written."),
				examples: [
					{code: tr("Marketing")},
					{code: tr("Business proposal")},
					{code: tr("Email confirmation")}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getTextHtml", title: tr("Get body of message") + " (text/html)", checked: true, help: {title: tr("Get body of message") + " (text/html)", description: tr("If enabled, then the body of the message in html format (text/html) will be retrieved from the server and stored in the variable below.") + " " + tr("text/html is the MIME type of data represented in html format, html is the markup language for web pages.") + " " + tr("If the message does not contain a body with this type, then an empty string will be stored."), examples: [{code: tr("Activated"), description: tr("Get message body (text/html) from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message body (text/html) from server")}]}}) %>

		<span data-visible-if-checked="getTextHtml">
			<%= _.template($('#variable_constructor').html())({
				id: "saveTextHtml",
				description: tr("Body of message") + " (text/html)",
				default_variable: "MAIL_TEXT_HTML",
				help: {
					description: tr("Variable in which, after successful execution of the action, the body of the retrieved message in html format (text/html) will be written.") + " " + tr("text/html is the MIME type of data represented in html format, html is the markup language for web pages.") + " " + tr("If the message does not contain a body with this type, then an empty string will be stored."),
					examples: [
						{code: "<p style=\"margin-bottom:6px\">&lt;HTML&gt;&lt;BODY&gt;&lt;div&gt;" + tr("Use code 9779 to confirm") + "&lt;/div&gt;&lt;/BODY&gt;&lt;/HTML&gt;</p>"},
						{code: tr("Empty string"), description: tr("The message does not contain a body in html format")}
					]
				}
			}) %>

			<%= _.template($('#checkbox').html())({id: "getLinksTextHtml", title: tr("Parse links from body of message") + " (text/html)", help: {title: tr("Parse links from body of message") + " (text/html)", description: tr("If enabled, then all links will be extracted from the retrieved message body (text/html) and stored in the variable below.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."), examples: [{code: tr("Activated"), description: tr("Extract links from message body") + " (text/html)"}, {code: tr("Deactivated"), description: tr("Don't extract links from message body") + " (text/html)"}]}}) %>

			<%= _.template($('#variable_constructor').html())({
				id: "saveLinksTextHtml",
				visible_if_checked: "getLinksTextHtml",
				description: tr("Links from body of message") + " (text/html)",
				default_variable: "MAIL_TEXT_HTML_LINKS_LIST",
				help: {
					description: tr("Variable in which, after successful execution of the action, the list of links from the body of the message (text/html) will be written.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."),
					examples: [
						{code: "[\"https://marketplace.biz/section_3/product_213234.php\"]"},
						{code: "[\"http://test.com\", \"example.org\"]"},
						{code: "[\"http://www.ad.by\", \"www.feedback.io\", \"https://support.co/new/ticket.php\"]"}
					]
				}
			}) %>
		</span>


		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getTextPlain", checked:true, title: tr("Get body of message") + " (text/plain)", help: {title: tr("Get body of message") + " (text/plain)", description: tr("If enabled, then the body of the message in text format (text/plain) will be retrieved from the server and stored in the variable below.") + " " + tr("text/plain is a MIME type that is the base type for text files.") + " " + tr("If the message does not contain a body with this type, then an empty string will be stored."), examples: [{code: tr("Activated"), description: tr("Get message body (text/plain) from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message body (text/plain) from server")}]}}) %>

		<span data-visible-if-checked="getTextPlain">
			<%= _.template($('#variable_constructor').html())({
				id: "saveTextPlain",
				description: tr("Body of message") + " (text/plain)",
				default_variable: "MAIL_TEXT_PLAIN",
				help: {
					description: tr("Variable in which, after successful execution of the action, the body of the retrieved message in text format (text/plain) will be written.") + " " + tr("text/plain is a MIME type that is the base type for text files.") + " " + tr("If the message does not contain a body with this type, then an empty string will be stored."),
					examples: [
						{code: "<p style=\"margin-bottom:6px\">" + tr("Use code 9779 to confirm") + "</p>"},
						{code: tr("Empty string"), description: tr("The message does not contain a body in text format")}
					]
				}
			}) %>

			<%= _.template($('#checkbox').html())({id: "getLinksTextPlain", title: tr("Parse links from body of message") + " (text/plain)", help: {title: tr("Parse links from body of message") + " (text/plain)", description: tr("If enabled, then all links will be extracted from the retrieved message body (text/plain) and stored in the variable below.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."), examples: [{code: tr("Activated"), description: tr("Extract links from message body") + " (text/plain)"}, {code: tr("Deactivated"), description: tr("Don't extract links from message body") + " (text/plain)"}]}}) %>

			<%= _.template($('#variable_constructor').html())({
				id: "saveLinksTextPlain",
				visible_if_checked: "getLinksTextPlain",
				description: tr("Links from body of message") + " (text/plain)",
				default_variable: "MAIL_TEXT_PLAIN_LINKS_LIST",
				help: {
					description: tr("Variable in which, after successful execution of the action, the list of links from the body of the message (text/plain) will be written.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."),
					examples: [
						{code: "[\"https://marketplace.biz/section_3/product_213234.php\"]"},
						{code: "[\"http://test.com\", \"example.org\"]"},
						{code: "[\"http://www.ad.by\", \"www.feedback.io\", \"https://support.co/new/ticket.php\"]"}
					]
				}
			}) %>


		</span>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getTextRaw", title: tr("Get body of message") + " (raw)", help: {title: tr("Get body of message") + " (raw)", description: tr("If enabled, then the body of the message in raw form (raw) will be retrieved from the server and stored in the variable below.") + " " + tr("raw - this means that the body of the message will be retrieved in its raw form, without any processing."), examples: [{code: tr("Activated"), description: tr("Get message body (raw) from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message body (raw) from server")}]}}) %>

		<span data-visible-if-checked="getTextRaw">
			<%= _.template($('#variable_constructor').html())({
				id: "saveTextRaw",
				description: tr("Body of message") + " (raw)",
				default_variable: "MAIL_TEXT_RAW",
				help: {
					description: tr("Variable in which, after successful execution of the action, the body of the retrieved message in raw form (raw) will be written.") + " " + tr("raw - this means that the body of the message will be retrieved in its raw form, without any processing."),
					examples: [
						{code: "----ALT--d449E7c1653598173380270778C1f6B21643480035<br/>Content-Type: text/plain; charset=utf-8<br/>Content-Transfer-Encoding: base64<p style=\"margin-top:6px;margin-bottom:6px\">ClVzZSBjb2RlIDk3NzkgdG8gY29uZmlybQrCoArCoA==</p><p style=\"margin-bottom:6px\">----ALT--d449E7c1653598173380270778C1f6B21643480035</p>"},
						{code: tr("Empty string"), description: tr("The message does not contain a body")}
					]
				}
			}) %>
			<%= _.template($('#checkbox').html())({id: "getLinksTextRaw", title: tr("Parse links from body of message") + " (raw)", help: {title: tr("Parse links from body of message") + " (raw)", description: tr("If enabled, then all links will be extracted from the retrieved message body (raw) and stored in the variable below.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."), examples: [{code: tr("Activated"), description: tr("Extract links from message body") + " (raw)"}, {code: tr("Deactivated"), description: tr("Don't extract links from message body") + " (raw)"}]}}) %>

			<%= _.template($('#variable_constructor').html())({
				id: "saveLinksTextRaw",
				visible_if_checked: "getLinksTextRaw",
				description: tr("Links from body of message") + " (raw)",
				default_variable: "MAIL_TEXT_RAW_LINKS_LIST",
				help: {
					description: tr("Variable in which, after successful execution of the action, the list of links from the body of the message (raw) will be written.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."),
					examples: [
						{code: "[\"https://marketplace.biz/section_3/product_213234.php\"]"},
						{code: "[\"http://test.com\", \"example.org\"]"},
						{code: "[\"http://www.ad.by\", \"www.feedback.io\", \"https://support.co/new/ticket.php\"]"}
					]
				}
			}) %>
		</span>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getSize", title: tr("Get message size"), help: {title: tr("Get message size"), description: tr("If enabled, then the size of the message will be retrieved from the server and stored in the variable below.") + " " + tr("The size of the message will be retrieved in octets, one octet is equal to 8 bits."), examples: [{code: tr("Activated"), description: tr("Get message size from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message size from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveSize",
			visible_if_checked: "getSize",
			description: tr("Message size"),
			default_variable: "MAIL_SIZE",
			help: {
				description: tr("Variable in which, after successful execution of the action, the size of the retrieved message will be written.") + " " + tr("The size of the message will be retrieved in octets, one octet is equal to 8 bits."),
				examples: [
					{code: 175},
					{code: 2345},
					{code: 11546}
				]
			}
		}) %>


		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getFlags", title: tr("Get flags of message"), help: {title: tr("Get flags of message"), description: tr("If enabled, then the list of message flags will be retrieved from the server and stored in the variable below.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."), examples: [{code: tr("Activated"), description: tr("Get message flags from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message flags from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveFlags",
			visible_if_checked: "getFlags",
			description: tr("Flags of message"),
			default_variable: "MAIL_FLAGS_LIST",
			help: {
				description: tr("Variable in which, after successful execution of the action, the list of flags of the retrieved message will be written.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."),
				examples: [
					{code: "[\"\\Seen\"]"},
					{code: "[\"\\Seen\", \"\\Flagged\"]"},
					{code: "[\"\\Seen\", \"\\Answered\", \"\\Deleted\"]"}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getDate", title: tr("Get receiving date"), help: {title: tr("Get receiving date"), description: tr("If enabled, then the date of the message will be retrieved from the server and stored in the variable below.") + " " + tr("The resulting date can be processed using actions from the \"Date and time\" module."), examples: [{code: tr("Activated"), description: tr("Get message date from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message date from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveDate",
			visible_if_checked: "getDate",
			description: tr("Receiving date"),
			default_variable: "MAIL_DATE",
			help: {
				description: tr("Variable in which, after successful execution of the action, the date of the retrieved message will be written.") + " " + tr("The resulting date can be processed using actions from the \"Date and time\" module."),
				examples: [
					{code: new Date('May 13 2021')},
					{code: new Date('Jan 20 2022 16:57:26')},
					{code: new Date()}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>
		<%= _.template($('#checkbox').html())({id: "getAttachNames", title: tr("Get list of attached file names"), help: {title: tr("Get list of attached file names"), description: tr("If enabled, then the list of filenames attached to the message will be retrieved from the server and stored in the variable below.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."), examples: [{code: tr("Activated"), description: tr("Get list of file attachment names of the message from server and save")}, {code: tr("Deactivated"), description: tr("Don't get list of file attachment names of the message from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveAttachnames",
			visible_if_checked: "getAttachNames",
			description: tr("Attachment names"),
			default_variable: "MAIL_ATTACHMENT_NAMES_LIST",
			help: {
				description: tr("Variable in which, after successful execution of the action, the list of filenames attached to the retrieved message will be written.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."),
				examples: [
					{code: "[\"photo.png\"]"},
					{code: "[\"document.pdf\", \"text.txt\"]"},
					{code: "[\"index.html\", \"script.js\", \"icon.ico\"]"}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getAttachments", title: tr("Save attached files"), help: {title: tr("Save attached files"), description: tr("If enabled, then the attachments of the message will be retrieved from the server and saved to the computer as files with a random name, a list of objects with information about attachments will be written to the variable specified below the mask.") + " " + tr("The resulting list can be processed using actions from the \"JSON\" module.") + " " + tr("You can choose which attachments will be saved by specifying the filename mask in the parameter below."), examples: [{code: tr("Activated"), description: tr("Get message attachments from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message attachments from server")}]}}) %>

		<%= _.template($('#input_constructor').html())({
			id: "attachmentsMask",
			visible_if_checked: "getAttachments",
			description: tr("File name mask"),
			default_selector: "string",
			disable_int: true,
			value_string: "*",
			help: {
				description: tr("The file name mask by which attachments will be filtered. Only files whose names match the mask will be retrieved and saved. In the mask, the character <code>*</code> is perceived as a sequence of any characters, and the character <code>?</code> treated as one any character. If the mask begins with the character <code>!</code>, then all attachments whose names do not match this mask will be retrieved and saved.") + " " + tr("You can specify several masks by separating them with the character <code>;</code>, the filtering results of all specified masks will be combined."),
				examples: [
					{code: tr("*.js"), description: tr("All JavaScript files")},
					{code: tr("*.txt"), description: tr("All text files")},
					{code: tr("!*.txt"), description: tr("All files except text")},
					{code: tr("*.js;*.txt"), description: tr("All JavaScript and all text files")},
					{code: tr("*"), description: tr("All files")}
				]
			}
		}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveAttachments",
			visible_if_checked: "getAttachments",
			description: tr("Attachments"),
			default_variable: "MAIL_ATTACHMENTS_LIST",
			help: {
				description: tr("Variable in which, after successful execution of the action, the list of objects containing information about the saved attachments of the message will be written.") + " " + tr("The resulting list can be processed using actions from the \"JSON\" module.") + " " + tr("The \"name\" property of the object will contain the original file name, the \"path\" property will contain the path to the saved file, and the \"type\" property will contain the mime type of the file. Having obtained the path to the file and its original name from the object, you can rename it using the \"Move file/folder\" action from the \"Filesystem\" module."),
				examples: [
					{code: "[{<br/>name: \"photo.png\",<br/>path: \"1VVDZIew0K.file\",<br/>type: \"image/png\"<br/>}, {<br/>name: \"document.pdf\",<br/>path: \"D0rThm7KHp.file\",<br/>type: \"application/pdf\"<br/>}, {<br/>name: \"text.txt\",<br/>path: \"uBhN59Tokt.file\",<br/>type: \"text/plain\"<br/>}]"}
				]
			}
		}) %>
		

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getRawHeader", title: tr("Get technical headers of message"), help: {title: tr("Get technical headers of message"), description: tr("If enabled, then all the headers of message will be retrieved from the server and stored in the variable below as an object.") + " " + tr("The resulting object can be processed using actions from the \"JSON\" module."), examples: [{code: tr("Activated"), description: tr("Get message technical headers from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message technical headers from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveRawHeader",
			visible_if_checked: "getRawHeader",
			description: tr("Technical headers of message"),
			default_variable: "MAIL_RAW_HEADERS",
			help: {
				description: tr("Variable in which, after successful execution of the action, an object with all the headers of the retrieved message will be written.") + " " + tr("The resulting object can be processed using actions from the \"JSON\" module.") + " " + tr("The headers are stored as an object where the key is the header name and the value is the header value, the header value can be a string or a list of strings."),
				examples: [
					{code: "{<br/>content-type: \"multipart/alternative\",<br/>date: \"Thu, 18 Jun 2020 11:26:19 +0000 (UTC)\",<br/>delivered-to: \"you@site.com\",<br/>mime-version: \"1.0\",<br/>message-id: \"5eeb4f5be870.6c531352947a@example.com\",<br/>x-info: \"info\"<br/>...<br/>}"}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#checkbox').html())({id: "delAfter", title: tr("Delete message after receiving"), help: 
			{
				title: tr("Delete message after receiving"), 
				description: tr("Optional parameter.") + " " + tr("If activated, after successfully receiving the message will be deleted from the mailbox. When this parameter is enabled, the \"Set flags after receiving\" parameter is ignored."), 
				examples: 
				[
					{code: tr("Activated"), description: tr("Delete message after receiving")}, 
					{code: tr("Deactivated"), description: tr("Don't delete message after receiving")}
				]
			}
		}) %>
		
	
		<%= _.template($('#checkbox').html())({id: "setFlagsAfter", title: tr("Set flags after receiving"), help: 
			{
				title: tr("Set flags after receiving"), 
				description: tr("Optional parameter.") + " " + tr("If activated, after successfully receiving the message, one or more of the specified flags will be set for it. This parameter is ignored if the \"Delete message after receiving\" parameter is enabled."), 
				examples: 
				[
					{code: tr("Activated"), description: tr("Set message flags after receiving")},
					{code: tr("Deactivated"), description: tr("Don't set message flags after receiving")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "setFlags",
			visible_if_checked: "setFlagsAfter",
			description: tr("Flags"),
			default_selector: "string",
			variants: [
				{value: "\\Seen", description: tr("Message has been read")},
				{value: "\\Answered", description: tr("Message has been answered")},
				{value: "\\Flagged", description: tr("Message is \"flagged\" for urgent/special attention")},
				{value: "\\Deleted", description: tr("Message is marked for removal")},
				{value: "\\Draft", description: tr("Message has not completed composition (marked as a draft)")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("List or one flag which needs to set for the message.") + " " + tr("As a list, you can use a string consisting of flags, separated by commas.") + " " + tr("The possible flags may differ depending on the server implementation.") + "<br/><strong>\\Seen</strong> - " + tr("Message has been read") + "<br/><strong>\\Answered</strong> - " + tr("Message has been answered") + "<br/><strong>\\Flagged</strong> - " + tr("Message is \"flagged\" for urgent/special attention") + "<br/><strong>\\Deleted</strong> - " + tr("Message is marked for removal") + "<br/><strong>\\Draft</strong> - " + tr("Message has not completed composition (marked as a draft)"),
				examples: [
					{code: "\\Seen,\\Flagged"},
					{code: "\\Seen, \\Flagged"},
					{code: "[\"\\Seen\", \"\\Flagged\"]"}
				]
			}
		}) %>
		

		<%= _.template($('#input_constructor').html())({
			id: "box",
			description: tr("Folder name"),
			default_selector: "string",
			variants: [
				{value: "INBOX", description: tr("Default folder incoming messages")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("The name of the folder in which this action will be performed, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
				examples: [
					{code: "INBOX", description: tr("Default folder incoming messages")},
					{code: "Spam", description: tr("Spam folder, on some mails")},
					{code: "Trash", description: tr("Trash folder, on some mails")},
					{code: tr("Empty string"), description: tr("Use the folder specified in the \"Configure receiving mail\" action")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get the content of the last message in the specified folder.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will get the latest message and save parts of it into the specified variables.</div>
	<div class="tr tooltip-paragraph-fold">Using the parameters from the "Parsing" block, you can choose which parts of the message will be retrieved and saved, and which ones will be skipped, thereby saving traffic and time by getting only what you need.</div>
	<div class="tr tooltip-paragraph-fold">This action can delete the message or set flags for it, after successful receipt, for this you need to use the corresponding parameters in the additional settings.</div>
	<div class="tr tooltip-paragraph-fold">In the additional settings, you can specify the name of the folder in which this action will be performed, otherwise the folder specified in the "Configure receiving mail" action will be used.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>
</script><script type="text/template" id="InMail_SearchLast"><div class="container-fluid">
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#input_constructor').html())({
			id: "box",
			description: tr("Folder name"),
			default_selector: "string",
			variants: [
				{value: "INBOX", description: tr("Default folder incoming messages")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("The name of the folder in which this action will be performed, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
				examples: [
					{code: "INBOX", description: tr("Default folder incoming messages")},
					{code: "Spam", description: tr("Spam folder, on some mails")},
					{code: "Trash", description: tr("Trash folder, on some mails")},
					{code: tr("Empty string"), description: tr("Use the folder specified in the \"Configure receiving mail\" action")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#variable_constructor').html())({
		id: "Save",
		description: tr("Variable to save the result"),
		default_variable: "MAIL_LAST_ID",
		help: {
			description: tr("Variable in which, after successful execution of the action, the id of the last message will be written."),
			examples: [
				{code: 436},
				{code: 562},
				{code: 839}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Find and save the id of the last message in the specified folder.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will return the id of the last message.</div>
	<div class="tr tooltip-paragraph-fold">The received id can be used in other module actions, for example, to receive a message, set flags and delete.</div>
	<div class="tr tooltip-paragraph-fold">In the additional settings, you can specify the name of the folder in which this action will be performed, otherwise the folder specified in the "Configure receiving mail" action will be used.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>
</script><script type="text/template" id="InMail_FindMessage"><div class="container-fluid">
	<%= _.template($('#block_start').html())({id:"Filtration", name: tr("Filtration"), description: tr("Using the parameters from this block, you can filter the results as you need, or leave them without filtering. You can combine the parameters of this block in any order, the specified parameters will be taken into account when filtering, and those not specified will be ignored.")}) %>
		<%= _.template($('#description').html())({name:tr("Sender of message"), help: {title: tr("Sender of message"), description: tr("Sender of message, \"From\" field") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "admin@site.com"}, {code: "no-reply@example.com"}, {code: "Test &lt;info@test.com&gt;"}]}}) %>

		
		<%= _.template($('#input_constructor').html())({
			id: "from",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message sender address") + ", " + tr("that the searched message should contain") + ".",
				examples:[
					{code: "@twitter.com"},
					{code: "info@twitter.com"},
					{code: tr("Empty string"), description: tr("Don't filter by content in sender")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notFrom",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message sender address") + ", " + tr("that the searched message should not contain") + ".",
				examples:[
					{code: "@twitter.com"},
					{code: "info@twitter.com"},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in sender")}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Recipient of message"), help: {title: tr("Recipient of message"), description: tr("Recipient of message, \"To\" field") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "you@site.com"}, {code: "name@example.com"}, {code: "User &lt;user@test.com&gt;"}]}}) %>

		<%= _.template($('#input_constructor').html())({
			id: "to",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message recipient address") + ", " + tr("that the searched message should contain") + ".",
				examples: [
					{code: "you@site.com"},
					{code: "test@yourdomain.com"},
					{code: tr("Empty string"), description: tr("Don't filter by content in recipient")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notTo",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message recipient address") + ", " + tr("that the searched message should not contain") + ".",
				examples: [
					{code: "you@site.com"},
					{code: "test@yourdomain.com"},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in recipient")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Message subject"), help: {title: tr("Message subject"), description: tr("Message subject, \"Subject\" field") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: tr("Marketing")}, {code: tr("Business proposal")}, {code: tr("Email confirmation")}]}}) %>
		
		<%= _.template($('#input_constructor').html())({
			id: "subject",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("Part of the message subject") + ", " + tr("that the searched message should contain") + ".",
				examples: [
					{code: tr("Business proposal")},
					{code: tr("Email confirmation")},
					{code: tr("Empty string"), description: tr("Don't filter by content in subject")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notSubject",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("Part of the message subject") + ", " + tr("that the searched message should not contain") + ".",
				examples: [
					{code: tr("Business proposal")},
					{code: tr("Email confirmation")},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in subject")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Text of message"), help: {title: tr("Text of message"), description: tr("Text of message") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "&lt;HTML&gt;&lt;BODY&gt;&lt;div&gt;" + tr("Use code 9779 to confirm") + "&lt;/div&gt;&lt;/BODY&gt;&lt;/HTML&gt;"}, {code: tr("Use code 9779 to confirm")}]}}) %>
		<%= _.template($('#input_constructor').html())({
			id: "text",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message text") + ", " + tr("that the searched message should contain") + ".",
				examples: [
					{code: "Hello"},
					{code: "CODE:"},
					{code: tr("Empty string"), description: tr("Don't filter by content in text")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notText",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message text") + ", " + tr("that the searched message should not contain") + ".",
				examples: [
					{code: "Hello"},
					{code: "CODE:"},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in text")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Flags of message"), help: {title: tr("Flags of message"), description: tr("Flags of message") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "unseen"}, {code: "flagged,recent,unseen"}]}}) %>

		<%= _.template($('#input_constructor').html())({
			id: "flags",
			description: tr("Contains"),
			default_selector: "string",
			variants: [
				{value: "\\Seen", description: tr("Message has been read")},
				{value: "\\Answered", description: tr("Message has been answered")},
				{value: "\\Flagged", description: tr("Message is \"flagged\" for urgent/special attention")},
				{value: "\\Deleted", description: tr("Message is marked for removal")},
				{value: "\\Draft", description: tr("Message has not completed composition (marked as a draft)")}
			],
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("List of flags that the searched message should contain.") + " " + tr("As a list, you can use a string consisting of flags, separated by commas."),
				examples: [
					{code: "unseen"},
					{code: "flagged,recent,unseen"},
					{code: "flagged, recent, unseen"},
					{code: "[\"flagged\", \"recent\", \"unseen\"]"},
					{code: tr("Empty string"), description: tr("Do not filter by the presence of flags")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notFlags",
			description: tr("Does not contain"),
			default_selector: "string",
			variants: [
				{value: "\\Seen", description: tr("Message has been read")},
				{value: "\\Answered", description: tr("Message has been answered")},
				{value: "\\Flagged", description: tr("Message is \"flagged\" for urgent/special attention")},
				{value: "\\Deleted", description: tr("Message is marked for removal")},
				{value: "\\Draft", description: tr("Message has not completed composition (marked as a draft)")}
			],
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("List of flags that the searched message should not contain.") + " " + tr("As a list, you can use a string consisting of flags, separated by commas."),
				examples: [
					{code: "unseen"},
					{code: "flagged,recent,unseen"},
					{code: "flagged, recent, unseen"},
					{code: "[\"flagged\", \"recent\", \"unseen\"]"},
					{code: tr("Empty string"), description: tr("Do not filter by missing flags")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Receiving date"), help: {title: tr("Receiving date"), description: tr("Internal date of the message (disregarding time and timezone)") + ", " + tr("using the two parameters below, you can make filter by the contents of this field.") + " " + tr("Date can be created using actions from the \"Date and time\" module."), examples: [{code: '9/14/2003'}, {code: 'May 13 2021'}, {code: '1622214946346'}, {code: new Date('Jan 20 2022 16:57:26')}, {code: new Date()}]}}) %>
		
		<%= _.template($('#input_constructor').html())({
			id: "since",
			description: tr("From date"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Message received is within or later than the specified date.") + " " + tr("This field must contain a date or a string that can be converted to a date.") + " " + tr("Date can be created using actions from the \"Date and time\" module."),
				examples: [
					{code: '9/14/2003'},
					{code: 'May 13 2021'},
					{code: '1622214946346'},
					{code: new Date('Jan 20 2022 16:57:26')},
					{code: new Date()}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "before",
			description: tr("To date"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Message received is earlier than the specified date.") + " " + tr("This field must contain a date or a string that can be converted to a date.") + " " + tr("Date can be created using actions from the \"Date and time\" module."),
				examples: [
					{code: '9/14/2003'},
					{code: 'May 13 2021'},
					{code: '1622214946346'},
					{code: new Date('Jan 20 2022 16:57:26')},
					{code: new Date()}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#block_start').html())({id:"Sorting", name: tr("Sorting"), description: tr("Using the parameters from this block, you can sort the results in the order you need, or leave them without sorting.")}) %>
		<%= _.template($('#input_constructor').html())({
			id: "sortType",
			description: tr("Sorting type"),
			default_selector: "string",
			variants: [
				{value: "no sorting", description: tr("No sorting")},
				{value: "ascending", description: tr("Sort ascending")},
				{value: "descending", description: tr("Sort descending")}
			],
			disable_int: true,
			value_string: "no sorting",
			help: {
				description: tr("By default, sorting is disabled, but you can enable it by changing the value of this parameter and specifying the \"Sorting field\" parameter.") + " " + tr("Sorting is not supported by all mail services, if sorting is enabled, but the service does not support it, the action will fail."),
				examples: [
					{code: "no sorting", description: tr("No sorting")},
					{code: "ascending", description: tr("Sort ascending")},
					{code: "descending", description: tr("Sort descending")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "sortField",
			description: tr("Sorting field"),
			default_selector: "string",
			variants: [
				{value: "from", description: tr("Sender of message") + ", " + tr("first \"From\" address") + ", " + tr("sort alphabetically")},
				{value: "to", description: tr("Recipient of message") + ", " + tr("first \"To\" address") + ", " + tr("sort alphabetically")},
				{value: "subject", description: tr("Message subject") + ", " + tr("sort alphabetically")},
				{value: "size", description: tr("Message size")},
				{value: "date", description: tr("Receiving date")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Part of the message by which sorting will be performed."),
				examples: [
					{code: "from", description: tr("Sender of message") + ", " + tr("first \"From\" address") + ", " + tr("sort alphabetically")},
					{code: "to", description: tr("Recipient of message") + ", " + tr("first \"To\" address") + ", " + tr("sort alphabetically")},
					{code: "subject", description: tr("Message subject") + ", " + tr("sort alphabetically")},
					{code: "size", description: tr("Message size")},
					{code: "date", description: tr("Receiving date")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#block_start').html())({id:"Parsing", name: tr("Parsing"), description: tr("Using the parameters from this block, you can select which parts of the message will be fetched and in which variables will be saved.")}) %>
		
		<%= _.template($('#checkbox').html())({id: "getUid", checked: true, title: tr("Get message id"), help: {title: tr("Get message id"), description: tr("If enabled, then the message id will be stored in the variable below."), examples: [{code: tr("Activated"), description: tr("Save message id")}, {code: tr("Deactivated"), description: tr("Don't save message id")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveUid",
			description: tr("Message id"),
			visible_if_checked: "getUid",
			default_variable: "MAIL_ID",
			help: {
				description: tr("Variable in which, after successful execution of the action, the id of the retrieved message will be written."),
				examples: [
					{code: 134},
					{code: 370},
					{code: 458}
				]
			}
		}) %>
		
		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getFrom", title: tr("Get sender of message"), help: {title: tr("Get sender of message"), description: tr("If enabled, then the sender of the message will be retrieved from the server and stored in the variable below."), examples: [{code: tr("Activated"), description: tr("Get message sender from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message sender from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveFrom",
			visible_if_checked: "getFrom",
			description: tr("Sender of message"),
			default_variable: "MAIL_SENDER",
			help: {
				description: tr("Variable in which, after successful execution of the action, the sender of the retrieved message will be written."),
				examples: [
					{code: "admin@site.com"},
					{code: "no-reply@example.com"},
					{code: "Test &lt;info@test.com&gt;"}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getTo", title: tr("Get recipient of message"), help: {title: tr("Get recipient of message"), description: tr("If enabled, then the recipient of the message will be retrieved from the server and stored in the variable below."), examples: [{code: tr("Activated"), description: tr("Get message recipient from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message recipient from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveTo",
			visible_if_checked: "getTo",
			description: tr("Recipient of message"),
			default_variable: "MAIL_RECIPIENT",
			help: {
				description: tr("Variable in which, after successful execution of the action, the recipient of the retrieved message will be written."),
				examples: [
					{code: "you@site.com"},
					{code: "name@example.com"},
					{code: "User &lt;user@test.com&gt;"}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getSubject", title: tr("Get message subject"), help: {title: tr("Get message subject"), description: tr("If enabled, then the subject of the message will be retrieved from the server and stored in the variable below."), examples: [{code: tr("Activated"), description: tr("Get message subject from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message subject from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveSubject",
			visible_if_checked: "getSubject",
			description: tr("Message subject"),
			default_variable: "MAIL_SUBJECT",
			help: {
				description: tr("Variable in which, after successful execution of the action, the subject of the retrieved message will be written."),
				examples: [
					{code: tr("Marketing")},
					{code: tr("Business proposal")},
					{code: tr("Email confirmation")}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getTextHtml", title: tr("Get body of message") + " (text/html)", checked: true, help: {title: tr("Get body of message") + " (text/html)", description: tr("If enabled, then the body of the message in html format (text/html) will be retrieved from the server and stored in the variable below.") + " " + tr("text/html is the MIME type of data represented in html format, html is the markup language for web pages.") + " " + tr("If the message does not contain a body with this type, then an empty string will be stored."), examples: [{code: tr("Activated"), description: tr("Get message body (text/html) from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message body (text/html) from server")}]}}) %>

		<span data-visible-if-checked="getTextHtml">
			<%= _.template($('#variable_constructor').html())({
				id: "saveTextHtml",
				description: tr("Body of message") + " (text/html)",
				default_variable: "MAIL_TEXT_HTML",
				help: {
					description: tr("Variable in which, after successful execution of the action, the body of the retrieved message in html format (text/html) will be written.") + " " + tr("text/html is the MIME type of data represented in html format, html is the markup language for web pages.") + " " + tr("If the message does not contain a body with this type, then an empty string will be stored."),
					examples: [
						{code: "<p style=\"margin-bottom:6px\">&lt;HTML&gt;&lt;BODY&gt;&lt;div&gt;" + tr("Use code 9779 to confirm") + "&lt;/div&gt;&lt;/BODY&gt;&lt;/HTML&gt;</p>"},
						{code: tr("Empty string"), description: tr("The message does not contain a body in html format")}
					]
				}
			}) %>

			<%= _.template($('#checkbox').html())({id: "getLinksTextHtml", title: tr("Parse links from body of message") + " (text/html)", help: {title: tr("Parse links from body of message") + " (text/html)", description: tr("If enabled, then all links will be extracted from the retrieved message body (text/html) and stored in the variable below.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."), examples: [{code: tr("Activated"), description: tr("Extract links from message body") + " (text/html)"}, {code: tr("Deactivated"), description: tr("Don't extract links from message body") + " (text/html)"}]}}) %>

			<%= _.template($('#variable_constructor').html())({
				id: "saveLinksTextHtml",
				visible_if_checked: "getLinksTextHtml",
				description: tr("Links from body of message") + " (text/html)",
				default_variable: "MAIL_TEXT_HTML_LINKS_LIST",
				help: {
					description: tr("Variable in which, after successful execution of the action, the list of links from the body of the message (text/html) will be written.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."),
					examples: [
						{code: "[\"https://marketplace.biz/section_3/product_213234.php\"]"},
						{code: "[\"http://test.com\", \"example.org\"]"},
						{code: "[\"http://www.ad.by\", \"www.feedback.io\", \"https://support.co/new/ticket.php\"]"}
					]
				}
			}) %>
		</span>


		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getTextPlain", checked:true, title: tr("Get body of message") + " (text/plain)", help: {title: tr("Get body of message") + " (text/plain)", description: tr("If enabled, then the body of the message in text format (text/plain) will be retrieved from the server and stored in the variable below.") + " " + tr("text/plain is a MIME type that is the base type for text files.") + " " + tr("If the message does not contain a body with this type, then an empty string will be stored."), examples: [{code: tr("Activated"), description: tr("Get message body (text/plain) from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message body (text/plain) from server")}]}}) %>

		<span data-visible-if-checked="getTextPlain">
			<%= _.template($('#variable_constructor').html())({
				id: "saveTextPlain",
				description: tr("Body of message") + " (text/plain)",
				default_variable: "MAIL_TEXT_PLAIN",
				help: {
					description: tr("Variable in which, after successful execution of the action, the body of the retrieved message in text format (text/plain) will be written.") + " " + tr("text/plain is a MIME type that is the base type for text files.") + " " + tr("If the message does not contain a body with this type, then an empty string will be stored."),
					examples: [
						{code: "<p style=\"margin-bottom:6px\">" + tr("Use code 9779 to confirm") + "</p>"},
						{code: tr("Empty string"), description: tr("The message does not contain a body in text format")}
					]
				}
			}) %>

			<%= _.template($('#checkbox').html())({id: "getLinksTextPlain", title: tr("Parse links from body of message") + " (text/plain)", help: {title: tr("Parse links from body of message") + " (text/plain)", description: tr("If enabled, then all links will be extracted from the retrieved message body (text/plain) and stored in the variable below.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."), examples: [{code: tr("Activated"), description: tr("Extract links from message body") + " (text/plain)"}, {code: tr("Deactivated"), description: tr("Don't extract links from message body") + " (text/plain)"}]}}) %>

			<%= _.template($('#variable_constructor').html())({
				id: "saveLinksTextPlain",
				visible_if_checked: "getLinksTextPlain",
				description: tr("Links from body of message") + " (text/plain)",
				default_variable: "MAIL_TEXT_PLAIN_LINKS_LIST",
				help: {
					description: tr("Variable in which, after successful execution of the action, the list of links from the body of the message (text/plain) will be written.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."),
					examples: [
						{code: "[\"https://marketplace.biz/section_3/product_213234.php\"]"},
						{code: "[\"http://test.com\", \"example.org\"]"},
						{code: "[\"http://www.ad.by\", \"www.feedback.io\", \"https://support.co/new/ticket.php\"]"}
					]
				}
			}) %>


		</span>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getTextRaw", title: tr("Get body of message") + " (raw)", help: {title: tr("Get body of message") + " (raw)", description: tr("If enabled, then the body of the message in raw form (raw) will be retrieved from the server and stored in the variable below.") + " " + tr("raw - this means that the body of the message will be retrieved in its raw form, without any processing."), examples: [{code: tr("Activated"), description: tr("Get message body (raw) from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message body (raw) from server")}]}}) %>

		<span data-visible-if-checked="getTextRaw">
			<%= _.template($('#variable_constructor').html())({
				id: "saveTextRaw",
				description: tr("Body of message") + " (raw)",
				default_variable: "MAIL_TEXT_RAW",
				help: {
					description: tr("Variable in which, after successful execution of the action, the body of the retrieved message in raw form (raw) will be written.") + " " + tr("raw - this means that the body of the message will be retrieved in its raw form, without any processing."),
					examples: [
						{code: "----ALT--d449E7c1653598173380270778C1f6B21643480035<br/>Content-Type: text/plain; charset=utf-8<br/>Content-Transfer-Encoding: base64<p style=\"margin-top:6px;margin-bottom:6px\">ClVzZSBjb2RlIDk3NzkgdG8gY29uZmlybQrCoArCoA==</p><p style=\"margin-bottom:6px\">----ALT--d449E7c1653598173380270778C1f6B21643480035</p>"},
						{code: tr("Empty string"), description: tr("The message does not contain a body")}
					]
				}
			}) %>
			<%= _.template($('#checkbox').html())({id: "getLinksTextRaw", title: tr("Parse links from body of message") + " (raw)", help: {title: tr("Parse links from body of message") + " (raw)", description: tr("If enabled, then all links will be extracted from the retrieved message body (raw) and stored in the variable below.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."), examples: [{code: tr("Activated"), description: tr("Extract links from message body") + " (raw)"}, {code: tr("Deactivated"), description: tr("Don't extract links from message body") + " (raw)"}]}}) %>

			<%= _.template($('#variable_constructor').html())({
				id: "saveLinksTextRaw",
				visible_if_checked: "getLinksTextRaw",
				description: tr("Links from body of message") + " (raw)",
				default_variable: "MAIL_TEXT_RAW_LINKS_LIST",
				help: {
					description: tr("Variable in which, after successful execution of the action, the list of links from the body of the message (raw) will be written.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."),
					examples: [
						{code: "[\"https://marketplace.biz/section_3/product_213234.php\"]"},
						{code: "[\"http://test.com\", \"example.org\"]"},
						{code: "[\"http://www.ad.by\", \"www.feedback.io\", \"https://support.co/new/ticket.php\"]"}
					]
				}
			}) %>
		</span>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getSize", title: tr("Get message size"), help: {title: tr("Get message size"), description: tr("If enabled, then the size of the message will be retrieved from the server and stored in the variable below.") + " " + tr("The size of the message will be retrieved in octets, one octet is equal to 8 bits."), examples: [{code: tr("Activated"), description: tr("Get message size from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message size from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveSize",
			visible_if_checked: "getSize",
			description: tr("Message size"),
			default_variable: "MAIL_SIZE",
			help: {
				description: tr("Variable in which, after successful execution of the action, the size of the retrieved message will be written.") + " " + tr("The size of the message will be retrieved in octets, one octet is equal to 8 bits."),
				examples: [
					{code: 175},
					{code: 2345},
					{code: 11546}
				]
			}
		}) %>


		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getFlags", title: tr("Get flags of message"), help: {title: tr("Get flags of message"), description: tr("If enabled, then the list of message flags will be retrieved from the server and stored in the variable below.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."), examples: [{code: tr("Activated"), description: tr("Get message flags from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message flags from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveFlags",
			visible_if_checked: "getFlags",
			description: tr("Flags of message"),
			default_variable: "MAIL_FLAGS_LIST",
			help: {
				description: tr("Variable in which, after successful execution of the action, the list of flags of the retrieved message will be written.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."),
				examples: [
					{code: "[\"\\Seen\"]"},
					{code: "[\"\\Seen\", \"\\Flagged\"]"},
					{code: "[\"\\Seen\", \"\\Answered\", \"\\Deleted\"]"}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getDate", title: tr("Get receiving date"), help: {title: tr("Get receiving date"), description: tr("If enabled, then the date of the message will be retrieved from the server and stored in the variable below.") + " " + tr("The resulting date can be processed using actions from the \"Date and time\" module."), examples: [{code: tr("Activated"), description: tr("Get message date from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message date from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveDate",
			visible_if_checked: "getDate",
			description: tr("Receiving date"),
			default_variable: "MAIL_DATE",
			help: {
				description: tr("Variable in which, after successful execution of the action, the date of the retrieved message will be written.") + " " + tr("The resulting date can be processed using actions from the \"Date and time\" module."),
				examples: [
					{code: new Date('May 13 2021')},
					{code: new Date('Jan 20 2022 16:57:26')},
					{code: new Date()}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>
		<%= _.template($('#checkbox').html())({id: "getAttachNames", title: tr("Get list of attached file names"), help: {title: tr("Get list of attached file names"), description: tr("If enabled, then the list of filenames attached to the message will be retrieved from the server and stored in the variable below.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."), examples: [{code: tr("Activated"), description: tr("Get list of file attachment names of the message from server and save")}, {code: tr("Deactivated"), description: tr("Don't get list of file attachment names of the message from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveAttachnames",
			visible_if_checked: "getAttachNames",
			description: tr("Attachment names"),
			default_variable: "MAIL_ATTACHMENT_NAMES_LIST",
			help: {
				description: tr("Variable in which, after successful execution of the action, the list of filenames attached to the retrieved message will be written.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."),
				examples: [
					{code: "[\"photo.png\"]"},
					{code: "[\"document.pdf\", \"text.txt\"]"},
					{code: "[\"index.html\", \"script.js\", \"icon.ico\"]"}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getAttachments", title: tr("Save attached files"), help: {title: tr("Save attached files"), description: tr("If enabled, then the attachments of the message will be retrieved from the server and saved to the computer as files with a random name, a list of objects with information about attachments will be written to the variable specified below the mask.") + " " + tr("The resulting list can be processed using actions from the \"JSON\" module.") + " " + tr("You can choose which attachments will be saved by specifying the filename mask in the parameter below."), examples: [{code: tr("Activated"), description: tr("Get message attachments from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message attachments from server")}]}}) %>

		<%= _.template($('#input_constructor').html())({
			id: "attachmentsMask",
			visible_if_checked: "getAttachments",
			description: tr("File name mask"),
			default_selector: "string",
			disable_int: true,
			value_string: "*",
			help: {
				description: tr("The file name mask by which attachments will be filtered. Only files whose names match the mask will be retrieved and saved. In the mask, the character <code>*</code> is perceived as a sequence of any characters, and the character <code>?</code> treated as one any character. If the mask begins with the character <code>!</code>, then all attachments whose names do not match this mask will be retrieved and saved.") + " " + tr("You can specify several masks by separating them with the character <code>;</code>, the filtering results of all specified masks will be combined."),
				examples: [
					{code: tr("*.js"), description: tr("All JavaScript files")},
					{code: tr("*.txt"), description: tr("All text files")},
					{code: tr("!*.txt"), description: tr("All files except text")},
					{code: tr("*.js;*.txt"), description: tr("All JavaScript and all text files")},
					{code: tr("*"), description: tr("All files")}
				]
			}
		}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveAttachments",
			visible_if_checked: "getAttachments",
			description: tr("Attachments"),
			default_variable: "MAIL_ATTACHMENTS_LIST",
			help: {
				description: tr("Variable in which, after successful execution of the action, the list of objects containing information about the saved attachments of the message will be written.") + " " + tr("The resulting list can be processed using actions from the \"JSON\" module.") + " " + tr("The \"name\" property of the object will contain the original file name, the \"path\" property will contain the path to the saved file, and the \"type\" property will contain the mime type of the file. Having obtained the path to the file and its original name from the object, you can rename it using the \"Move file/folder\" action from the \"Filesystem\" module."),
				examples: [
					{code: "[{<br/>name: \"photo.png\",<br/>path: \"1VVDZIew0K.file\",<br/>type: \"image/png\"<br/>}, {<br/>name: \"document.pdf\",<br/>path: \"D0rThm7KHp.file\",<br/>type: \"application/pdf\"<br/>}, {<br/>name: \"text.txt\",<br/>path: \"uBhN59Tokt.file\",<br/>type: \"text/plain\"<br/>}]"}
				]
			}
		}) %>
		

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getRawHeader", title: tr("Get technical headers of message"), help: {title: tr("Get technical headers of message"), description: tr("If enabled, then all the headers of message will be retrieved from the server and stored in the variable below as an object.") + " " + tr("The resulting object can be processed using actions from the \"JSON\" module."), examples: [{code: tr("Activated"), description: tr("Get message technical headers from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message technical headers from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveRawHeader",
			visible_if_checked: "getRawHeader",
			description: tr("Technical headers of message"),
			default_variable: "MAIL_RAW_HEADERS",
			help: {
				description: tr("Variable in which, after successful execution of the action, an object with all the headers of the retrieved message will be written.") + " " + tr("The resulting object can be processed using actions from the \"JSON\" module.") + " " + tr("The headers are stored as an object where the key is the header name and the value is the header value, the header value can be a string or a list of strings."),
				examples: [
					{code: "{<br/>content-type: \"multipart/alternative\",<br/>date: \"Thu, 18 Jun 2020 11:26:19 +0000 (UTC)\",<br/>delivered-to: \"you@site.com\",<br/>mime-version: \"1.0\",<br/>message-id: \"5eeb4f5be870.6c531352947a@example.com\",<br/>x-info: \"info\"<br/>...<br/>}"}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		
		<%= _.template($('#checkbox').html())({id: "wait", title: tr("Wait message"), help: {title: tr("Wait message"), description: tr("Optional parameter.") + " " + tr("If enabled, then the action will not fail if the message is not found according to the specified criteria, but will wait for the specified time, and only if the message is not found within the specified time, the action will fail."), examples: [{code: tr("Activated"), description: tr("Wait message")}, {code: tr("Deactivated"), description: tr("Don't wait message")}]}}) %>

		
			<%= _.template($('#input_constructor').html())({
				id: "minResults",
				visible_if_checked: "wait",
				description: tr("Number of messages"),
				default_selector: "int",
				disable_string: true,
				value_number: 1,
				min_number: 1,
				max_number: 999999,
				help: {
					description: tr("Wait for the appearance of the specified number of messages matching the specified criteria. The action will be completed successfully when the number of messages matching the specified criteria is equal to or greater than the number specified in this parameter."),
					examples: [
						{code: 1, description: tr("Wait for one message matching the specified criteria")},
						{code: 5, description: tr("Wait for five messages matching the specified criteria")},
						{code: 10, description: tr("Wait for ten messages matching the specified criteria")}
					]
				}
			}) %>
			<%= _.template($('#input_constructor').html())({
				id: "interval",
				visible_if_checked: "wait",
				description: tr("Interval (seconds)"),
				default_selector: "int",
				disable_string: true,
				value_number: 5,
				min_number: 1,
				max_number: 999999,
				help: {
					description: tr("Interval in seconds to check existence messages matching the specified criteria."),
					examples: [
						{code: 2, description: tr("Check every 2 seconds")},
						{code: 5, description: tr("Check every 5 seconds")},
						{code: 10, description: tr("Check every 10 seconds")}
					]
				}
			}) %>
			<%= _.template($('#input_constructor').html())({
				id: "timeout",
				visible_if_checked: "wait",
				description: tr("Timeout (seconds)"),
				default_selector: "int",
				disable_string: true,
				value_number: 300,
				min_number: 1,
				max_number: 999999,
				help: {
					description: tr("Maximum waiting time for messages in seconds. If the specified time expires and the messages are not found, then the action will end with an error."),
					examples: [
						{code: 300, description: tr("Wait 5 minutes")},
						{code: 600, description: tr("Wait 10 minutes")},
						{code: 900, description: tr("Wait 15 minutes")},
						{code: 1200, description: tr("Wait 20 minutes")}
					]
				}
			}) %>


		<%= _.template($('#checkbox').html())({id: "delAfter", title: tr("Delete message after receiving"), help: {title: tr("Delete message after receiving"), description: tr("Optional parameter.") + " " + tr("If activated, after successfully receiving the message will be deleted from the mailbox. When this parameter is enabled, the \"Set flags after receiving\" parameter is ignored."), examples: [{code: tr("Activated"), description: tr("Delete message after receiving")}, {code: tr("Deactivated"), description: tr("Don't delete message after receiving")}]}}) %>


		<%= _.template($('#checkbox').html())({id: "setFlagsAfter", title: tr("Set flags after receiving"), help: {title: tr("Set flags after receiving"), description: tr("Optional parameter.") + " " + tr("If activated, after successfully receiving the message, one or more of the specified flags will be set for it. This parameter is ignored if the \"Delete message after receiving\" parameter is enabled."), examples: [{code: tr("Activated"), description: tr("Set message flags after receiving")}, {code: tr("Deactivated"), description: tr("Don't set message flags after receiving")}]}}) %>

		
			<%= _.template($('#input_constructor').html())({
				id: "setFlags",
				visible_if_checked: "setFlagsAfter",
				description: tr("Flags"),
				default_selector: "string",
				variants: [
					{value: "\\Seen", description: tr("Message has been read")},
					{value: "\\Answered", description: tr("Message has been answered")},
					{value: "\\Flagged", description: tr("Message is \"flagged\" for urgent/special attention")},
					{value: "\\Deleted", description: tr("Message is marked for removal")},
					{value: "\\Draft", description: tr("Message has not completed composition (marked as a draft)")}
				],
				disable_int: true,
				value_string: "",
				help: {
					description: tr("List or one flag which needs to set for the message.") + " " + tr("As a list, you can use a string consisting of flags, separated by commas.") + " " + tr("The possible flags may differ depending on the server implementation.") + "<br/><strong>\\Seen</strong> - " + tr("Message has been read") + "<br/><strong>\\Answered</strong> - " + tr("Message has been answered") + "<br/><strong>\\Flagged</strong> - " + tr("Message is \"flagged\" for urgent/special attention") + "<br/><strong>\\Deleted</strong> - " + tr("Message is marked for removal") + "<br/><strong>\\Draft</strong> - " + tr("Message has not completed composition (marked as a draft)"),
					examples: [
						{code: "\\Seen,\\Flagged"},
						{code: "\\Seen, \\Flagged"},
						{code: "[\"\\Seen\", \"\\Flagged\"]"}
					]
				}
			}) %>


		<%= _.template($('#input_constructor').html())({
			id: "box",
			description: tr("Folder name"),
			default_selector: "string",
			variants: [
				{value: "INBOX", description: tr("Default folder incoming messages")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("The name of the folder in which this action will be performed, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
				examples: [
					{code: "INBOX", description: tr("Default folder incoming messages")},
					{code: "Spam", description: tr("Spam folder, on some mails")},
					{code: "Trash", description: tr("Trash folder, on some mails")},
					{code: tr("Empty string"), description: tr("Use the folder specified in the \"Configure receiving mail\" action")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Find and get the content of the message by the specified criteria.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will get the last message that matches the specified criteria and store parts of it in the specified variables.</div>
	<div class="tr tooltip-paragraph-fold">Using the parameters from the "Filtration" block, you can filter messages at your discretion or leave them unfiltered.</div>
	<div class="tr tooltip-paragraph-fold">In the "Sorting" block, you can set the order and field for sorting.</div>
	<div class="tr tooltip-paragraph-fold">Filtering and sorting is performed on the side of the mail server.</div>
	<div class="tr tooltip-paragraph-fold">Sorting is not supported by all mail services, if sorting is enabled, but the service does not support it, the action will fail.</div>
	<div class="tr tooltip-paragraph-fold">Filtering and sorting are only available when connecting via imap, if the action is called when connecting via pop3 and filtering or sorting is active, then the action will immediately fail.</div>
	<div class="tr tooltip-paragraph-fold">Using the parameters from the "Parsing" block, you can choose which parts of the message will be retrieved and saved, and which ones will be skipped, thereby saving traffic and time by getting only what you need.</div>
	<div class="tr tooltip-paragraph-fold">This action can wait for an message for the specified time if you activate the corresponding parameter in the additional settings.</div>
	<div class="tr tooltip-paragraph-fold">This action can delete the message or set flags for it, after successful receipt, for this you need to use the corresponding parameters in the additional settings.</div>
	<div class="tr tooltip-paragraph-fold">In the additional settings, you can specify the name of the folder in which this action will be performed, otherwise the folder specified in the "Configure receiving mail" action will be used.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>

</script><script type="text/template" id="InMail_SearchOne"><div class="container-fluid">
<%= _.template($('#block_start').html())({id:"Filtration", name: tr("Filtration"), description: tr("Using the parameters from this block, you can filter the results as you need, or leave them without filtering. You can combine the parameters of this block in any order, the specified parameters will be taken into account when filtering, and those not specified will be ignored.")}) %>
		<%= _.template($('#description').html())({name:tr("Sender of message"), help: {title: tr("Sender of message"), description: tr("Sender of message, \"From\" field") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "admin@site.com"}, {code: "no-reply@example.com"}, {code: "Test &lt;info@test.com&gt;"}]}}) %>

		
		<%= _.template($('#input_constructor').html())({
			id: "from",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message sender address") + ", " + tr("that the searched message should contain") + ".",
				examples:[
					{code: "@twitter.com"},
					{code: "info@twitter.com"},
					{code: tr("Empty string"), description: tr("Don't filter by content in sender")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notFrom",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message sender address") + ", " + tr("that the searched message should not contain") + ".",
				examples:[
					{code: "@twitter.com"},
					{code: "info@twitter.com"},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in sender")}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Recipient of message"), help: {title: tr("Recipient of message"), description: tr("Recipient of message, \"To\" field") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "you@site.com"}, {code: "name@example.com"}, {code: "User &lt;user@test.com&gt;"}]}}) %>

		<%= _.template($('#input_constructor').html())({
			id: "to",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message recipient address") + ", " + tr("that the searched message should contain") + ".",
				examples: [
					{code: "you@site.com"},
					{code: "test@yourdomain.com"},
					{code: tr("Empty string"), description: tr("Don't filter by content in recipient")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notTo",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message recipient address") + ", " + tr("that the searched message should not contain") + ".",
				examples: [
					{code: "you@site.com"},
					{code: "test@yourdomain.com"},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in recipient")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Message subject"), help: {title: tr("Message subject"), description: tr("Message subject, \"Subject\" field") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: tr("Marketing")}, {code: tr("Business proposal")}, {code: tr("Email confirmation")}]}}) %>
		
		<%= _.template($('#input_constructor').html())({
			id: "subject",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("Part of the message subject") + ", " + tr("that the searched message should contain") + ".",
				examples: [
					{code: tr("Business proposal")},
					{code: tr("Email confirmation")},
					{code: tr("Empty string"), description: tr("Don't filter by content in subject")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notSubject",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("Part of the message subject") + ", " + tr("that the searched message should not contain") + ".",
				examples: [
					{code: tr("Business proposal")},
					{code: tr("Email confirmation")},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in subject")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Text of message"), help: {title: tr("Text of message"), description: tr("Text of message") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "&lt;HTML&gt;&lt;BODY&gt;&lt;div&gt;" + tr("Use code 9779 to confirm") + "&lt;/div&gt;&lt;/BODY&gt;&lt;/HTML&gt;"}, {code: tr("Use code 9779 to confirm")}]}}) %>
		<%= _.template($('#input_constructor').html())({
			id: "text",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message text") + ", " + tr("that the searched message should contain") + ".",
				examples: [
					{code: "Hello"},
					{code: "CODE:"},
					{code: tr("Empty string"), description: tr("Don't filter by content in text")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notText",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message text") + ", " + tr("that the searched message should not contain") + ".",
				examples: [
					{code: "Hello"},
					{code: "CODE:"},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in text")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Flags of message"), help: {title: tr("Flags of message"), description: tr("Flags of message") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "unseen"}, {code: "flagged,recent,unseen"}]}}) %>

		<%= _.template($('#input_constructor').html())({
			id: "flags",
			description: tr("Contains"),
			default_selector: "string",
			variants: [
				{value: "\\Seen", description: tr("Message has been read")},
				{value: "\\Answered", description: tr("Message has been answered")},
				{value: "\\Flagged", description: tr("Message is \"flagged\" for urgent/special attention")},
				{value: "\\Deleted", description: tr("Message is marked for removal")},
				{value: "\\Draft", description: tr("Message has not completed composition (marked as a draft)")}
			],
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("List of flags that the searched message should contain.") + " " + tr("As a list, you can use a string consisting of flags, separated by commas."),
				examples: [
					{code: "unseen"},
					{code: "flagged,recent,unseen"},
					{code: "flagged, recent, unseen"},
					{code: "[\"flagged\", \"recent\", \"unseen\"]"},
					{code: tr("Empty string"), description: tr("Do not filter by the presence of flags")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notFlags",
			description: tr("Does not contain"),
			default_selector: "string",
			variants: [
				{value: "\\Seen", description: tr("Message has been read")},
				{value: "\\Answered", description: tr("Message has been answered")},
				{value: "\\Flagged", description: tr("Message is \"flagged\" for urgent/special attention")},
				{value: "\\Deleted", description: tr("Message is marked for removal")},
				{value: "\\Draft", description: tr("Message has not completed composition (marked as a draft)")}
			],
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("List of flags that the searched message should not contain.") + " " + tr("As a list, you can use a string consisting of flags, separated by commas."),
				examples: [
					{code: "unseen"},
					{code: "flagged,recent,unseen"},
					{code: "flagged, recent, unseen"},
					{code: "[\"flagged\", \"recent\", \"unseen\"]"},
					{code: tr("Empty string"), description: tr("Do not filter by missing flags")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Receiving date"), help: {title: tr("Receiving date"), description: tr("Internal date of the message (disregarding time and timezone)") + ", " + tr("using the two parameters below, you can make filter by the contents of this field.") + " " + tr("Date can be created using actions from the \"Date and time\" module."), examples: [{code: '9/14/2003'}, {code: 'May 13 2021'}, {code: '1622214946346'}, {code: new Date('Jan 20 2022 16:57:26')}, {code: new Date()}]}}) %>
		
		<%= _.template($('#input_constructor').html())({
			id: "since",
			description: tr("From date"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Message received is within or later than the specified date.") + " " + tr("This field must contain a date or a string that can be converted to a date.") + " " + tr("Date can be created using actions from the \"Date and time\" module."),
				examples: [
					{code: '9/14/2003'},
					{code: 'May 13 2021'},
					{code: '1622214946346'},
					{code: new Date('Jan 20 2022 16:57:26')},
					{code: new Date()}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "before",
			description: tr("To date"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Message received is earlier than the specified date.") + " " + tr("This field must contain a date or a string that can be converted to a date.") + " " + tr("Date can be created using actions from the \"Date and time\" module."),
				examples: [
					{code: '9/14/2003'},
					{code: 'May 13 2021'},
					{code: '1622214946346'},
					{code: new Date('Jan 20 2022 16:57:26')},
					{code: new Date()}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#block_start').html())({id:"Sorting", name: tr("Sorting"), description: tr("Using the parameters from this block, you can sort the results in the order you need, or leave them without sorting.")}) %>
		<%= _.template($('#input_constructor').html())({
			id: "sortType",
			description: tr("Sorting type"),
			default_selector: "string",
			variants: [
				{value: "no sorting", description: tr("No sorting")},
				{value: "ascending", description: tr("Sort ascending")},
				{value: "descending", description: tr("Sort descending")}
			],
			disable_int: true,
			value_string: "no sorting",
			help: {
				description: tr("By default, sorting is disabled, but you can enable it by changing the value of this parameter and specifying the \"Sorting field\" parameter.") + " " + tr("Sorting is not supported by all mail services, if sorting is enabled, but the service does not support it, the action will fail."),
				examples: [
					{code: "no sorting", description: tr("No sorting")},
					{code: "ascending", description: tr("Sort ascending")},
					{code: "descending", description: tr("Sort descending")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "sortField",
			description: tr("Sorting field"),
			default_selector: "string",
			variants: [
				{value: "from", description: tr("Sender of message") + ", " + tr("first \"From\" address") + ", " + tr("sort alphabetically")},
				{value: "to", description: tr("Recipient of message") + ", " + tr("first \"To\" address") + ", " + tr("sort alphabetically")},
				{value: "subject", description: tr("Message subject") + ", " + tr("sort alphabetically")},
				{value: "size", description: tr("Message size")},
				{value: "date", description: tr("Receiving date")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Part of the message by which sorting will be performed."),
				examples: [
					{code: "from", description: tr("Sender of message") + ", " + tr("first \"From\" address") + ", " + tr("sort alphabetically")},
					{code: "to", description: tr("Recipient of message") + ", " + tr("first \"To\" address") + ", " + tr("sort alphabetically")},
					{code: "subject", description: tr("Message subject") + ", " + tr("sort alphabetically")},
					{code: "size", description: tr("Message size")},
					{code: "date", description: tr("Receiving date")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
	
		<%= _.template($('#checkbox').html())({id: "wait", title: tr("Wait message"), help: {title: tr("Wait message"), description: tr("Optional parameter.") + " " + tr("If enabled, then the action will not fail if the message is not found according to the specified criteria, but will wait for the specified time, and only if the message is not found within the specified time, the action will fail."), examples: [{code: tr("Activated"), description: tr("Wait message")}, {code: tr("Deactivated"), description: tr("Don't wait message")}]}}) %>

			<%= _.template($('#input_constructor').html())({
				id: "minResults",
				visible_if_checked: "wait",
				description: tr("Number of messages"),
				default_selector: "int",
				disable_string: true,
				value_number: 1,
				min_number: 1,
				max_number: 999999,
				help: {
					description: tr("Wait for the appearance of the specified number of messages matching the specified criteria. The action will be completed successfully when the number of messages matching the specified criteria is equal to or greater than the number specified in this parameter."),
					examples: [
						{code: 1, description: tr("Wait for one message matching the specified criteria")},
						{code: 5, description: tr("Wait for five messages matching the specified criteria")},
						{code: 10, description: tr("Wait for ten messages matching the specified criteria")}
					]
				}
			}) %>
			<%= _.template($('#input_constructor').html())({
				id: "interval",
				visible_if_checked: "wait",
				description: tr("Interval (seconds)"),
				default_selector: "int",
				disable_string: true,
				value_number: 5,
				min_number: 1,
				max_number: 999999,
				help: {
					description: tr("Interval in seconds to check existence messages matching the specified criteria."),
					examples: [
						{code: 2, description: tr("Check every 2 seconds")},
						{code: 5, description: tr("Check every 5 seconds")},
						{code: 10, description: tr("Check every 10 seconds")}
					]
				}
			}) %>
			<%= _.template($('#input_constructor').html())({
				id: "timeout",
				visible_if_checked: "wait",
				description: tr("Timeout (seconds)"),
				default_selector: "int",
				disable_string: true,
				value_number: 300,
				min_number: 1,
				max_number: 999999,
				help: {
					description: tr("Maximum waiting time for messages in seconds. If the specified time expires and the messages are not found, then the action will end with an error."),
					examples: [
						{code: 300, description: tr("Wait 5 minutes")},
						{code: 600, description: tr("Wait 10 minutes")},
						{code: 900, description: tr("Wait 15 minutes")},
						{code: 1200, description: tr("Wait 20 minutes")}
					]
				}
			}) %>
		
		
		<%= _.template($('#input_constructor').html())({
			id: "box",
			description: tr("Folder name"),
			default_selector: "string",
			variants: [
				{value: "INBOX", description: tr("Default folder incoming messages")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("The name of the folder in which this action will be performed, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
				examples: [
					{code: "INBOX", description: tr("Default folder incoming messages")},
					{code: "Spam", description: tr("Spam folder, on some mails")},
					{code: "Trash", description: tr("Trash folder, on some mails")},
					{code: tr("Empty string"), description: tr("Use the folder specified in the \"Configure receiving mail\" action")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#variable_constructor').html())({
		id: "Save",
		description: tr("Variable to save the result"),
		default_variable: "MAIL_ID",
		help: {
			description: tr("Variable in which, after successful execution of the action, the id of the found message will be written."),
			examples: [
				{code: 159},
				{code: 273},
				{code: 587}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Find and save the message id by the specified criteria.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will return the id of the message found by the specified criteria.</div>
	<div class="tr tooltip-paragraph-fold">The received id can be used in other module actions, for example, to receive a message, set flags and delete.</div>
	<div class="tr tooltip-paragraph-fold">Using the parameters from the "Filtration" block, you can filter messages at your discretion or leave them unfiltered.</div>
	<div class="tr tooltip-paragraph-fold">In the "Sorting" block, you can set the order and field for sorting.</div>
	<div class="tr tooltip-paragraph-fold">Filtering and sorting is performed on the side of the mail server.</div>
	<div class="tr tooltip-paragraph-fold">Sorting is not supported by all mail services, if sorting is enabled, but the service does not support it, the action will fail.</div>
	<div class="tr tooltip-paragraph-fold">Filtering and sorting are only available when connecting via imap, if the action is called when connecting via pop3 and filtering or sorting is active, then the action will immediately fail.</div>
	<div class="tr tooltip-paragraph-fold">This action can wait for an message for the specified time if you activate the corresponding parameter in the additional settings.</div>
	<div class="tr tooltip-paragraph-fold">In the additional settings, you can specify the name of the folder in which this action will be performed, otherwise the folder specified in the "Configure receiving mail" action will be used.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>

</script><script type="text/template" id="InMail_Search"><div class="container-fluid">
	<%= _.template($('#block_start').html())({id:"Filtration", name: tr("Filtration"), description: tr("Using the parameters from this block, you can filter the results as you need, or leave them without filtering. You can combine the parameters of this block in any order, the specified parameters will be taken into account when filtering, and those not specified will be ignored.")}) %>
		<%= _.template($('#description').html())({name:tr("Sender of message"), help: {title: tr("Sender of message"), description: tr("Sender of message, \"From\" field") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "admin@site.com"}, {code: "no-reply@example.com"}, {code: "Test &lt;info@test.com&gt;"}]}}) %>

		
		<%= _.template($('#input_constructor').html())({
			id: "from",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message sender address") + ", " + tr("that the searched message should contain") + ".",
				examples:[
					{code: "@twitter.com"},
					{code: "info@twitter.com"},
					{code: tr("Empty string"), description: tr("Don't filter by content in sender")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notFrom",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message sender address") + ", " + tr("that the searched message should not contain") + ".",
				examples:[
					{code: "@twitter.com"},
					{code: "info@twitter.com"},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in sender")}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Recipient of message"), help: {title: tr("Recipient of message"), description: tr("Recipient of message, \"To\" field") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "you@site.com"}, {code: "name@example.com"}, {code: "User &lt;user@test.com&gt;"}]}}) %>

		<%= _.template($('#input_constructor').html())({
			id: "to",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message recipient address") + ", " + tr("that the searched message should contain") + ".",
				examples: [
					{code: "you@site.com"},
					{code: "test@yourdomain.com"},
					{code: tr("Empty string"), description: tr("Don't filter by content in recipient")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notTo",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message recipient address") + ", " + tr("that the searched message should not contain") + ".",
				examples: [
					{code: "you@site.com"},
					{code: "test@yourdomain.com"},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in recipient")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Message subject"), help: {title: tr("Message subject"), description: tr("Message subject, \"Subject\" field") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: tr("Marketing")}, {code: tr("Business proposal")}, {code: tr("Email confirmation")}]}}) %>
		
		<%= _.template($('#input_constructor').html())({
			id: "subject",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("Part of the message subject") + ", " + tr("that the searched message should contain") + ".",
				examples: [
					{code: tr("Business proposal")},
					{code: tr("Email confirmation")},
					{code: tr("Empty string"), description: tr("Don't filter by content in subject")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notSubject",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("Part of the message subject") + ", " + tr("that the searched message should not contain") + ".",
				examples: [
					{code: tr("Business proposal")},
					{code: tr("Email confirmation")},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in subject")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Text of message"), help: {title: tr("Text of message"), description: tr("Text of message") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "&lt;HTML&gt;&lt;BODY&gt;&lt;div&gt;" + tr("Use code 9779 to confirm") + "&lt;/div&gt;&lt;/BODY&gt;&lt;/HTML&gt;"}, {code: tr("Use code 9779 to confirm")}]}}) %>
		<%= _.template($('#input_constructor').html())({
			id: "text",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message text") + ", " + tr("that the searched message should contain") + ".",
				examples: [
					{code: "Hello"},
					{code: "CODE:"},
					{code: tr("Empty string"), description: tr("Don't filter by content in text")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notText",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message text") + ", " + tr("that the searched message should not contain") + ".",
				examples: [
					{code: "Hello"},
					{code: "CODE:"},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in text")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Flags of message"), help: {title: tr("Flags of message"), description: tr("Flags of message") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "unseen"}, {code: "flagged,recent,unseen"}]}}) %>

		<%= _.template($('#input_constructor').html())({
			id: "flags",
			description: tr("Contains"),
			default_selector: "string",
			variants: [
				{value: "\\Seen", description: tr("Message has been read")},
				{value: "\\Answered", description: tr("Message has been answered")},
				{value: "\\Flagged", description: tr("Message is \"flagged\" for urgent/special attention")},
				{value: "\\Deleted", description: tr("Message is marked for removal")},
				{value: "\\Draft", description: tr("Message has not completed composition (marked as a draft)")}
			],
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("List of flags that the searched message should contain.") + " " + tr("As a list, you can use a string consisting of flags, separated by commas."),
				examples: [
					{code: "unseen"},
					{code: "flagged,recent,unseen"},
					{code: "flagged, recent, unseen"},
					{code: "[\"flagged\", \"recent\", \"unseen\"]"},
					{code: tr("Empty string"), description: tr("Do not filter by the presence of flags")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notFlags",
			description: tr("Does not contain"),
			default_selector: "string",
			variants: [
				{value: "\\Seen", description: tr("Message has been read")},
				{value: "\\Answered", description: tr("Message has been answered")},
				{value: "\\Flagged", description: tr("Message is \"flagged\" for urgent/special attention")},
				{value: "\\Deleted", description: tr("Message is marked for removal")},
				{value: "\\Draft", description: tr("Message has not completed composition (marked as a draft)")}
			],
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("List of flags that the searched message should not contain.") + " " + tr("As a list, you can use a string consisting of flags, separated by commas."),
				examples: [
					{code: "unseen"},
					{code: "flagged,recent,unseen"},
					{code: "flagged, recent, unseen"},
					{code: "[\"flagged\", \"recent\", \"unseen\"]"},
					{code: tr("Empty string"), description: tr("Do not filter by missing flags")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Receiving date"), help: {title: tr("Receiving date"), description: tr("Internal date of the message (disregarding time and timezone)") + ", " + tr("using the two parameters below, you can make filter by the contents of this field.") + " " + tr("Date can be created using actions from the \"Date and time\" module."), examples: [{code: '9/14/2003'}, {code: 'May 13 2021'}, {code: '1622214946346'}, {code: new Date('Jan 20 2022 16:57:26')}, {code: new Date()}]}}) %>
		
		<%= _.template($('#input_constructor').html())({
			id: "since",
			description: tr("From date"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Message received is within or later than the specified date.") + " " + tr("This field must contain a date or a string that can be converted to a date.") + " " + tr("Date can be created using actions from the \"Date and time\" module."),
				examples: [
					{code: '9/14/2003'},
					{code: 'May 13 2021'},
					{code: '1622214946346'},
					{code: new Date('Jan 20 2022 16:57:26')},
					{code: new Date()}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "before",
			description: tr("To date"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Message received is earlier than the specified date.") + " " + tr("This field must contain a date or a string that can be converted to a date.") + " " + tr("Date can be created using actions from the \"Date and time\" module."),
				examples: [
					{code: '9/14/2003'},
					{code: 'May 13 2021'},
					{code: '1622214946346'},
					{code: new Date('Jan 20 2022 16:57:26')},
					{code: new Date()}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#block_start').html())({id:"Sorting", name: tr("Sorting"), description: tr("Using the parameters from this block, you can sort the results in the order you need, or leave them without sorting.")}) %>
		<%= _.template($('#input_constructor').html())({
			id: "sortType",
			description: tr("Sorting type"),
			default_selector: "string",
			variants: [
				{value: "no sorting", description: tr("No sorting")},
				{value: "ascending", description: tr("Sort ascending")},
				{value: "descending", description: tr("Sort descending")}
			],
			disable_int: true,
			value_string: "no sorting",
			help: {
				description: tr("By default, sorting is disabled, but you can enable it by changing the value of this parameter and specifying the \"Sorting field\" parameter.") + " " + tr("Sorting is not supported by all mail services, if sorting is enabled, but the service does not support it, the action will fail."),
				examples: [
					{code: "no sorting", description: tr("No sorting")},
					{code: "ascending", description: tr("Sort ascending")},
					{code: "descending", description: tr("Sort descending")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "sortField",
			description: tr("Sorting field"),
			default_selector: "string",
			variants: [
				{value: "from", description: tr("Sender of message") + ", " + tr("first \"From\" address") + ", " + tr("sort alphabetically")},
				{value: "to", description: tr("Recipient of message") + ", " + tr("first \"To\" address") + ", " + tr("sort alphabetically")},
				{value: "subject", description: tr("Message subject") + ", " + tr("sort alphabetically")},
				{value: "size", description: tr("Message size")},
				{value: "date", description: tr("Receiving date")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Part of the message by which sorting will be performed."),
				examples: [
					{code: "from", description: tr("Sender of message") + ", " + tr("first \"From\" address") + ", " + tr("sort alphabetically")},
					{code: "to", description: tr("Recipient of message") + ", " + tr("first \"To\" address") + ", " + tr("sort alphabetically")},
					{code: "subject", description: tr("Message subject") + ", " + tr("sort alphabetically")},
					{code: "size", description: tr("Message size")},
					{code: "date", description: tr("Receiving date")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#checkbox').html())({id: "wait", title: tr("Wait messages"), help: {title: tr("Wait messages"), description: tr("Optional parameter.") + " " + tr("If enabled, the action will not fail if the messages is not found according to the specified criteria, but will wait for the specified time, and only if the messages is not found within the specified time, the action will fail."), examples: [{code: tr("Activated"),description: tr("Wait messages")}, {code: tr("Deactivated"), description: tr("Don't wait messages")}]}}) %>
		
			<%= _.template($('#input_constructor').html())({
				id: "minResults",
				visible_if_checked: "wait",
				description: tr("Number of messages"),
				default_selector: "int",
				disable_string: true,
				value_number: 1,
				min_number: 1,
				max_number: 999999,
				help: {
					description: tr("Wait for the appearance of the specified number of messages matching the specified criteria. The action will be completed successfully when the number of messages matching the specified criteria is equal to or greater than the number specified in this parameter."),
					examples: [
						{code: 1, description: tr("Wait for one message matching the specified criteria")},
						{code: 5, description: tr("Wait for five messages matching the specified criteria")},
						{code: 10, description: tr("Wait for ten messages matching the specified criteria")}
					]
				}
			}) %>
			<%= _.template($('#input_constructor').html())({
				id: "interval",
				visible_if_checked: "wait",
				description: tr("Interval (seconds)"),
				default_selector: "int",
				disable_string: true,
				value_number: 5,
				min_number: 1,
				max_number: 999999,
				help: {
					description: tr("Interval in seconds to check existence messages matching the specified criteria."),
					examples: [
						{code: 2, description: tr("Check every 2 seconds")},
						{code: 5, description: tr("Check every 5 seconds")},
						{code: 10, description: tr("Check every 10 seconds")}
					]
				}
			}) %>
			<%= _.template($('#input_constructor').html())({
				id: "timeout",
				visible_if_checked: "wait",
				description: tr("Timeout (seconds)"),
				default_selector: "int",
				disable_string: true,
				value_number: 300,
				min_number: 1,
				max_number: 999999,
				help: {
					description: tr("Maximum waiting time for messages in seconds. If the specified time expires and the messages are not found, then the action will end with an error."),
					examples: [
						{code: 300, description: tr("Wait 5 minutes")},
						{code: 600, description: tr("Wait 10 minutes")},
						{code: 900, description: tr("Wait 15 minutes")},
						{code: 1200, description: tr("Wait 20 minutes")}
					]
				}
			}) %>
		
		<%= _.template($('#input_constructor').html())({
			id: "maxResults",
			description: tr("Maximum number of results"),
			default_selector: "int",
			disable_string: true,
			value_number: "",
			min_number: 0,
			max_number: 999999,
			help: {
				description: tr("Optional parameter.") + " " + tr("Limit the number of returned ids to the specified number. If this parameter is specified, then the resulting id list will be truncated to the specified number. If the parameter is not specified or equal to 0, then the limit will not be applied and the full result will be returned."),
				examples: [
					{code: 1, description: "[456]"},
					{code: 3, description: "[456, 584, 589]"},
					{code: 6, description: "[456, 584, 589, 740, 805, 1203]"},
					{code: 0, description: tr("Don't limit the number of results")},
					{code: tr("Empty string"), description: tr("Don't limit the number of results")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "offset",
			description: tr("Offset"),
			default_selector: "int",
			disable_string: true,
			value_number: "",
			min_number: -999999,
			max_number: 999999,
			help: {
				description: tr("Optional parameter.") + " " + tr("Add the specified offset to all found ids. If this parameter is specified, then the specified offset will be added to all found ids. The offset can be any positive or negative integer."),
				examples: [
					{code: 1, description: tr("Add 1 to all found id")},
					{code: 5, description: tr("Add 5 to all found id")},
					{code: -1, description: tr("Subtract 1 from all found id")},
					{code: -5, description: tr("Subtract 5 from all found id")},
					{code: tr("Empty string"), description: tr("Don't add offset to found id")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "box",
			description: tr("Folder name"),
			default_selector: "string",
			variants: [
				{value: "INBOX", description: tr("Default folder incoming messages")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("The name of the folder in which this action will be performed, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
				examples: [
					{code: "INBOX", description: tr("Default folder incoming messages")},
					{code: "Spam", description: tr("Spam folder, on some mails")},
					{code: "Trash", description: tr("Trash folder, on some mails")},
					{code: tr("Empty string"), description: tr("Use the folder specified in the \"Configure receiving mail\" action")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#variable_constructor').html())({
		id: "Save",
		description: tr("Variable to save the result"),
		default_variable: "MAIL_ID_LIST",
		help: {
			description: tr("Variable in which, after successful execution of the action, the list of id of the found messages will be written."),
			examples: [
				{code: "[639]"},
				{code: "[145, 187, 422]"},
				{code: "[254, 356, 593, 694, 947]"},
				{code: tr("Empty list"), description: tr("Mail does not contain messages matching the specified criteria")}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Find and save the messages id by the specified criteria.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a list of id of the messages found by the specified criteria. If the mail does not contain messages matching the specified criteria, then the action will return an empty list.</div>
	<div class="tr tooltip-paragraph-fold">The received id can be used in other module actions, for example, to receive a message, set flags and delete.</div>
	<div class="tr tooltip-paragraph-fold">Using the parameters from the "Filtration" block, you can filter messages at your discretion or leave them unfiltered.</div>
	<div class="tr tooltip-paragraph-fold">In the "Sorting" block, you can set the order and field for sorting.</div>
	<div class="tr tooltip-paragraph-fold">Filtering and sorting is performed on the side of the mail server.</div>
	<div class="tr tooltip-paragraph-fold">Sorting is not supported by all mail services, if sorting is enabled, but the service does not support it, the action will fail.</div>
	<div class="tr tooltip-paragraph-fold">Filtering and sorting are only available when connecting via imap, if the action is called when connecting via pop3 and filtering or sorting is active, then the action will immediately fail.</div>
	<div class="tr tooltip-paragraph-fold">The resulting list can be processed using actions from the "List" module.</div>
	<div class="tr tooltip-paragraph-fold">This action can wait for an messages for the specified time if you activate the corresponding parameter in the additional settings.</div>
	<div class="tr tooltip-paragraph-fold">In the additional settings, you can specify the name of the folder in which this action will be performed, otherwise the folder specified in the "Configure receiving mail" action will be used.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>
</script><script type="text/template" id="InMail_GetMessage"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "uid",
		description: tr("Message id"),
		default_selector: "string",
		value_string: "",
		help: {
			description: tr("The id of the message which content need to be retrieved."),
			examples: [
				{code: 134},
				{code: 370},
				{code: 458}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Parsing", name: tr("Parsing"), description: tr("Using the parameters from this block, you can select which parts of the message will be fetched and in which variables will be saved.")}) %>
		
		<%= _.template($('#checkbox').html())({id: "getFrom", title: tr("Get sender of message"), help: {title: tr("Get sender of message"), description: tr("If enabled, then the sender of the message will be retrieved from the server and stored in the variable below."), examples: [{code: tr("Activated"), description: tr("Get message sender from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message sender from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveFrom",
			visible_if_checked: "getFrom",
			description: tr("Sender of message"),
			default_variable: "MAIL_SENDER",
			help: {
				description: tr("Variable in which, after successful execution of the action, the sender of the retrieved message will be written."),
				examples: [
					{code: "admin@site.com"},
					{code: "no-reply@example.com"},
					{code: "Test &lt;info@test.com&gt;"}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getTo", title: tr("Get recipient of message"), help: {title: tr("Get recipient of message"), description: tr("If enabled, then the recipient of the message will be retrieved from the server and stored in the variable below."), examples: [{code: tr("Activated"), description: tr("Get message recipient from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message recipient from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveTo",
			visible_if_checked: "getTo",
			description: tr("Recipient of message"),
			default_variable: "MAIL_RECIPIENT",
			help: {
				description: tr("Variable in which, after successful execution of the action, the recipient of the retrieved message will be written."),
				examples: [
					{code: "you@site.com"},
					{code: "name@example.com"},
					{code: "User &lt;user@test.com&gt;"}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getSubject", title: tr("Get message subject"), help: {title: tr("Get message subject"), description: tr("If enabled, then the subject of the message will be retrieved from the server and stored in the variable below."), examples: [{code: tr("Activated"), description: tr("Get message subject from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message subject from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveSubject",
			visible_if_checked: "getSubject",
			description: tr("Message subject"),
			default_variable: "MAIL_SUBJECT",
			help: {
				description: tr("Variable in which, after successful execution of the action, the subject of the retrieved message will be written."),
				examples: [
					{code: tr("Marketing")},
					{code: tr("Business proposal")},
					{code: tr("Email confirmation")}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getTextHtml", title: tr("Get body of message") + " (text/html)", checked: true, help: {title: tr("Get body of message") + " (text/html)", description: tr("If enabled, then the body of the message in html format (text/html) will be retrieved from the server and stored in the variable below.") + " " + tr("text/html is the MIME type of data represented in html format, html is the markup language for web pages.") + " " + tr("If the message does not contain a body with this type, then an empty string will be stored."), examples: [{code: tr("Activated"), description: tr("Get message body (text/html) from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message body (text/html) from server")}]}}) %>

		<span data-visible-if-checked="getTextHtml">
			<%= _.template($('#variable_constructor').html())({
				id: "saveTextHtml",
				description: tr("Body of message") + " (text/html)",
				default_variable: "MAIL_TEXT_HTML",
				help: {
					description: tr("Variable in which, after successful execution of the action, the body of the retrieved message in html format (text/html) will be written.") + " " + tr("text/html is the MIME type of data represented in html format, html is the markup language for web pages.") + " " + tr("If the message does not contain a body with this type, then an empty string will be stored."),
					examples: [
						{code: "<p style=\"margin-bottom:6px\">&lt;HTML&gt;&lt;BODY&gt;&lt;div&gt;" + tr("Use code 9779 to confirm") + "&lt;/div&gt;&lt;/BODY&gt;&lt;/HTML&gt;</p>"},
						{code: tr("Empty string"), description: tr("The message does not contain a body in html format")}
					]
				}
			}) %>

			<%= _.template($('#checkbox').html())({id: "getLinksTextHtml", title: tr("Parse links from body of message") + " (text/html)", help: {title: tr("Parse links from body of message") + " (text/html)", description: tr("If enabled, then all links will be extracted from the retrieved message body (text/html) and stored in the variable below.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."), examples: [{code: tr("Activated"), description: tr("Extract links from message body") + " (text/html)"}, {code: tr("Deactivated"), description: tr("Don't extract links from message body") + " (text/html)"}]}}) %>

			<%= _.template($('#variable_constructor').html())({
				id: "saveLinksTextHtml",
				visible_if_checked: "getLinksTextHtml",
				description: tr("Links from body of message") + " (text/html)",
				default_variable: "MAIL_TEXT_HTML_LINKS_LIST",
				help: {
					description: tr("Variable in which, after successful execution of the action, the list of links from the body of the message (text/html) will be written.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."),
					examples: [
						{code: "[\"https://marketplace.biz/section_3/product_213234.php\"]"},
						{code: "[\"http://test.com\", \"example.org\"]"},
						{code: "[\"http://www.ad.by\", \"www.feedback.io\", \"https://support.co/new/ticket.php\"]"}
					]
				}
			}) %>
		</span>


		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getTextPlain", checked:true, title: tr("Get body of message") + " (text/plain)", help: {title: tr("Get body of message") + " (text/plain)", description: tr("If enabled, then the body of the message in text format (text/plain) will be retrieved from the server and stored in the variable below.") + " " + tr("text/plain is a MIME type that is the base type for text files.") + " " + tr("If the message does not contain a body with this type, then an empty string will be stored."), examples: [{code: tr("Activated"), description: tr("Get message body (text/plain) from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message body (text/plain) from server")}]}}) %>

		<span data-visible-if-checked="getTextPlain">
			<%= _.template($('#variable_constructor').html())({
				id: "saveTextPlain",
				description: tr("Body of message") + " (text/plain)",
				default_variable: "MAIL_TEXT_PLAIN",
				help: {
					description: tr("Variable in which, after successful execution of the action, the body of the retrieved message in text format (text/plain) will be written.") + " " + tr("text/plain is a MIME type that is the base type for text files.") + " " + tr("If the message does not contain a body with this type, then an empty string will be stored."),
					examples: [
						{code: "<p style=\"margin-bottom:6px\">" + tr("Use code 9779 to confirm") + "</p>"},
						{code: tr("Empty string"), description: tr("The message does not contain a body in text format")}
					]
				}
			}) %>

			<%= _.template($('#checkbox').html())({id: "getLinksTextPlain", title: tr("Parse links from body of message") + " (text/plain)", help: {title: tr("Parse links from body of message") + " (text/plain)", description: tr("If enabled, then all links will be extracted from the retrieved message body (text/plain) and stored in the variable below.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."), examples: [{code: tr("Activated"), description: tr("Extract links from message body") + " (text/plain)"}, {code: tr("Deactivated"), description: tr("Don't extract links from message body") + " (text/plain)"}]}}) %>

			<%= _.template($('#variable_constructor').html())({
				id: "saveLinksTextPlain",
				visible_if_checked: "getLinksTextPlain",
				description: tr("Links from body of message") + " (text/plain)",
				default_variable: "MAIL_TEXT_PLAIN_LINKS_LIST",
				help: {
					description: tr("Variable in which, after successful execution of the action, the list of links from the body of the message (text/plain) will be written.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."),
					examples: [
						{code: "[\"https://marketplace.biz/section_3/product_213234.php\"]"},
						{code: "[\"http://test.com\", \"example.org\"]"},
						{code: "[\"http://www.ad.by\", \"www.feedback.io\", \"https://support.co/new/ticket.php\"]"}
					]
				}
			}) %>


		</span>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getTextRaw", title: tr("Get body of message") + " (raw)", help: {title: tr("Get body of message") + " (raw)", description: tr("If enabled, then the body of the message in raw form (raw) will be retrieved from the server and stored in the variable below.") + " " + tr("raw - this means that the body of the message will be retrieved in its raw form, without any processing."), examples: [{code: tr("Activated"), description: tr("Get message body (raw) from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message body (raw) from server")}]}}) %>

		<span data-visible-if-checked="getTextRaw">
			<%= _.template($('#variable_constructor').html())({
				id: "saveTextRaw",
				description: tr("Body of message") + " (raw)",
				default_variable: "MAIL_TEXT_RAW",
				help: {
					description: tr("Variable in which, after successful execution of the action, the body of the retrieved message in raw form (raw) will be written.") + " " + tr("raw - this means that the body of the message will be retrieved in its raw form, without any processing."),
					examples: [
						{code: "----ALT--d449E7c1653598173380270778C1f6B21643480035<br/>Content-Type: text/plain; charset=utf-8<br/>Content-Transfer-Encoding: base64<p style=\"margin-top:6px;margin-bottom:6px\">ClVzZSBjb2RlIDk3NzkgdG8gY29uZmlybQrCoArCoA==</p><p style=\"margin-bottom:6px\">----ALT--d449E7c1653598173380270778C1f6B21643480035</p>"},
						{code: tr("Empty string"), description: tr("The message does not contain a body")}
					]
				}
			}) %>
			<%= _.template($('#checkbox').html())({id: "getLinksTextRaw", title: tr("Parse links from body of message") + " (raw)", help: {title: tr("Parse links from body of message") + " (raw)", description: tr("If enabled, then all links will be extracted from the retrieved message body (raw) and stored in the variable below.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."), examples: [{code: tr("Activated"), description: tr("Extract links from message body") + " (raw)"}, {code: tr("Deactivated"), description: tr("Don't extract links from message body") + " (raw)"}]}}) %>

			<%= _.template($('#variable_constructor').html())({
				id: "saveLinksTextRaw",
				visible_if_checked: "getLinksTextRaw",
				description: tr("Links from body of message") + " (raw)",
				default_variable: "MAIL_TEXT_RAW_LINKS_LIST",
				help: {
					description: tr("Variable in which, after successful execution of the action, the list of links from the body of the message (raw) will be written.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."),
					examples: [
						{code: "[\"https://marketplace.biz/section_3/product_213234.php\"]"},
						{code: "[\"http://test.com\", \"example.org\"]"},
						{code: "[\"http://www.ad.by\", \"www.feedback.io\", \"https://support.co/new/ticket.php\"]"}
					]
				}
			}) %>
		</span>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getSize", title: tr("Get message size"), help: {title: tr("Get message size"), description: tr("If enabled, then the size of the message will be retrieved from the server and stored in the variable below.") + " " + tr("The size of the message will be retrieved in octets, one octet is equal to 8 bits."), examples: [{code: tr("Activated"), description: tr("Get message size from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message size from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveSize",
			visible_if_checked: "getSize",
			description: tr("Message size"),
			default_variable: "MAIL_SIZE",
			help: {
				description: tr("Variable in which, after successful execution of the action, the size of the retrieved message will be written.") + " " + tr("The size of the message will be retrieved in octets, one octet is equal to 8 bits."),
				examples: [
					{code: 175},
					{code: 2345},
					{code: 11546}
				]
			}
		}) %>


		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getFlags", title: tr("Get flags of message"), help: {title: tr("Get flags of message"), description: tr("If enabled, then the list of message flags will be retrieved from the server and stored in the variable below.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."), examples: [{code: tr("Activated"), description: tr("Get message flags from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message flags from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveFlags",
			visible_if_checked: "getFlags",
			description: tr("Flags of message"),
			default_variable: "MAIL_FLAGS_LIST",
			help: {
				description: tr("Variable in which, after successful execution of the action, the list of flags of the retrieved message will be written.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."),
				examples: [
					{code: "[\"\\Seen\"]"},
					{code: "[\"\\Seen\", \"\\Flagged\"]"},
					{code: "[\"\\Seen\", \"\\Answered\", \"\\Deleted\"]"}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getDate", title: tr("Get receiving date"), help: {title: tr("Get receiving date"), description: tr("If enabled, then the date of the message will be retrieved from the server and stored in the variable below.") + " " + tr("The resulting date can be processed using actions from the \"Date and time\" module."), examples: [{code: tr("Activated"), description: tr("Get message date from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message date from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveDate",
			visible_if_checked: "getDate",
			description: tr("Receiving date"),
			default_variable: "MAIL_DATE",
			help: {
				description: tr("Variable in which, after successful execution of the action, the date of the retrieved message will be written.") + " " + tr("The resulting date can be processed using actions from the \"Date and time\" module."),
				examples: [
					{code: new Date('May 13 2021')},
					{code: new Date('Jan 20 2022 16:57:26')},
					{code: new Date()}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>
		<%= _.template($('#checkbox').html())({id: "getAttachNames", title: tr("Get list of attached file names"), help: {title: tr("Get list of attached file names"), description: tr("If enabled, then the list of filenames attached to the message will be retrieved from the server and stored in the variable below.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."), examples: [{code: tr("Activated"), description: tr("Get list of file attachment names of the message from server and save")}, {code: tr("Deactivated"), description: tr("Don't get list of file attachment names of the message from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveAttachnames",
			visible_if_checked: "getAttachNames",
			description: tr("Attachment names"),
			default_variable: "MAIL_ATTACHMENT_NAMES_LIST",
			help: {
				description: tr("Variable in which, after successful execution of the action, the list of filenames attached to the retrieved message will be written.") + " " + tr("The resulting list can be processed using actions from the \"List\" module."),
				examples: [
					{code: "[\"photo.png\"]"},
					{code: "[\"document.pdf\", \"text.txt\"]"},
					{code: "[\"index.html\", \"script.js\", \"icon.ico\"]"}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getAttachments", title: tr("Save attached files"), help: {title: tr("Save attached files"), description: tr("If enabled, then the attachments of the message will be retrieved from the server and saved to the computer as files with a random name, a list of objects with information about attachments will be written to the variable specified below the mask.") + " " + tr("The resulting list can be processed using actions from the \"JSON\" module.") + " " + tr("You can choose which attachments will be saved by specifying the filename mask in the parameter below."), examples: [{code: tr("Activated"), description: tr("Get message attachments from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message attachments from server")}]}}) %>

		<%= _.template($('#input_constructor').html())({
			id: "attachmentsMask",
			visible_if_checked: "getAttachments",
			description: tr("File name mask"),
			default_selector: "string",
			disable_int: true,
			value_string: "*",
			help: {
				description: tr("The file name mask by which attachments will be filtered. Only files whose names match the mask will be retrieved and saved. In the mask, the character <code>*</code> is perceived as a sequence of any characters, and the character <code>?</code> treated as one any character. If the mask begins with the character <code>!</code>, then all attachments whose names do not match this mask will be retrieved and saved.") + " " + tr("You can specify several masks by separating them with the character <code>;</code>, the filtering results of all specified masks will be combined."),
				examples: [
					{code: tr("*.js"), description: tr("All JavaScript files")},
					{code: tr("*.txt"), description: tr("All text files")},
					{code: tr("!*.txt"), description: tr("All files except text")},
					{code: tr("*.js;*.txt"), description: tr("All JavaScript and all text files")},
					{code: tr("*"), description: tr("All files")}
				]
			}
		}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveAttachments",
			visible_if_checked: "getAttachments",
			description: tr("Attachments"),
			default_variable: "MAIL_ATTACHMENTS_LIST",
			help: {
				description: tr("Variable in which, after successful execution of the action, the list of objects containing information about the saved attachments of the message will be written.") + " " + tr("The resulting list can be processed using actions from the \"JSON\" module.") + " " + tr("The \"name\" property of the object will contain the original file name, the \"path\" property will contain the path to the saved file, and the \"type\" property will contain the mime type of the file. Having obtained the path to the file and its original name from the object, you can rename it using the \"Move file/folder\" action from the \"Filesystem\" module."),
				examples: [
					{code: "[{<br/>name: \"photo.png\",<br/>path: \"1VVDZIew0K.file\",<br/>type: \"image/png\"<br/>}, {<br/>name: \"document.pdf\",<br/>path: \"D0rThm7KHp.file\",<br/>type: \"application/pdf\"<br/>}, {<br/>name: \"text.txt\",<br/>path: \"uBhN59Tokt.file\",<br/>type: \"text/plain\"<br/>}]"}
				]
			}
		}) %>
		

		<%= _.template($('#line').html())() %>

		<%= _.template($('#checkbox').html())({id: "getRawHeader", title: tr("Get technical headers of message"), help: {title: tr("Get technical headers of message"), description: tr("If enabled, then all the headers of message will be retrieved from the server and stored in the variable below as an object.") + " " + tr("The resulting object can be processed using actions from the \"JSON\" module."), examples: [{code: tr("Activated"), description: tr("Get message technical headers from server and save")}, {code: tr("Deactivated"), description: tr("Don't get message technical headers from server")}]}}) %>
		<%= _.template($('#variable_constructor').html())({
			id: "saveRawHeader",
			visible_if_checked: "getRawHeader",
			description: tr("Technical headers of message"),
			default_variable: "MAIL_RAW_HEADERS",
			help: {
				description: tr("Variable in which, after successful execution of the action, an object with all the headers of the retrieved message will be written.") + " " + tr("The resulting object can be processed using actions from the \"JSON\" module.") + " " + tr("The headers are stored as an object where the key is the header name and the value is the header value, the header value can be a string or a list of strings."),
				examples: [
					{code: "{<br/>content-type: \"multipart/alternative\",<br/>date: \"Thu, 18 Jun 2020 11:26:19 +0000 (UTC)\",<br/>delivered-to: \"you@site.com\",<br/>mime-version: \"1.0\",<br/>message-id: \"5eeb4f5be870.6c531352947a@example.com\",<br/>x-info: \"info\"<br/>...<br/>}"}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#checkbox').html())({id: "delAfter", title: tr("Delete message after receiving"), help: {title: tr("Delete message after receiving"), description: tr("Optional parameter.") + " " + tr("If activated, after successfully receiving the message will be deleted from the mailbox. When this parameter is enabled, the \"Set flags after receiving\" parameter is ignored."), examples: [{code: tr("Activated"), description: tr("Delete message after receiving")}, {code: tr("Deactivated"), description: tr("Don't delete message after receiving")}]}}) %>

		<%= _.template($('#checkbox').html())({id: "setFlagsAfter", title: tr("Set flags after receiving"), help: {title: tr("Set flags after receiving"), description: tr("Optional parameter.") + " " + tr("If activated, after successfully receiving the message, one or more of the specified flags will be set for it. This parameter is ignored if the \"Delete message after receiving\" parameter is enabled."), examples: [{code: tr("Activated"), description: tr("Set message flags after receiving")}, {code: tr("Deactivated"), description: tr("Don't set message flags after receiving")}]}}) %>

			<%= _.template($('#input_constructor').html())({
				id: "setFlags",
				visible_if_checked: "setFlagsAfter",
				description: tr("Flags"),
				default_selector: "string",
				variants: [
					{value: "\\Seen", description: tr("Message has been read")},
					{value: "\\Answered", description: tr("Message has been answered")},
					{value: "\\Flagged", description: tr("Message is \"flagged\" for urgent/special attention")},
					{value: "\\Deleted", description: tr("Message is marked for removal")},
					{value: "\\Draft", description: tr("Message has not completed composition (marked as a draft)")}
				],
				disable_int: true,
				value_string: "",
				help: {
					description: tr("List or one flag which needs to set for the message.") + " " + tr("As a list, you can use a string consisting of flags, separated by commas.") + " " + tr("The possible flags may differ depending on the server implementation.") + "<br/><strong>\\Seen</strong> - " + tr("Message has been read") + "<br/><strong>\\Answered</strong> - " + tr("Message has been answered") + "<br/><strong>\\Flagged</strong> - " + tr("Message is \"flagged\" for urgent/special attention") + "<br/><strong>\\Deleted</strong> - " + tr("Message is marked for removal") + "<br/><strong>\\Draft</strong> - " + tr("Message has not completed composition (marked as a draft)"),
					examples: [
						{code: "\\Seen,\\Flagged"},
						{code: "\\Seen, \\Flagged"},
						{code: "[\"\\Seen\", \"\\Flagged\"]"}
					]
				}
			}) %>


		<%= _.template($('#input_constructor').html())({
			id: "box",
			description: tr("Folder name"),
			default_selector: "string",
			variants: [
				{value: "INBOX", description: tr("Default folder incoming messages")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("The name of the folder in which this action will be performed, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
				examples: [
					{code: "INBOX", description: tr("Default folder incoming messages")},
					{code: "Spam", description: tr("Spam folder, on some mails")},
					{code: "Trash", description: tr("Trash folder, on some mails")},
					{code: tr("Empty string"), description: tr("Use the folder specified in the \"Configure receiving mail\" action")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get the content of the message with the specified id.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will get the message by id and save its parts to the specified variables.</div>
	<div class="tr tooltip-paragraph-fold">Using the parameters from the "Parsing" block, you can choose which parts of the message will be retrieved and saved, and which ones will be skipped, thereby saving traffic and time by getting only what you need.</div>
	<div class="tr tooltip-paragraph-fold">To perform this action, you need to get the id of the message, you can do this using the actions "Find id of the last message", "Find id of one message by criteria".</div>
	<div class="tr tooltip-paragraph-fold">This action can delete the message or set flags for it, after successful receipt, for this you need to use the corresponding parameters in the additional settings.</div>
	<div class="tr tooltip-paragraph-fold">In the additional settings, you can specify the name of the folder in which this action will be performed, otherwise the folder specified in the "Configure receiving mail" action will be used.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>
</script><script type="text/template" id="InMail_Count"><div class="container-fluid">
	<%= _.template($('#block_start').html())({id:"Filtration", name: tr("Filtration"), description: tr("Using the parameters from this block, you can filter the results as you need, or leave them without filtering. You can combine the parameters of this block in any order, the specified parameters will be taken into account when filtering, and those not specified will be ignored.")}) %>
		<%= _.template($('#description').html())({name:tr("Sender of message"), help: {title: tr("Sender of message"), description: tr("Sender of message, \"From\" field") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "admin@site.com"}, {code: "no-reply@example.com"}, {code: "Test &lt;info@test.com&gt;"}]}}) %>

		
		<%= _.template($('#input_constructor').html())({
			id: "from",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message sender address") + ", " + tr("that the searched message should contain") + ".",
				examples:[
					{code: "@twitter.com"},
					{code: "info@twitter.com"},
					{code: tr("Empty string"), description: tr("Don't filter by content in sender")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notFrom",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message sender address") + ", " + tr("that the searched message should not contain") + ".",
				examples:[
					{code: "@twitter.com"},
					{code: "info@twitter.com"},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in sender")}
				]
			}
		}) %>

		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Recipient of message"), help: {title: tr("Recipient of message"), description: tr("Recipient of message, \"To\" field") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "you@site.com"}, {code: "name@example.com"}, {code: "User &lt;user@test.com&gt;"}]}}) %>

		<%= _.template($('#input_constructor').html())({
			id: "to",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message recipient address") + ", " + tr("that the searched message should contain") + ".",
				examples: [
					{code: "you@site.com"},
					{code: "test@yourdomain.com"},
					{code: tr("Empty string"), description: tr("Don't filter by content in recipient")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notTo",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message recipient address") + ", " + tr("that the searched message should not contain") + ".",
				examples: [
					{code: "you@site.com"},
					{code: "test@yourdomain.com"},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in recipient")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Message subject"), help: {title: tr("Message subject"), description: tr("Message subject, \"Subject\" field") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: tr("Marketing")}, {code: tr("Business proposal")}, {code: tr("Email confirmation")}]}}) %>
		
		<%= _.template($('#input_constructor').html())({
			id: "subject",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("Part of the message subject") + ", " + tr("that the searched message should contain") + ".",
				examples: [
					{code: tr("Business proposal")},
					{code: tr("Email confirmation")},
					{code: tr("Empty string"), description: tr("Don't filter by content in subject")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notSubject",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("Part of the message subject") + ", " + tr("that the searched message should not contain") + ".",
				examples: [
					{code: tr("Business proposal")},
					{code: tr("Email confirmation")},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in subject")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Text of message"), help: {title: tr("Text of message"), description: tr("Text of message") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "&lt;HTML&gt;&lt;BODY&gt;&lt;div&gt;" + tr("Use code 9779 to confirm") + "&lt;/div&gt;&lt;/BODY&gt;&lt;/HTML&gt;"}, {code: tr("Use code 9779 to confirm")}]}}) %>
		<%= _.template($('#input_constructor').html())({
			id: "text",
			description: tr("Contains"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message text") + ", " + tr("that the searched message should contain") + ".",
				examples: [
					{code: "Hello"},
					{code: "CODE:"},
					{code: tr("Empty string"), description: tr("Don't filter by content in text")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notText",
			description: tr("Does not contain"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Part of the message text") + ", " + tr("that the searched message should not contain") + ".",
				examples: [
					{code: "Hello"},
					{code: "CODE:"},
					{code: tr("Empty string"), description: tr("Don't filter by \"Does not contain\" field in text")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Flags of message"), help: {title: tr("Flags of message"), description: tr("Flags of message") + ", " + tr("using the two parameters below, you can make filter by the contents of this field."), examples: [{code: "unseen"}, {code: "flagged,recent,unseen"}]}}) %>

		<%= _.template($('#input_constructor').html())({
			id: "flags",
			description: tr("Contains"),
			default_selector: "string",
			variants: [
				{value: "\\Seen", description: tr("Message has been read")},
				{value: "\\Answered", description: tr("Message has been answered")},
				{value: "\\Flagged", description: tr("Message is \"flagged\" for urgent/special attention")},
				{value: "\\Deleted", description: tr("Message is marked for removal")},
				{value: "\\Draft", description: tr("Message has not completed composition (marked as a draft)")}
			],
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("List of flags that the searched message should contain.") + " " + tr("As a list, you can use a string consisting of flags, separated by commas."),
				examples: [
					{code: "unseen"},
					{code: "flagged,recent,unseen"},
					{code: "flagged, recent, unseen"},
					{code: "[\"flagged\", \"recent\", \"unseen\"]"},
					{code: tr("Empty string"), description: tr("Do not filter by the presence of flags")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "notFlags",
			description: tr("Does not contain"),
			default_selector: "string",
			variants: [
				{value: "\\Seen", description: tr("Message has been read")},
				{value: "\\Answered", description: tr("Message has been answered")},
				{value: "\\Flagged", description: tr("Message is \"flagged\" for urgent/special attention")},
				{value: "\\Deleted", description: tr("Message is marked for removal")},
				{value: "\\Draft", description: tr("Message has not completed composition (marked as a draft)")}
			],
			disable_int: true,
			value_string: "",
			help:{
				description: tr("Optional parameter.") + " " + tr("List of flags that the searched message should not contain.") + " " + tr("As a list, you can use a string consisting of flags, separated by commas."),
				examples: [
					{code: "unseen"},
					{code: "flagged,recent,unseen"},
					{code: "flagged, recent, unseen"},
					{code: "[\"flagged\", \"recent\", \"unseen\"]"},
					{code: tr("Empty string"), description: tr("Do not filter by missing flags")}
				]
			}
		}) %>
		<%= _.template($('#line').html())() %>

		<%= _.template($('#description').html())({name:tr("Receiving date"), help: {title: tr("Receiving date"), description: tr("Internal date of the message (disregarding time and timezone)") + ", " + tr("using the two parameters below, you can make filter by the contents of this field.") + " " + tr("Date can be created using actions from the \"Date and time\" module."), examples: [{code: '9/14/2003'}, {code: 'May 13 2021'}, {code: '1622214946346'}, {code: new Date('Jan 20 2022 16:57:26')}, {code: new Date()}]}}) %>
		
		<%= _.template($('#input_constructor').html())({
			id: "since",
			description: tr("From date"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Message received is within or later than the specified date.") + " " + tr("This field must contain a date or a string that can be converted to a date.") + " " + tr("Date can be created using actions from the \"Date and time\" module."),
				examples: [
					{code: '9/14/2003'},
					{code: 'May 13 2021'},
					{code: '1622214946346'},
					{code: new Date('Jan 20 2022 16:57:26')},
					{code: new Date()}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "before",
			description: tr("To date"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Message received is earlier than the specified date.") + " " + tr("This field must contain a date or a string that can be converted to a date.") + " " + tr("Date can be created using actions from the \"Date and time\" module."),
				examples: [
					{code: '9/14/2003'},
					{code: 'May 13 2021'},
					{code: '1622214946346'},
					{code: new Date('Jan 20 2022 16:57:26')},
					{code: new Date()}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#input_constructor').html())({
			id: "box",
			description: tr("Folder name"),
			default_selector: "string",
			variants: [
				{value: "INBOX", description: tr("Default folder incoming messages")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("The name of the folder in which this action will be performed, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
				examples: [
					{code: "INBOX", description: tr("Default folder incoming messages")},
					{code: "Spam", description: tr("Spam folder, on some mails")},
					{code: "Trash", description: tr("Trash folder, on some mails")},
					{code: tr("Empty string"), description: tr("Use the folder specified in the \"Configure receiving mail\" action")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#variable_constructor').html())({
		id: "Save",
		description: tr("Variable to save the result"),
		default_variable: "MAIL_COUNT",
		help: {
			description: tr("Variable in which, after successful execution of the action, the number of messages will be written."),
			examples: [
				{code: 2},
				{code: 13},
				{code: 256}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get the number of messages that match the specified criteria.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will return the number of messages matching the specified filtering criteria, or the count of all messages if no filtering criteria is specified.</div>
	<div class="tr tooltip-paragraph-fold">Using the parameters from the "Filtration" block, you can filter messages at your discretion or leave them unfiltered.</div>
	<div class="tr tooltip-paragraph-fold">Filtering is performed on the server side.</div>
	<div class="tr tooltip-paragraph-fold">Filtering is available only when connecting via imap, if the action is called when connecting via pop3 and filtering is active, then the action will immediately fail.</div>
	<div class="tr tooltip-paragraph-fold">In the additional settings, you can specify the name of the folder in which this action will be performed, otherwise the folder specified in the "Configure receiving mail" action will be used.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>
</script><script type="text/template" id="InMail_DelMessages"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "uids",
		description: tr("Message id"),
		default_selector: "string",
		value_string: "",
		help: {
			description: tr("The id of the message which need to be deleted from the mailbox. If a list is specified instead of one message id, then all messages from the specified list will be deleted") + ", " + tr("as a list, you can use a string consisting of id, separated by commas."),
			examples: [
				{code: 134},
				{code: "263,339"},
				{code: "145, 187, 422"},
				{code: "[254, 356, 593, 694, 947]"}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#input_constructor').html())({
			id: "box",
			description: tr("Folder name"),
			default_selector: "string",
			variants: [
				{value: "INBOX", description: tr("Default folder incoming messages")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("The name of the folder in which this action will be performed, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
				examples: [
					{code: "INBOX", description: tr("Default folder incoming messages")},
					{code: "Spam", description: tr("Spam folder, on some mails")},
					{code: "Trash", description: tr("Trash folder, on some mails")},
					{code: tr("Empty string"), description: tr("Use the folder specified in the \"Configure receiving mail\" action")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Delete the specified message.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action completely and permanently removes the specified message from the mailbox.</div>
	<div class="tr tooltip-paragraph-fold">To perform this action, you need to get the id of the message, you can do this using the actions "Find id of the last message", "Find id of one message by criteria".</div>
	<div class="tooltip-paragraph-fold"><span class="tr">This action can delete several messages at once</span>, <span class="tr">for this, instead of one id, a list of id must be specified</span>, <span class="tr">as a list, you can use a string consisting of id, separated by commas.</span></div>
	<div class="tr tooltip-paragraph-fold">You can get a list of message ids using the "Find id of multiple messages by criteria" action.</div>
	<div class="tr tooltip-paragraph-fold">In the additional settings, you can specify the name of the folder in which this action will be performed, otherwise the folder specified in the "Configure receiving mail" action will be used.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %></script><script type="text/template" id="InMail_CopyMessages"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "uids",
		description: tr("Message id"),
		default_selector: "string",
		value_string: "",
		help: {
			description: tr("The id of the message which need to be copied from one mailbox folder to another. If a list is specified instead of one message id, then all messages from the specified list will be copied") + ", " + tr("as a list, you can use a string consisting of id, separated by commas."),
			examples: [
				{code: 134},
				{code: "263,339"},
				{code: "145, 187, 422"},
				{code: "[254, 356, 593, 694, 947]"}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "toBox",
		description: tr("To folder"),
		default_selector: "string",
		variants: [
			{value: "INBOX", description: tr("Default folder incoming messages")}
		],
		disable_int: true,
		value_string: "",
		help: {
			description: tr("The name of the folder where the message or several messages will be copied."),
			examples: [
				{code: "INBOX", description: tr("Default folder incoming messages")},
				{code: "Spam", description: tr("Spam folder, on some mails")},
				{code: "Trash", description: tr("Trash folder, on some mails")}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#input_constructor').html())({
			id: "box",
			description: tr("From folder"),
			default_selector: "string",
			variants: [
				{value: "INBOX", description: tr("Default folder incoming messages")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("The name of the folder from which the message will be copied, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
				examples: [
					{code: "INBOX", description: tr("Default folder incoming messages")},
					{code: "Spam", description: tr("Spam folder, on some mails")},
					{code: "Trash", description: tr("Trash folder, on some mails")},
					{code: tr("Empty string"), description: tr("Use the folder specified in the \"Configure receiving mail\" action")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Copy the specified message from one mailbox folder to another.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will copy the message from one mailbox folder to another. The copy of the message will have a different id.</div>
	<div class="tr tooltip-paragraph-fold">This action is only available when connecting via imap, if the action is called when connecting via pop3, it will immediately fail.</div>
	<div class="tr tooltip-paragraph-fold">In the additional settings, you can specify the name of the folder from which the message will be copied, otherwise the folder specified in the "Configure receiving mail" action will be used.</div>
	<div class="tr tooltip-paragraph-fold">To perform this action, you need to get the id of the message, you can do this using the actions "Find id of the last message", "Find id of one message by criteria".</div>
	<div class="tooltip-paragraph-fold"><span class="tr">This action can copy several messages at once</span>, <span class="tr">for this, instead of one id, a list of id must be specified</span>, <span class="tr">as a list, you can use a string consisting of id, separated by commas.</span></div>
	<div class="tr tooltip-paragraph-fold">You can get a list of message ids using the "Find id of multiple messages by criteria" action.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %></script><script type="text/template" id="InMail_MoveMessages"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "uids",
		description: tr("Message id"),
		default_selector: "string",
		value_string: "",
		help: {
			description: tr("The id of the message which need to be moved from one mailbox folder to another. If a list is specified instead of one message id, then all messages from the specified list will be moved") + ", " + tr("as a list, you can use a string consisting of id, separated by commas."),
			examples: [
				{code: 134},
				{code: "263,339"},
				{code: "145, 187, 422"},
				{code: "[254, 356, 593, 694, 947]"}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "toBox",
		description: tr("To folder"),
		default_selector: "string",
		variants: [
			{value: "INBOX", description: tr("Default folder incoming messages")}
		],
		disable_int: true,
		value_string: "",
		help: {
			description: tr("The name of the folder where the message or several messages will be moved."),
			examples: [
				{code: "INBOX", description: tr("Default folder incoming messages")},
				{code: "Spam", description: tr("Spam folder, on some mails")},
				{code: "Trash", description: tr("Trash folder, on some mails")}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#input_constructor').html())({
			id: "box",
			description: tr("From folder"),
			default_selector: "string",
			variants: [
				{value: "INBOX", description: tr("Default folder incoming messages")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("The name of the folder from which the message will be moved, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
				examples: [
					{code: "INBOX", description: tr("Default folder incoming messages")},
					{code: "Spam", description: tr("Spam folder, on some mails")},
					{code: "Trash", description: tr("Trash folder, on some mails")},
					{code: tr("Empty string"), description: tr("Use the folder specified in the \"Configure receiving mail\" action")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Move the specified message from one mailbox folder to another.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will move the message from one mailbox folder to another. After the move, the message will have a new id, and you will not be able to work with it using the same id.</div>
	<div class="tr tooltip-paragraph-fold">This action is only available when connecting via imap, if the action is called when connecting via pop3, it will immediately fail.</div>
	<div class="tr tooltip-paragraph-fold">In the additional settings, you can specify the name of the folder from which the message will be moved, otherwise the folder specified in the "Configure receiving mail" action will be used.</div>
	<div class="tr tooltip-paragraph-fold">To perform this action, you need to get the id of the message, you can do this using the actions "Find id of the last message", "Find id of one message by criteria".</div>
	<div class="tooltip-paragraph-fold"><span class="tr">This action can move several messages at once</span>, <span class="tr">for this, instead of one id, a list of id must be specified</span>, <span class="tr">as a list, you can use a string consisting of id, separated by commas.</span></div>
	<div class="tr tooltip-paragraph-fold">You can get a list of message ids using the "Find id of multiple messages by criteria" action.</div>
	<div class="tr tooltip-paragraph-fold">Moving messages is not supported by all mail services, if the service does not support moving, then the action will fail.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %></script><script type="text/template" id="InMail_GetFlags"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "uid",
		description: tr("Message id"),
		default_selector: "string",
		value_string: "",
		help: {
			description: tr("The id of the message which flags needs to be retrieved."),
			examples: [
				{code: 134},
				{code: 370},
				{code: 458}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#input_constructor').html())({
			id: "box",
			description: tr("Folder name"),
			default_selector: "string",
			variants: [
				{value: "INBOX", description: tr("Default folder incoming messages")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("The name of the folder in which this action will be performed, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
				examples: [
					{code: "INBOX", description: tr("Default folder incoming messages")},
					{code: "Spam", description: tr("Spam folder, on some mails")},
					{code: "Trash", description: tr("Trash folder, on some mails")},
					{code: tr("Empty string"), description: tr("Use the folder specified in the \"Configure receiving mail\" action")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#variable_constructor').html())({
		id: "Save",
		description: tr("Variable to save the result"),
		default_variable: "MAIL_FLAGS_LIST",
		help: {
			description: tr("Variable in which, after successful execution of the action, the list of flags will be written.") + " " + tr("The possible flags may differ depending on the server implementation."),
			examples: [
				{code: "[\"\\Seen\"]"},
				{code: "[\"\\Seen\", \"\\Flagged\"]"},
				{code: "[\"\\Seen\", \"\\Answered\", \"\\Deleted\"]"}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get a list of flags for the specified message.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a list of flags set for the specified message.</div>
	<div class="tr tooltip-paragraph-fold">This action is only available when connecting via imap, if the action is called when connecting via pop3, it will immediately fail.</div>
	<div class="tr tooltip-paragraph-fold">The resulting list can be processed using actions from the "List" module.</div>
	<div class="tr tooltip-paragraph-fold">Flags are system message tags starting with <code>\</code>. Possible flags:</div>
	<div class="tooltip-paragraph-fold"><code>\Seen</code> - <span class="tr">Message has been read</span>.</div>
	<div class="tooltip-paragraph-fold"><code>\Answered</code> - <span class="tr">Message has been answered</span>.</div>
	<div class="tooltip-paragraph-fold"><code>\Flagged</code> - <span class="tr">Message is "flagged" for urgent/special attention</span>.</div>
	<div class="tooltip-paragraph-fold"><code>\Deleted</code> - <span class="tr">Message is marked for removal</span>.</div>
	<div class="tooltip-paragraph-fold"><code>\Draft</code> - <span class="tr">Message has not completed composition (marked as a draft)</span>.</div>
	<div class="tr tooltip-paragraph-fold">The possible flags may differ depending on the server implementation.</div>
	<div class="tr tooltip-paragraph-fold">To perform this action, you need to get the id of the message, you can do this using the actions "Find id of the last message", "Find id of one message by criteria".</div>
	<div class="tr tooltip-paragraph-fold">You can set message flags using the "Set message flags by id" action.</div>
	<div class="tr tooltip-paragraph-fold">You can remove message flags using the "Remove message flags by id" action.</div>
	<div class="tr tooltip-paragraph-fold">In the additional settings, you can specify the name of the folder in which this action will be performed, otherwise the folder specified in the "Configure receiving mail" action will be used.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>
</script><script type="text/template" id="InMail_SetFlags"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "uids",
		description: tr("Message id"),
		default_selector: "string",
		value_string: "",
		help: {
			description: tr("The id of the message for which need to set the flags. If a list is specified instead of one message id, then flags will be set for all messages from the specified list") + ", " + tr("as a list, you can use a string consisting of id, separated by commas."),
			examples: [
				{code: 134},
				{code: "263,339"},
				{code: "145, 187, 422"},
				{code: "[254, 356, 593, 694, 947]"}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "flags",
		description: tr("Flags"),
		default_selector: "string",
		variants: [
			{value: "\\Seen", description: tr("Message has been read")},
			{value: "\\Answered", description: tr("Message has been answered")},
			{value: "\\Flagged", description: tr("Message is \"flagged\" for urgent/special attention")},
			{value: "\\Deleted", description: tr("Message is marked for removal")},
			{value: "\\Draft", description: tr("Message has not completed composition (marked as a draft)")}
		],
		disable_int: true,
		value_string: "",
		help: {
			description: tr("List or one flag which needs to set for the message.") + " " + tr("As a list, you can use a string consisting of flags, separated by commas.") + " " + tr("The possible flags may differ depending on the server implementation.") + "<br/><strong>\\Seen</strong> - " + tr("Message has been read") + "<br/><strong>\\Answered</strong> - " + tr("Message has been answered") + "<br/><strong>\\Flagged</strong> - " + tr("Message is \"flagged\" for urgent/special attention") + "<br/><strong>\\Deleted</strong> - " + tr("Message is marked for removal") + "<br/><strong>\\Draft</strong> - " + tr("Message has not completed composition (marked as a draft)"),
			examples: [
				{code: "\\Seen,\\Flagged"},
				{code: "\\Seen, \\Flagged"},
				{code: "[\"\\Seen\", \"\\Flagged\"]"}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#checkbox').html())({id: "add", title: tr("Add flags to existing ones"), help: {title: tr("Add flags to existing ones"), description: tr("Optional parameter.") + " " + tr("If enabled, the specified flags will be added to the existing flags, rather than replacing them."), examples: [{code: tr("Activated"), description: tr("Add the specified flags to existing ones")}, {code: tr("Deactivated"), description: tr("Replace existing flags with the specified ones")}]}}) %>

		<%= _.template($('#input_constructor').html())({
			id: "box",
			description: tr("Folder name"),
			default_selector: "string",
			variants: [
				{value: "INBOX", description: tr("Default folder incoming messages")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("The name of the folder in which this action will be performed, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
				examples: [
					{code: "INBOX", description: tr("Default folder incoming messages")},
					{code: "Spam", description: tr("Spam folder, on some mails")},
					{code: "Trash", description: tr("Trash folder, on some mails")},
					{code: tr("Empty string"), description: tr("Use the folder specified in the \"Configure receiving mail\" action")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Set a flag or several flags for the specified message.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will set the flags for the specified message.</div>
	<div class="tr tooltip-paragraph-fold">This action is only available when connecting via imap, if the action is called when connecting via pop3, it will immediately fail.</div>
	<div class="tr tooltip-paragraph-fold">Instead of setting flags, you can add them to the existing ones by activating the corresponding parameter in the additional settings.</div>
	<div class="tr tooltip-paragraph-fold">Flags are system message tags starting with <code>\</code>. Possible flags:</div>
	<div class="tooltip-paragraph-fold"><code>\Seen</code> - <span class="tr">Message has been read</span>.</div>
	<div class="tooltip-paragraph-fold"><code>\Answered</code> - <span class="tr">Message has been answered</span>.</div>
	<div class="tooltip-paragraph-fold"><code>\Flagged</code> - <span class="tr">Message is "flagged" for urgent/special attention</span>.</div>
	<div class="tooltip-paragraph-fold"><code>\Deleted</code> - <span class="tr">Message is marked for removal</span>.</div>
	<div class="tooltip-paragraph-fold"><code>\Draft</code> - <span class="tr">Message has not completed composition (marked as a draft)</span>.</div>
	<div class="tr tooltip-paragraph-fold">The possible flags may differ depending on the server implementation.</div>
	<div class="tr tooltip-paragraph-fold">To perform this action, you need to get the id of the message, you can do this using the actions "Find id of the last message", "Find id of one message by criteria".</div>
	<div class="tooltip-paragraph-fold"><span class="tr">This action can set flags for several messages at once</span>, <span class="tr">for this, instead of one id, a list of id must be specified</span>, <span class="tr">as a list, you can use a string consisting of id, separated by commas.</span></div>
	<div class="tr tooltip-paragraph-fold">You can get a list of message ids using the "Find id of multiple messages by criteria" action.</div>
	<div class="tr tooltip-paragraph-fold">You can get message flags using the "Get message flags by id" action.</div>
	<div class="tr tooltip-paragraph-fold">You can remove message flags using the "Remove message flags by id" action.</div>
	<div class="tr tooltip-paragraph-fold">In the additional settings, you can specify the name of the folder in which this action will be performed, otherwise the folder specified in the "Configure receiving mail" action will be used.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>
</script><script type="text/template" id="InMail_DelFlags"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "uids",
		description: tr("Message id"),
		default_selector: "string",
		value_string: "",
		help: {
			description: tr("The id of the message from which need to remove the flags. If a list is specified instead of one message id, then flags will be removed from all messages from the specified list") + ", " + tr("as a list, you can use a string consisting of id, separated by commas."),
			examples: [
				{code: 134},
				{code: "263,339"},
				{code: "145, 187, 422"},
				{code: "[254, 356, 593, 694, 947]"}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "flags",
		description: tr("Flags"),
		default_selector: "string",
		variants: [
			{value: "\\Seen", description: tr("Message has been read")},
			{value: "\\Answered", description: tr("Message has been answered")},
			{value: "\\Flagged", description: tr("Message is \"flagged\" for urgent/special attention")},
			{value: "\\Deleted", description: tr("Message is marked for removal")},
			{value: "\\Draft", description: tr("Message has not completed composition (marked as a draft)")}
		],
		disable_int: true,
		value_string: "",
		help: {
			description: tr("List or one flag which needs to remove from the message.") + " " + tr("As a list, you can use a string consisting of flags, separated by commas.") + " " + tr("The possible flags may differ depending on the server implementation.") + "<br/><strong>\\Seen</strong> - " + tr("Message has been read") + "<br/><strong>\\Answered</strong> - " + tr("Message has been answered") + "<br/><strong>\\Flagged</strong> - " + tr("Message is \"flagged\" for urgent/special attention") + "<br/><strong>\\Deleted</strong> - " + tr("Message is marked for removal") + "<br/><strong>\\Draft</strong> - " + tr("Message has not completed composition (marked as a draft)"),
			examples: [
				{code: "\\Seen,\\Flagged"},
				{code: "\\Seen, \\Flagged"},
				{code: "[\"\\Seen\", \"\\Flagged\"]"}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#input_constructor').html())({
			id: "box",
			description: tr("Folder name"),
			default_selector: "string",
			variants: [
				{value: "INBOX", description: tr("Default folder incoming messages")}
			],
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("The name of the folder in which this action will be performed, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
				examples: [
					{code: "INBOX", description: tr("Default folder incoming messages")},
					{code: "Spam", description: tr("Spam folder, on some mails")},
					{code: "Trash", description: tr("Trash folder, on some mails")},
					{code: tr("Empty string"), description: tr("Use the folder specified in the \"Configure receiving mail\" action")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Remove a flag or several flags from the specified message.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will remove the flags from the specified message.</div>
	<div class="tr tooltip-paragraph-fold">This action is only available when connecting via imap, if the action is called when connecting via pop3, it will immediately fail.</div>
	<div class="tr tooltip-paragraph-fold">Flags are system message tags starting with <code>\</code>. Possible flags:</div>
	<div class="tooltip-paragraph-fold"><code>\Seen</code> - <span class="tr">Message has been read</span>.</div>
	<div class="tooltip-paragraph-fold"><code>\Answered</code> - <span class="tr">Message has been answered</span>.</div>
	<div class="tooltip-paragraph-fold"><code>\Flagged</code> - <span class="tr">Message is "flagged" for urgent/special attention</span>.</div>
	<div class="tooltip-paragraph-fold"><code>\Deleted</code> - <span class="tr">Message is marked for removal</span>.</div>
	<div class="tooltip-paragraph-fold"><code>\Draft</code> - <span class="tr">Message has not completed composition (marked as a draft)</span>.</div>
	<div class="tr tooltip-paragraph-fold">The possible flags may differ depending on the server implementation.</div>
	<div class="tr tooltip-paragraph-fold">To perform this action, you need to get the id of the message, you can do this using the actions "Find id of the last message", "Find id of one message by criteria".</div>
	<div class="tooltip-paragraph-fold"><span class="tr">This action can remove flags for several messages at once</span>, <span class="tr">for this, instead of one id, a list of id must be specified</span>, <span class="tr">as a list, you can use a string consisting of id, separated by commas.</span></div>
	<div class="tr tooltip-paragraph-fold">You can get a list of message ids using the "Find id of multiple messages by criteria" action.</div>
	<div class="tr tooltip-paragraph-fold">You can get message flags using the "Get message flags by id" action.</div>
	<div class="tr tooltip-paragraph-fold">You can set message flags using the "Set message flags by id" action.</div>
	<div class="tr tooltip-paragraph-fold">In the additional settings, you can specify the name of the folder in which this action will be performed, otherwise the folder specified in the "Configure receiving mail" action will be used.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>
</script><script type="text/template" id="InMail_GetBoxes"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({
		id: "Save",
		description: tr("Variable to save the result"),
		default_variable: "MAIL_BOXES_LIST",
		help: {
			description: tr("Variable in which, after successful execution of the action, the list of folders will be written.") + " " + tr("The folder list format depends on the \"Data format\" setting.")
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "format",
		description: tr("Data format"),
		default_selector: "string",
		variants: [
			{value: "Objects list", description: "[{name:\"INBOX\",attribs:[],delimiter:\"/\"},{name:\"Spam\",attribs:[\"\\Marked\",\"\\Junk\"],delimiter:\"/\"}]"},
			{value: "CSV list", description: "[\"INBOX::/\",\"Spam:\"\\Marked,\\Junk\":/\"]"},
			{value: "CSV string", description: "INBOX::/<br/>Spam:\"\\Marked,\\Junk\":/"}
		],
		disable_int: true,
		value_string: "Objects list",
		help: {
			description: tr("The format in which the list of folders will be saved to a variable."),
			examples: [
				{code: "Objects list", description: "[{name:\"INBOX\",attribs:[],delimiter:\"/\"},{name:\"Spam\",attribs:[\"\\Marked\",\"\\Junk\"],delimiter:\"/\"}]"},
				{code: "<br style=\"display:block;content:'';margin:6px;\"/>CSV list", description: "[\"INBOX::/\",\"Spam:\"\\Marked,\\Junk\":/\"]"},
				{code: "<br style=\"display:block;content:'';margin:6px;\"/>CSV string", description: "INBOX::/<br/>Spam:\"\\Marked,\\Junk\":/"}
			]
		} 
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get a list of folders in the specified mailbox.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will return the folder list of the specified mailbox in the specified format.</div>
	<div class="tr tooltip-paragraph-fold">This action is only available when connecting via imap, if the action is called when connecting via pop3, it will immediately fail.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">CSV list - a list that consists of CSV strings and CSV string consists of name, attributes and delimiter of folder separated with ":" symbol.</span> <span class="tr">Example:</span> <code>["INBOX::/","Spam:\"\\Marked,\\Junk\":/","Trash:\"\\Marked,\\Trash\":/"]</code></div>
	<div class="tooltip-paragraph-fold"><span class="tr">CSV string - this CSV strings separated by a line break, and consisting of name, attributes and delimiter of folder separated with ":" symbol.</span> <span class="tr">Example:</span> <code><br/>INBOX::/<br/>Spam:"\\Marked,\\Junk":/<br/>Trash:"\\Marked,\\Trash":/</code></div>
	<div class="tr tooltip-paragraph-fold">Object list - a list that consists of objects, in an object, <span style="color:black">name</span> property contains the name, <span style="color:black">attribs</span> contains a list of attributes, and <span style="color:black">delimiter</span> contains the delimiter of folder.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">Example:</span> <code>[{name:"INBOX",attribs:[],delimiter:"/"},{name:"Spam",attribs:["\\Marked","\\Junk"],delimiter:"/"},{name:"Trash",attribs:["\\Marked","\\Trash"],delimiter:"/"}]</code></div>
	<div class="tr tooltip-paragraph-fold">CSV strings can be parsed using the "Parse CSV string" action from the "String" module.</div>
	<div class="tr tooltip-paragraph-fold">Lists can be processed using actions from the "List" module.</div>
	<div class="tr tooltip-paragraph-fold">Objects can be processed using actions from the "JSON" module.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>
</script><script type="text/template" id="InMail_Status"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "name",
		description: tr("Folder name"),
		default_selector: "string",
		variants: [
			{value: "INBOX", description: tr("Default folder incoming messages")}
		],
		disable_int: true, 
		value_string: "",
		help: {
			description: tr("The name of the folder which need to get information about.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
			examples: [
				{code: "INBOX", description: tr("Default folder incoming messages")},
				{code: "Spam", description: tr("Spam folder, on some mails")},
				{code: "Trash", description: tr("Trash folder, on some mails")}
			]
		} 
	}) %>
	<%= _.template($('#variable_constructor').html())({
		id: "total",
		description: tr("Total messages"),
		default_variable: "MAIL_TOTAL_COUNT",
		help: {
			description: tr("Variable in which, after successful execution of the action, the number of all messages in the specified folder will be written."),
			examples: [
				{code: 14},
				{code: 5},
				{code: 0, description: tr("The specified folder is empty")}
			]
		}
	}) %>
	<%= _.template($('#variable_constructor').html())({
		id: "recent",
		description: tr("Recent messages"),
		default_variable: "MAIL_RECENT_COUNT",
		help: {
			description: tr("Variable in which, after successful execution of the action, the number of recent messages in the specified folder will be written.") + " " + tr("Recent messages are messages received during the current session and have the <code>\\Recent</code> flag."),
			examples: [
				{code: 5},
				{code: 2},
				{code: 0, description: tr("There are no recent messages in the specified folder")}
			]
		}
	}) %>
	<%= _.template($('#variable_constructor').html())({
		id: "unseen",
		description: tr("Unseen messages"),
		default_variable: "MAIL_UNSEEN_COUNT",
		help: {
			description: tr("Variable in which, after successful execution of the action, the number of unseen messages in the specified folder will be written.") + " " + tr("Unseen messages are messages that do not have the <code>\\Seen</code> flag."),
			examples: [
				{code: 37},
				{code: 16},
				{code: 0, description: tr("There are no unseen messages in the specified folder")}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get information about the folder in the specified mailbox.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will get information about the specified folder, namely the number of all, recent and unseen messages.</div>
	<div class="tr tooltip-paragraph-fold">This action is only available when connecting via imap, if the action is called when connecting via pop3, it will immediately fail.</div>
	<div class="tr tooltip-paragraph-fold">Recent messages are messages received during the current session and have the <code>\Recent</code> flag.</div>
	<div class="tr tooltip-paragraph-fold">Unseen messages are messages that do not have the <code>\Seen</code> flag.</div>
	<div class="tr tooltip-paragraph-fold">You can get a list of mailbox folders using the "Get list of folders" action.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>
</script><script type="text/template" id="InMail_AddBox"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "name",
		description: tr("Folder name"),
		default_selector: "string",
		disable_int: true, 
		value_string: "",
		help: {
			description: tr("The name of the folder which need to be created.") + " " + tr("You cannot create a folder with the name INBOX or with the same name as an existing folder."),
			examples: [
				{code: "foo"},
				{code: "bar"},
				{code: "zap"},
				{code: "foo/bar", description: tr("Create subfolder bar in folder foo")}
			]
		} 
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Create a new mailbox folder.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will create a new folder with the specified name in the mailbox.</div>
	<div class="tr tooltip-paragraph-fold">This action is only available when connecting via imap, if the action is called when connecting via pop3, it will immediately fail.</div>
	<div class="tr tooltip-paragraph-fold">You cannot create a folder with the name INBOX or with the same name as an existing folder.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>
</script><script type="text/template" id="InMail_RenameBox"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "oldName",
		description: tr("Old folder name"),
		default_selector: "string",
		variants: [
			{value: "INBOX", description: tr("Default folder incoming messages")}
		],
		disable_int: true,
		value_string: "",
		help: {
			description: tr("The name of the folder which need to be renamed.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
			examples: [
				{code: "foo"},
				{code: "bar"},
				{code: "zap"}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "newName",
		description: tr("New folder name"),
		default_selector: "string",
		disable_int: true,
		value_string: "",
		help: {
			description: tr("The folder name to which the specified folder will be renamed."),
			examples: [
				{code: "foo"},
				{code: "bar"},
				{code: "zap"}
			]
		} 
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Rename the specified mailbox folder.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will rename the specified folder in the mailbox.</div>
	<div class="tr tooltip-paragraph-fold">This action is only available when connecting via imap, if the action is called when connecting via pop3, it will immediately fail.</div>
	<div class="tr tooltip-paragraph-fold">Renaming INBOX is allowed and has special behavior. It moves all messages from INBOX to a new folder with the specified name, while INBOX remains empty.</div>
	<div class="tr tooltip-paragraph-fold">You can get a list of mailbox folders using the "Get list of folders" action.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>
</script><script type="text/template" id="InMail_DelBox"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "name",
		description: tr("Folder name"),
		default_selector: "string",
		disable_int: true, 
		value_string: "",
		help: {
			description: tr("The name of the folder which need to be deleted.") + " " + tr("You cannot delete a folder with the name INBOX.") + " " + tr("You can get a list of mailbox folders using the \"Get list of folders\" action."),
			examples: [
				{code: "foo"},
				{code: "bar"},
				{code: "zap"},
				{code: "foo/bar", description: tr("Delete subfolder bar from foo folder")}
			]
		} 
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Delete the specified mailbox folder.</div>
	<div class="tr tooltip-paragraph-fold">In order to execute this action correctly you need to run "Configure receiving mail" action first.</div>
	<div class="tr tooltip-paragraph-fold">This action will completely and permanently delete the folder with the specified name and all messages it contains from the mailbox.</div>
	<div class="tr tooltip-paragraph-fold">This action is only available when connecting via imap, if the action is called when connecting via pop3, it will immediately fail.</div>
	<div class="tr tooltip-paragraph-fold">You cannot delete a folder with the name INBOX.</div>
	<div class="tr tooltip-paragraph-fold">You can get a list of mailbox folders using the "Get list of folders" action.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %>
</script><script type="text/template" id="InMail_Close"><div class="container-fluid"></div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Close the connection to mail service.</div>
	<div class="tr tooltip-paragraph-fold">If connection is already closed or not open yet, this action will do nothing.</div>
	<div class="tr tooltip-paragraph-fold">This action is optional because connection is closed automatically if it is not used for a long time.</div>
	<div class="tr tooltip-paragraph-last-fold">Exact autoclose timeout is specified in "Configure receiving mail" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="InMail_SetDebug"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"enable", description:tr("Enable debug"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true","false"], help: {description: tr("Enable mail receiving module debug."), examples:[{code:"true",description:tr("Enable debug")},{code:"false",description:tr("Disable debug")}]}}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Enable or disable mail receiving module debug.</div>
	<div class="tr tooltip-paragraph-last-fold">If debug is enabled, all queries and their results will be displayed in the log.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="JsonCreateObject"><div class="container-fluid">
  <%= _.template($('#variable_constructor').html())({
    id: "Save",
    default_variable: "NEW_OBJECT",
    description: tr("Variable to save"),
    help: {
      description: tr("Variable that stores the result of creation (Object).")
    }
  }) %>
  <% for (let i = 1; i <= 3; ++i ) { %>
    <div class="col-xs-12">
      <form class="form-horizontal">
        <div class="form-group">
          <div class="col-xs-12">
            <div style="margin: 5px 2px 5px 1px;background-color: #eee;border-radius: 1px;height: 5px;">&nbsp;</div>
          </div>
        </div>
      </form>
    </div>
    <%= _.template($('#input_constructor').html())({
      id: `Key${i}`,
      description: tr(`Key ${i}. Can be empty`),
      default_selector: "string",
      help: {
        description: tr("The property key of the created object. You can also use variables or leave the field empty."),
        examples: [
          {
            code: "name",
            description: tr("A regular string as a key.")
          },
          {
            code: "{{key}}",
            description: tr("The resource value as a key.")
          },
          {
            code: "[[KEY]]",
            description: tr("The variable value as a key.")
          }
        ]
      }
    }) %>
    <%= _.template($('#input_constructor').html())({
      id: `Value${i}`,
      description: tr(`Value ${i}. Can be empty`),
      default_selector: "string",
      help: {
        description: tr("The property value of the created object. You can also use variables or leave the field empty."),
        examples: [
          {
            code: "100",
            description: tr('A number as a value (<span class="help-popup-code">int</span> type).')
          },
          {
            code: "John",
            description: tr('A string as a value (<span class="help-popup-code">string</span> type).')
          },
          {
            code: "[0, 10]",
            description: tr('An array as a value (<span class="help-popup-code">expression</span> type).')
          }
        ]
      }
    }) %>
  <% } %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Create a new object with initial values (optional).</div>
  <div class="tr tooltip-paragraph-fold">If you want to add more properties or change existing ones, you can use the <a href="#!/JsonChangeValue">Change value</a> action.</div>
  <div class="tr tooltip-paragraph-fold">If you leave the key empty in one of the fields, the value will not be set, even if you specify it - similar to the action for creating lists.</div>
  <div class="tr tooltip-paragraph-fold">For example, if you specify the string <span style="color:black">offset</span> as the key and the number <span style="color:black">100</span> as the value, then the resulting object will look like this - <span style="color:black">{"offset": 100}</span>.</div>
  <div class="tr tooltip-paragraph-fold">One example of using this action is generating data, for example, for sending HTTP requests. You can also convert the resulting object to a string using the <a href="#!/JsonToString">JSON to string</a> action.</div>
  <div class="tr tooltip-paragraph-fold">You can use any data types for values - lists, strings, numbers, and so on. However, it is recommended to use strings or numbers for keys - in any case, keys will always be converted to a string.</div>
  <div class="tr tooltip-paragraph-last-fold">See full documentation and examples <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://cheshirecaat.github.io/bas-docs/json-path/json-path-en.html'); return false;"><span class="tr">here.</span></a></div>
</div>
<%= _.template($('#back').html())({ action: "executeandadd", visible: true }) %></script><script type="text/template" id="JsonGetValue"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({
    id: "Data",
    description: tr("JSON string or object to parse"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    help: {
      description: tr("JSON string or object to parse. You can specify a valid JSON string here or an object whose type is not simple. Simple types include numbers, boolean values, null value.")
    }
  }) %>
  <%= _.template($('#input_constructor').html())({
    id: "Path",
    description: tr("JSONPath query to parse"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    variants: [
      "dialogs[*].title<br/><span style='color:gray;font-size:small'>" + tr("The titles of all dialogs.") + "</span>",
      "user.age<br/><span style='color:gray;font-size:small'>" + tr("The age of user.") + "</span>",
      "$..cart[2]<br/><span style='color:gray;font-size:small'>" + tr("The third item in cart.") + "</span>",
      "$..cart[-2:]<br/><span style='color:gray;font-size:small'>" + tr("The last two items in the cart.") + "</span>",
      "$..*<br/><span style='color:gray;font-size:small'>" + tr("All possible elements.") + "</span>",
    ],
    help: {
      description: tr("Any JSONPath query that you need."),
      examples: [
        {
          code: "$.dialogs[*].title",
          description: tr("The titles of all dialogs.")
        },
        {
          code: "dialogs[*].title",
          description: tr("The titles of all dialogs.")
        },
        {
          code: "$.user.age",
          description: tr("The age of user.")
        },
        {
          code: "user.age",
          description: tr("The age of user.")
        },
        {
          code: "$..cart[2]",
          description: tr("The third item in cart.")
        },
        {
          code: "$..cart[-2:]",
          description: tr("The last two items in the cart.")
        },
        {
          code: "$..cart[(@.length - 1)]",
          description: tr("The last item in the cart.")
        },
        {
          code: "$..cart[-1:]",
          description: tr("The last item in the cart.")
        },
        {
          code: "$['secret.identity']",
          description: tr("Property with dot in name.")
        },
        {
          code: "$[(\"secret.identity\")]",
          description: tr("Property with dot in name.")
        },
        {
          code: "$..*",
          description: tr("All possible elements.")
        },
      ]
    }
  }) %>
  <%= _.template($('#variable_constructor').html())({
    id: "Save",
    description: tr("Variable to save"),
    default_variable: "PARSED_JSON_VALUE",
    help: {
      description: tr("Variable that stores the result of parsing (First value only).")
    }
  }) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Execute JSONPath query and get one value (first matching).</div>
  <div class="tr tooltip-paragraph-fold">If an error occurs during parsing, an empty string will be returned.</div>
  <div class="tr tooltip-paragraph-fold">JSONPath query should not be empty. If you want to change the data format, use the <a href="#!/JsonToString">JSON to string</a> or <a href="#!/JsonFromString">String to JSON</a> action.</div>
  <div class="tr tooltip-paragraph-fold">JSON is a text format for data exchange, serialization (storage) of objects, arrays, numbers, strings, logical values and <span style="color:black">null</span> values. It is based on JavaScript syntax, but still different from it: not every JavaScript code is JSON, and not every JSON is JavaScript code.</div>
  <div class="tr tooltip-paragraph-fold">JSONPath is a powerful tool for working with the JSON data type. It is built on the basis of logic, which is very similar to XPath, but has some limitations, because the data type itself is much simpler than XML.</div>
  <div class="tr tooltip-paragraph-fold">Using this technology, we can quickly get data from JavaScript objects or strings in JSON format. In addition, this greatly simplifies the work, as usually, parsing JSON requires writing code.</div>
  <div class="tr tooltip-paragraph-fold">Typical examples of using this function are working with the API of a website or, more often in the context of BAS, working with Cookies. In BAS, cookies are presented to the user in JSON format strings. This often causes difficulties. But with JSONPath, you can easily get the data you need.</div>
  <div class="tr tooltip-paragraph-fold">Consider an example. Suppose we got a line of the form <span style="color:black">{"age":100, "name":"John", "messages": ["m1", "m2", "m3"]}</span> from a particular site. In a normal situation, we will have to write code to get, for example, the first message - <span style="color:black">m1</span>. With JSONPath, we can simply specify the desired path - <span style="color:black">$.messages[0]</span> and get what we needed as a result. If we briefly describe what exactly such a request means, we get the following: we take the root element using the <span style="color:black">$</span> symbol, access the child element <span style="color:black">messages</span> through the dot symbol, and indicate the index of the element we need.</div>
  <div class="tr tooltip-paragraph-fold">Please note, if you use the path <span style="color:black">$.messages[*]</span> - the output will be a list of values, but the actions <span style="color:black">Get Value</span> or <span style="color:black">Get Key</span> will return only the first element from the list,i.e. <span style="color:black">m1</span>, not <span style="color:black">[m1, m2, m3]</span>. If you need a list, use the <span style="color:black">Get all values</span> or <span style="color:black">Get all keys</span> actions.</div>
  <div class="tr tooltip-paragraph-fold">You can use simple parameter names to get the value you need. For example, having the line from the previous example, you can specify a query of the form <span style="color:black">age</span> as a path and get the value of this property - <span style="color:black">100</span>.</div>
  <div class="tr tooltip-paragraph-fold">You can also use simplified syntax for queries. For example, the result of queries <span style="color:black">$.messages[*]</span> and <span style="color:black">messages[*]</span> will be the same. The module itself will add the necessary characters at the beginning of the query string. This also applies to the search for any elements (not only root), i.e. for queries of the form <span style="color:black">$..messages[*]</span> and <span style="color:black">..messages[*]</span> will be the same too.</div>
  <div class="tr tooltip-paragraph-fold">This action also supports complex queries - for example, using filters - <span style="color:black">$.data[?(@.price &lt;= 100)]</span>. In addition, you can access properties that contain special characters, such as the period character - <span style="color:black">$.data[("secret.token")]</span> or <span style="color:black">$.data['secret.token']</span>. When using double quotes, always enclose the property name in parentheses.</div>
  <div class="tr tooltip-paragraph-last-fold">See full documentation and examples <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://cheshirecaat.github.io/bas-docs/json-path/json-path-en.html'); return false;"><span class="tr">here.</span></a></div>
</div>
<%= _.template($('#back').html())({ action: "executeandadd", visible: true }) %></script><script type="text/template" id="JsonGetAllValues"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({
    id: "Data",
    description: tr("JSON string or object to parse"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    help: {
      description: tr("JSON string or object to parse. You can specify a valid JSON string here or an object whose type is not simple. Simple types include numbers, boolean values, null value.")
    }
  }) %>
  <%= _.template($('#input_constructor').html())({
    id: "Path",
    description: tr("JSONPath query to parse"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    variants: [
      "dialogs[*].title<br/><span style='color:gray;font-size:small'>" + tr("The titles of all dialogs.") + "</span>",
      "user.age<br/><span style='color:gray;font-size:small'>" + tr("The age of user.") + "</span>",
      "$..cart[2]<br/><span style='color:gray;font-size:small'>" + tr("The third item in cart.") + "</span>",
      "$..cart[-2:]<br/><span style='color:gray;font-size:small'>" + tr("The last two items in the cart.") + "</span>",
      "$..*<br/><span style='color:gray;font-size:small'>" + tr("All possible elements.") + "</span>",
    ],
    help: {
      description: tr("Any JSONPath query that you need."),
      examples: [
        {
          code: "$.dialogs[*].title",
          description: tr("The titles of all dialogs.")
        },
        {
          code: "dialogs[*].title",
          description: tr("The titles of all dialogs.")
        },
        {
          code: "$.user.age",
          description: tr("The age of user.")
        },
        {
          code: "user.age",
          description: tr("The age of user.")
        },
        {
          code: "$..cart[2]",
          description: tr("The third item in cart.")
        },
        {
          code: "$..cart[-2:]",
          description: tr("The last two items in the cart.")
        },
        {
          code: "$..cart[(@.length - 1)]",
          description: tr("The last item in the cart.")
        },
        {
          code: "$..cart[-1:]",
          description: tr("The last item in the cart.")
        },
        {
          code: "$['secret.identity']",
          description: tr("Property with dot in name.")
        },
        {
          code: "$[(\"secret.identity\")]",
          description: tr("Property with dot in name.")
        },
        {
          code: "$..*",
          description: tr("All possible elements.")
        },
      ]
    }
  }) %>
  <%= _.template($('#variable_constructor').html())({
    id: "Save",
    description: tr("Variable to save"),
    default_variable: "PARSED_JSON_VALUES",
    help: {
      description: tr("Variable that stores the result of parsing (All values or an list of one value).")
    }
  }) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Execute JSONPath query and get all matching values.</div>
  <div class="tr tooltip-paragraph-fold">If the result of the action is a single value, a list containing this value will be returned.</div>
  <div class="tr tooltip-paragraph-fold">If an error occurs during parsing, an empty string will be returned.</div>
  <div class="tr tooltip-paragraph-fold">JSONPath query should not be empty. If you want to change the data format, use the <a href="#!/JsonToString">JSON to string</a> or <a href="#!/JsonFromString">String to JSON</a> action.</div>
  <div class="tr tooltip-paragraph-fold">JSON is a text format for data exchange, serialization (storage) of objects, arrays, numbers, strings, logical values and <span style="color:black">null</span> values. It is based on JavaScript syntax, but still different from it: not every JavaScript code is JSON, and not every JSON is JavaScript code.</div>
  <div class="tr tooltip-paragraph-fold">JSONPath is a powerful tool for working with the JSON data type. It is built on the basis of logic, which is very similar to XPath, but has some limitations, because the data type itself is much simpler than XML.</div>
  <div class="tr tooltip-paragraph-fold">Using this technology, we can quickly get data from JavaScript objects or strings in JSON format. In addition, this greatly simplifies the work, as usually, parsing JSON requires writing code.</div>
  <div class="tr tooltip-paragraph-fold">Typical examples of using this function are working with the API of a website or, more often in the context of BAS, working with Cookies. In BAS, cookies are presented to the user in JSON format strings. This often causes difficulties. But with JSONPath, you can easily get the data you need.</div>
  <div class="tr tooltip-paragraph-fold">Consider an example. Suppose we got a line of the form <span style="color:black">{"age":100, "name":"John", "messages": ["m1", "m2", "m3"]}</span> from a particular site. In a normal situation, we will have to write code to get, for example, the first message - <span style="color:black">m1</span>. With JSONPath, we can simply specify the desired path - <span style="color:black">$.messages[0]</span> and get what we needed as a result. If we briefly describe what exactly such a request means, we get the following: we take the root element using the <span style="color:black">$</span> symbol, access the child element <span style="color:black">messages</span> through the dot symbol, and indicate the index of the element we need.</div>
  <div class="tr tooltip-paragraph-fold">Please note, if you use the path <span style="color:black">$.messages[*]</span> - the output will be a list of values, but the actions <span style="color:black">Get Value</span> or <span style="color:black">Get Key</span> will return only the first element from the list,i.e. <span style="color:black">m1</span>, not <span style="color:black">[m1, m2, m3]</span>. If you need a list, use the <span style="color:black">Get all values</span> or <span style="color:black">Get all keys</span> actions.</div>
  <div class="tr tooltip-paragraph-fold">You can use simple parameter names to get the value you need. For example, having the line from the previous example, you can specify a query of the form <span style="color:black">age</span> as a path and get the value of this property - <span style="color:black">100</span>.</div>
  <div class="tr tooltip-paragraph-fold">You can also use simplified syntax for queries. For example, the result of queries <span style="color:black">$.messages[*]</span> and <span style="color:black">messages[*]</span> will be the same. The module itself will add the necessary characters at the beginning of the query string. This also applies to the search for any elements (not only root), i.e. for queries of the form <span style="color:black">$..messages[*]</span> and <span style="color:black">..messages[*]</span> will be the same too.</div>
  <div class="tr tooltip-paragraph-fold">This action also supports complex queries - for example, using filters - <span style="color:black">$.data[?(@.price &lt;= 100)]</span>. In addition, you can access properties that contain special characters, such as the period character - <span style="color:black">$.data[("secret.token")]</span> or <span style="color:black">$.data['secret.token']</span>. When using double quotes, always enclose the property name in parentheses.</div>
  <div class="tr tooltip-paragraph-last-fold">See full documentation and examples <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://cheshirecaat.github.io/bas-docs/json-path/json-path-en.html'); return false;"><span class="tr">here.</span></a></div>
</div>
<%= _.template($('#back').html())({ action: "executeandadd", visible: true }) %></script><script type="text/template" id="JsonGetKey"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({
    id: "Data",
    description: tr("JSON string or object to parse"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    help: {
      description: tr("JSON string or object to parse. You can specify a valid JSON string here or an object whose type is not simple. Simple types include numbers, boolean values, null value.")
    }
  }) %>
  <%= _.template($('#input_constructor').html())({
    id: "Path",
    description: tr("JSONPath query to parse"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    variants: [
      "dialogs[*].title<br/><span style='color:gray;font-size:small'>" + tr("The titles of all dialogs.") + "</span>",
      "user.age<br/><span style='color:gray;font-size:small'>" + tr("The age of user.") + "</span>",
      "$..cart[2]<br/><span style='color:gray;font-size:small'>" + tr("The third item in cart.") + "</span>",
      "$..cart[-2:]<br/><span style='color:gray;font-size:small'>" + tr("The last two items in the cart.") + "</span>",
      "$..*<br/><span style='color:gray;font-size:small'>" + tr("All possible elements.") + "</span>",
    ],
    help: {
      description: tr("Any JSONPath query that you need."),
      examples: [
        {
          code: "$.dialogs[*].title",
          description: tr("The titles of all dialogs.")
        },
        {
          code: "dialogs[*].title",
          description: tr("The titles of all dialogs.")
        },
        {
          code: "$.user.age",
          description: tr("The age of user.")
        },
        {
          code: "user.age",
          description: tr("The age of user.")
        },
        {
          code: "$..cart[2]",
          description: tr("The third item in cart.")
        },
        {
          code: "$..cart[-2:]",
          description: tr("The last two items in the cart.")
        },
        {
          code: "$..cart[(@.length - 1)]",
          description: tr("The last item in the cart.")
        },
        {
          code: "$..cart[-1:]",
          description: tr("The last item in the cart.")
        },
        {
          code: "$['secret.identity']",
          description: tr("Property with dot in name.")
        },
        {
          code: "$[(\"secret.identity\")]",
          description: tr("Property with dot in name.")
        },
        {
          code: "$..*",
          description: tr("All possible elements.")
        },
      ]
    }
  }) %>
  <%= _.template($('#variable_constructor').html())({
    id: "Save",
    description: tr("Variable to save"),
    default_variable: "PARSED_JSON_KEY",
    help: {
      description: tr("Variable that stores the result of parsing (First key only).")
    }
  }) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Execute JSONPath query and get one key (first matching).</div>
  <div class="tr tooltip-paragraph-fold">If an error occurs during parsing, an empty string will be returned.</div>
  <div class="tr tooltip-paragraph-fold">JSONPath query should not be empty. If you want to change the data format, use the <a href="#!/JsonToString">JSON to string</a> or <a href="#!/JsonFromString">String to JSON</a> action.</div>
  <div class="tr tooltip-paragraph-fold">JSON is a text format for data exchange, serialization (storage) of objects, arrays, numbers, strings, logical values and <span style="color:black">null</span> values. It is based on JavaScript syntax, but still different from it: not every JavaScript code is JSON, and not every JSON is JavaScript code.</div>
  <div class="tr tooltip-paragraph-fold">JSONPath is a powerful tool for working with the JSON data type. It is built on the basis of logic, which is very similar to XPath, but has some limitations, because the data type itself is much simpler than XML.</div>
  <div class="tr tooltip-paragraph-fold">Using this technology, we can quickly get data from JavaScript objects or strings in JSON format. In addition, this greatly simplifies the work, as usually, parsing JSON requires writing code.</div>
  <div class="tr tooltip-paragraph-fold">Typical examples of using this function are working with the API of a website or, more often in the context of BAS, working with Cookies. In BAS, cookies are presented to the user in JSON format strings. This often causes difficulties. But with JSONPath, you can easily get the data you need.</div>
  <div class="tr tooltip-paragraph-fold">Consider an example. Suppose we got a line of the form <span style="color:black">{"Kate":{"rating":5,"count":6},"John":{"rating":1,"count":2}}</span> from a particular site. We want to get the names of people whose rating is greater than or equal to 1. This can easily be done using a query like <span style="color:black">$.[?(@.rating &gt;= 1)]</span>. Thus, as a result, we get a first name satisfying our request.</div>
  <div class="tr tooltip-paragraph-fold">This action also supports complex queries - for example, using filters - <span style="color:black">$.data[?(@.price &lt;= 100)]</span>. In addition, you can access properties that contain special characters, such as the period character - <span style="color:black">$.data[("secret.token")]</span> or <span style="color:black">$.data['secret.token']</span>. When using double quotes, always enclose the property name in parentheses.</div>
  <div class="tr tooltip-paragraph-fold">Please note, if you use this action - the output will be always a single value, but the action <span style="color:black">Get all keys</span> will return all elements as list.</div>
  <div class="tr tooltip-paragraph-last-fold">See full documentation and examples <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://cheshirecaat.github.io/bas-docs/json-path/json-path-en.html'); return false;"><span class="tr">here.</span></a></div>
</div>
<%= _.template($('#back').html())({ action: "executeandadd", visible: true }) %></script><script type="text/template" id="JsonGetAllKeys"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({
    id: "Data",
    description: tr("JSON string or object to parse"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    help: {
      description: tr("JSON string or object to parse. You can specify a valid JSON string here or an object whose type is not simple. Simple types include numbers, boolean values, null value.")
    }
  }) %>
  <%= _.template($('#input_constructor').html())({
    id: "Path",
    description: tr("JSONPath query to parse"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    variants: [
      "dialogs[*].title<br/><span style='color:gray;font-size:small'>" + tr("The titles of all dialogs.") + "</span>",
      "user.age<br/><span style='color:gray;font-size:small'>" + tr("The age of user.") + "</span>",
      "$..cart[2]<br/><span style='color:gray;font-size:small'>" + tr("The third item in cart.") + "</span>",
      "$..cart[-2:]<br/><span style='color:gray;font-size:small'>" + tr("The last two items in the cart.") + "</span>",
      "$..*<br/><span style='color:gray;font-size:small'>" + tr("All possible elements.") + "</span>",
    ],
    help: {
      description: tr("Any JSONPath query that you need."),
      examples: [
        {
          code: "$.dialogs[*].title",
          description: tr("The titles of all dialogs.")
        },
        {
          code: "dialogs[*].title",
          description: tr("The titles of all dialogs.")
        },
        {
          code: "$.user.age",
          description: tr("The age of user.")
        },
        {
          code: "user.age",
          description: tr("The age of user.")
        },
        {
          code: "$..cart[2]",
          description: tr("The third item in cart.")
        },
        {
          code: "$..cart[-2:]",
          description: tr("The last two items in the cart.")
        },
        {
          code: "$..cart[(@.length - 1)]",
          description: tr("The last item in the cart.")
        },
        {
          code: "$..cart[-1:]",
          description: tr("The last item in the cart.")
        },
        {
          code: "$['secret.identity']",
          description: tr("Property with dot in name.")
        },
        {
          code: "$[(\"secret.identity\")]",
          description: tr("Property with dot in name.")
        },
        {
          code: "$..*",
          description: tr("All possible elements.")
        },
      ]
    }
  }) %>
  <%= _.template($('#variable_constructor').html())({
    id: "Save",
    description: tr("Variable to save"),
    default_variable: "PARSED_JSON_KEYS",
    help: {
      description: tr("Variable that stores the result of parsing (All keys or an list of one key).")
    }
  }) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Execute JSONPath query and get all matching keys.</div>
  <div class="tr tooltip-paragraph-fold">If the result of the action is a single key, a list containing this key will be returned.</div>
  <div class="tr tooltip-paragraph-fold">If an error occurs during parsing, an empty string will be returned.</div>
  <div class="tr tooltip-paragraph-fold">JSONPath query should not be empty. If you want to change the data format, use the <a href="#!/JsonToString">JSON to string</a> or <a href="#!/JsonFromString">String to JSON</a> action.</div>
  <div class="tr tooltip-paragraph-fold">JSON is a text format for data exchange, serialization (storage) of objects, arrays, numbers, strings, logical values and <span style="color:black">null</span> values. It is based on JavaScript syntax, but still different from it: not every JavaScript code is JSON, and not every JSON is JavaScript code.</div>
  <div class="tr tooltip-paragraph-fold">JSONPath is a powerful tool for working with the JSON data type. It is built on the basis of logic, which is very similar to XPath, but has some limitations, because the data type itself is much simpler than XML.</div>
  <div class="tr tooltip-paragraph-fold">Using this technology, we can quickly get data from JavaScript objects or strings in JSON format. In addition, this greatly simplifies the work, as usually, parsing JSON requires writing code.</div>
  <div class="tr tooltip-paragraph-fold">Typical examples of using this function are working with the API of a website or, more often in the context of BAS, working with Cookies. In BAS, cookies are presented to the user in JSON format strings. This often causes difficulties. But with JSONPath, you can easily get the data you need.</div>
  <div class="tr tooltip-paragraph-fold">Consider an example. Suppose we got a line of the form <span style="color:black">{"Kate":{"rating":5,"count":6},"John":{"rating":1,"count":2}}</span> from a particular site. We want to get the names of people whose rating is greater than or equal to 1. This can easily be done using a query like <span style="color:black">$.[?(@.rating &gt;= 1)]</span>. Thus, as a result, we get a list of names satisfying our request.</div>
  <div class="tr tooltip-paragraph-fold">This action also supports complex queries - for example, using filters - <span style="color:black">$.data[?(@.price &lt;= 100)]</span>. In addition, you can access properties that contain special characters, such as the period character - <span style="color:black">$.data[("secret.token")]</span> or <span style="color:black">$.data['secret.token']</span>. When using double quotes, always enclose the property name in parentheses.</div>
  <div class="tr tooltip-paragraph-fold">Please note, if you use this action - the output will be always a list of values, but the action <span style="color:black">Get key</span> will return only the first element from the list.</div>
  <div class="tr tooltip-paragraph-last-fold">See full documentation and examples <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://cheshirecaat.github.io/bas-docs/json-path/json-path-en.html'); return false;"><span class="tr">here.</span></a></div>
</div>
<%= _.template($('#back').html())({ action: "executeandadd", visible: true }) %></script><script type="text/template" id="JsonGetCount"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({
    id: "Data",
    description: tr("JSON string or object to count"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    help: {
      description: tr("JSON string or object to count. You can specify a valid JSON string here or an object whose type is not simple. Simple types include numbers, boolean values, null value.")
    }
  }) %>
  <%= _.template($('#input_constructor').html())({
    id: "Path",
    description: tr("JSONPath query to count"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    variants: [
      "dialogs[*].title<br/><span style='color:gray;font-size:small'>" + tr("The titles of all dialogs.") + "</span>",
      "user.age<br/><span style='color:gray;font-size:small'>" + tr("The age of user.") + "</span>",
      "$..cart[2]<br/><span style='color:gray;font-size:small'>" + tr("The third item in cart.") + "</span>",
      "$..cart[-2:]<br/><span style='color:gray;font-size:small'>" + tr("The last two items in the cart.") + "</span>",
      "$..*<br/><span style='color:gray;font-size:small'>" + tr("All possible elements.") + "</span>",
    ],
    help: {
      description: tr("Any JSONPath query that you need."),
      examples: [
        {
          code: "$.dialogs[*].title",
          description: tr("The titles of all dialogs.")
        },
        {
          code: "dialogs[*].title",
          description: tr("The titles of all dialogs.")
        },
        {
          code: "$.user.age",
          description: tr("The age of user.")
        },
        {
          code: "user.age",
          description: tr("The age of user.")
        },
        {
          code: "$..cart[2]",
          description: tr("The third item in cart.")
        },
        {
          code: "$..cart[-2:]",
          description: tr("The last two items in the cart.")
        },
        {
          code: "$..cart[(@.length - 1)]",
          description: tr("The last item in the cart.")
        },
        {
          code: "$..cart[-1:]",
          description: tr("The last item in the cart.")
        },
        {
          code: "$['secret.identity']",
          description: tr("Property with dot in name.")
        },
        {
          code: "$[(\"secret.identity\")]",
          description: tr("Property with dot in name.")
        },
        {
          code: "$..*",
          description: tr("All possible elements.")
        },
      ]
    }
  }) %>
  <%= _.template($('#variable_constructor').html())({
    id: "Save",
    description: tr("Variable to save"),
    default_variable: "PARSED_JSON_COUNT",
    help: {
      description: tr("Variable that stores the result of count (Elements count)."),
      examples: [
        {
          code: "0",
          description: tr("There are no items for the given query.")
        },
        {
          code: "6",
          description: tr("There are six items for the given query.")
        }
      ]
    }
  }) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Execute JSONPath query and get elements count.</div>
  <div class="tr tooltip-paragraph-fold">If the object at the specified query is not found or will not contain elements, the result will be zero.</div>
  <div class="tr tooltip-paragraph-fold">JSONPath query can be empty in this action. In this case, the total number of keys of the object or string in JSON format will be calculated.</div>
  <div class="tr tooltip-paragraph-fold">JSON is a text format for data exchange, serialization (storage) of objects, arrays, numbers, strings, logical values and <span style="color:black">null</span> values. It is based on JavaScript syntax, but still different from it: not every JavaScript code is JSON, and not every JSON is JavaScript code.</div>
  <div class="tr tooltip-paragraph-fold">JSONPath is a powerful tool for working with the JSON data type. It is built on the basis of logic, which is very similar to XPath, but has some limitations, because the data type itself is much simpler than XML.</div>
  <div class="tr tooltip-paragraph-fold">Using this technology, we can quickly get data from JavaScript objects or strings in JSON format. In addition, this greatly simplifies the work, as usually, parsing JSON requires writing code.</div>
  <div class="tr tooltip-paragraph-fold">Typical examples of using this function are working with the API of a website or, more often in the context of BAS, working with Cookies. In BAS, cookies are presented to the user in JSON format strings. This often causes difficulties. But with JSONPath, you can easily get the data you need.</div>
  <div class="tr tooltip-paragraph-fold">Consider an example. Suppose we got a line of the form <span style="color:black">{"age":100, "name":"John", "messages": ["m1", "m2", "m3"]}</span> from a particular site. We need to find out how many new messages came from the user. With JSONPath, we can simply specify the desired path - <span style="color:black">$.messages[*]</span> and get the exact number of incoming messages.</div>
  <div class="tr tooltip-paragraph-fold">This action also supports complex queries - for example, using filters - <span style="color:black">$.data[?(@.price &lt;= 100)]</span>. In addition, you can access properties that contain special characters, such as the period character - <span style="color:black">$.data[("secret.token")]</span> or <span style="color:black">$.data['secret.token']</span>. When using double quotes, always enclose the property name in parentheses.</div>
  <div class="tr tooltip-paragraph-fold">Please note, if you use the path <span style="color:black">$.messages[*]</span> - the output will be a list of values and the number of elements will be 3, but if you specify a query <span style="color:black">$.messages</span>, then the number of elements will be 1, because this query points to the object as a whole, and not to its elements.</div>
  <div class="tr tooltip-paragraph-last-fold">See full documentation and examples <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://cheshirecaat.github.io/bas-docs/json-path/json-path-en.html'); return false;"><span class="tr">here.</span></a></div>
</div>
<%= _.template($('#back').html())({ action: "executeandadd", visible: true }) %></script><script type="text/template" id="JsonChangeValue"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({
    id: "Data",
    description: tr("JSON string or object to change"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    help: {
      description: tr("JSON string or object to change value. You can specify a valid JSON string here or an object whose type is not simple. Simple types include numbers, boolean values, null value.")
    }
  }) %>
  <%= _.template($('#input_constructor').html())({
    id: "Path",
    description: tr("JSONPath query to change value"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    variants: [
      "dialogs[*].title<br/><span style='color:gray;font-size:small'>" + tr("The titles of all dialogs.") + "</span>",
      "user.age<br/><span style='color:gray;font-size:small'>" + tr("The age of user.") + "</span>",
      "$..cart[2]<br/><span style='color:gray;font-size:small'>" + tr("The third item in cart.") + "</span>",
      "$..cart[-2:]<br/><span style='color:gray;font-size:small'>" + tr("The last two items in the cart.") + "</span>",
      "$..*<br/><span style='color:gray;font-size:small'>" + tr("All possible elements.") + "</span>",
    ],
    help: {
      description: tr("Any JSONPath query that you need."),
      examples: [
        {
          code: "$.dialogs[*].title",
          description: tr("The titles of all dialogs.")
        },
        {
          code: "dialogs[*].title",
          description: tr("The titles of all dialogs.")
        },
        {
          code: "$.user.age",
          description: tr("The age of user.")
        },
        {
          code: "user.age",
          description: tr("The age of user.")
        },
        {
          code: "$..cart[2]",
          description: tr("The third item in cart.")
        },
        {
          code: "$..cart[-2:]",
          description: tr("The last two items in the cart.")
        },
        {
          code: "$..cart[(@.length - 1)]",
          description: tr("The last item in the cart.")
        },
        {
          code: "$..cart[-1:]",
          description: tr("The last item in the cart.")
        },
        {
          code: "$['secret.identity']",
          description: tr("Property with dot in name.")
        },
        {
          code: "$[(\"secret.identity\")]",
          description: tr("Property with dot in name.")
        },
        {
          code: "$..*",
          description: tr("All possible elements.")
        },
      ]
    }
  }) %>
  <%= _.template($('#input_constructor').html())({
    id: "Value",
    description: tr("New value for object"),
    default_selector: "string",
    value_string: "",
    help: {
      description: tr("New value for object that matches query.")
    }
  }) %>
  <%= _.template($('#variable_constructor').html())({
    id: "Save",
    description: tr("Variable to save"),
    default_variable: "MODIFIED_JSON",
    help: {
      description: tr("Variable that stores the result of changing (Modified object or string).")
    }
  }) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Execute JSONPath query and change object value.</div>
  <div class="tr tooltip-paragraph-fold">The type of the returned object will be the same as the original variable. This means that if you specify a string, the string will be returned; if you specify an object, the object will be returned.</div>
  <div class="tr tooltip-paragraph-fold">JSONPath query should not be empty. If you want to change the data format, use the <a href="#!/JsonToString">JSON to string</a> or <a href="#!/JsonFromString">String to JSON</a> action.</div>
  <div class="tr tooltip-paragraph-fold">JSON is a text format for data exchange, serialization (storage) of objects, arrays, numbers, strings, logical values and <span style="color:black">null</span> values. It is based on JavaScript syntax, but still different from it: not every JavaScript code is JSON, and not every JSON is JavaScript code.</div>
  <div class="tr tooltip-paragraph-fold">JSONPath is a powerful tool for working with the JSON data type. It is built on the basis of logic, which is very similar to XPath, but has some limitations, because the data type itself is much simpler than XML.</div>
  <div class="tr tooltip-paragraph-fold">Using this technology, we can quickly get data from JavaScript objects or strings in JSON format. In addition, this greatly simplifies the work, as usually, parsing JSON requires writing code.</div>
  <div class="tr tooltip-paragraph-fold">You can use simple paths, as if you yourself modify or delete a value in the code. For example, we have a line like <span style="color:black">{"name":"John", "data":{"score": 10, "tries": 5}}</span> and want to change the value of <span style="color:black">data.score</span>. To do this, we indicate as a query a string like <span style="color:black">$.data.score</span> or <span style="color:black">data.score</span> and as a value a number, for example, 40. As a result, we get a string like <span style="color:black">{"name":"John", "data":{"score": 40, "tries": 5}}</span>. This will also work with arrays. For example, if you have an array <span style="color:black">array</span> and want to change the first element, use a query like <span style="color:black">$.array[0]</span>.</div>
  <div class="tr tooltip-paragraph-fold">This action also supports complex queries - for example, using filters - <span style="color:black">$.data[?(@.price &lt;= 100)]</span>. In addition, you can access properties that contain special characters, such as the period character - <span style="color:black">$.data[("secret.token")]</span> or <span style="color:black">$.data['secret.token']</span>. When using double quotes, always enclose the property name in parentheses.</div>
  <div class="tr tooltip-paragraph-fold">You can use the <a href="#!/JsonChangeValue">Change value</a> action to add new properties to the object - just specify the query that leads to the desired key. For example, if we have an object of the form <span style="color:black">{"name":"John"}</span>, we can add a property <span style="color:black">age</span> with the value <span style="color:black">25</span> using the <span style="color:black">$.age</span> query.</div>
  <div class="tr tooltip-paragraph-last-fold">See full documentation and examples <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://cheshirecaat.github.io/bas-docs/json-path/json-path-en.html'); return false;"><span class="tr">here.</span></a></div>
</div>
<%= _.template($('#back').html())({ action: "executeandadd", visible: true }) %></script><script type="text/template" id="JsonRemoveValue"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({
    id: "Data",
    description: tr("JSON string or object to remove"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    help: {
      description: tr("JSON string or object to remove value. You can specify a valid JSON string here or an object whose type is not simple. Simple types include numbers, boolean values, null value.")
    }
  }) %>
  <%= _.template($('#input_constructor').html())({
    id: "Path",
    description: tr("JSONPath query to remove value"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    variants: [
      "dialogs[*].title<br/><span style='color:gray;font-size:small'>" + tr("The titles of all dialogs.") + "</span>",
      "user.age<br/><span style='color:gray;font-size:small'>" + tr("The age of user.") + "</span>",
      "$..cart[2]<br/><span style='color:gray;font-size:small'>" + tr("The third item in cart.") + "</span>",
      "$..cart[-2:]<br/><span style='color:gray;font-size:small'>" + tr("The last two items in the cart.") + "</span>",
      "$..*<br/><span style='color:gray;font-size:small'>" + tr("All possible elements.") + "</span>",
    ],
    help: {
      description: tr("Any JSONPath query that you need."),
      examples: [
        {
          code: "$.dialogs[*].title",
          description: tr("The titles of all dialogs.")
        },
        {
          code: "dialogs[*].title",
          description: tr("The titles of all dialogs.")
        },
        {
          code: "$.user.age",
          description: tr("The age of user.")
        },
        {
          code: "user.age",
          description: tr("The age of user.")
        },
        {
          code: "$..cart[2]",
          description: tr("The third item in cart.")
        },
        {
          code: "$..cart[-2:]",
          description: tr("The last two items in the cart.")
        },
        {
          code: "$..cart[(@.length - 1)]",
          description: tr("The last item in the cart.")
        },
        {
          code: "$..cart[-1:]",
          description: tr("The last item in the cart.")
        },
        {
          code: "$['secret.identity']",
          description: tr("Property with dot in name.")
        },
        {
          code: "$[(\"secret.identity\")]",
          description: tr("Property with dot in name.")
        },
        {
          code: "$..*",
          description: tr("All possible elements.")
        },
      ]
    }
  }) %>
  <%= _.template($('#variable_constructor').html())({
    id: "Save",
    description: tr("Variable to save"),
    default_variable: "MODIFIED_JSON",
    help: {
      description: tr("Variable that stores the result of removing (Modified object or string).")
    }
  }) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Execute JSONPath query and remove object value.</div>
  <div class="tr tooltip-paragraph-fold">The type of the returned object will be the same as the original variable. This means that if you specify a string, the string will be returned; if you specify an object, the object will be returned.</div>
  <div class="tr tooltip-paragraph-fold">JSONPath query should not be empty. If you want to change the data format, use the <a href="#!/JsonToString">JSON to string</a> or <a href="#!/JsonFromString">String to JSON</a> action.</div>
  <div class="tr tooltip-paragraph-fold">JSON is a text format for data exchange, serialization (storage) of objects, arrays, numbers, strings, logical values and <span style="color:black">null</span> values. It is based on JavaScript syntax, but still different from it: not every JavaScript code is JSON, and not every JSON is JavaScript code.</div>
  <div class="tr tooltip-paragraph-fold">JSONPath is a powerful tool for working with the JSON data type. It is built on the basis of logic, which is very similar to XPath, but has some limitations, because the data type itself is much simpler than XML.</div>
  <div class="tr tooltip-paragraph-fold">Using this technology, we can quickly get data from JavaScript objects or strings in JSON format. In addition, this greatly simplifies the work, as usually, parsing JSON requires writing code.</div>
  <div class="tr tooltip-paragraph-fold">You can use simple paths, as if you yourself modify or delete a value in the code. For example, we have a line like <span style="color:black">{"name":"John", "data":{"score": 10, "tries": 5}}</span> and want to remove the value of <span style="color:black">data.score</span>. To do this, we indicate as a query a string like <span style="color:black">$.data.score</span> or <span style="color:black">data.score</span>. As a result, we get a string like <span style="color:black">{"name":"John", "data":{"tries": 5}}</span>. This will also work with arrays. For example, if you have an array <span style="color:black">array</span> and want to remove the first element, use a query like <span style="color:black">$.array[0]</span>.</div>
  <div class="tr tooltip-paragraph-fold">This action also supports complex queries - for example, using filters - <span style="color:black">$.data[?(@.price &lt;= 100)]</span>. In addition, you can access properties that contain special characters, such as the period character - <span style="color:black">$.data[("secret.token")]</span> or <span style="color:black">$.data['secret.token']</span>. When using double quotes, always enclose the property name in parentheses.</div>
  <div class="tr tooltip-paragraph-fold">You can use the <a href="#!/JsonChangeValue">Change value</a> action to add new properties to the object - just specify the query that leads to the desired key. For example, if we have an object of the form <span style="color:black">{"name":"John"}</span>, we can add a property <span style="color:black">age</span> with the value <span style="color:black">25</span> using the <span style="color:black">$.age</span> query.</div>
  <div class="tr tooltip-paragraph-last-fold">See full documentation and examples <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://cheshirecaat.github.io/bas-docs/json-path/json-path-en.html'); return false;"><span class="tr">here.</span></a></div>
</div>
<%= _.template($('#back').html())({ action: "executeandadd", visible: true }) %></script><script type="text/template" id="JsonCheckFormat"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({
    id: "Data",
    description: tr("JSON string to check"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    help: {
      description: tr("Target string to perform the check.")
    }
  }) %>
  <%= _.template($('#variable_constructor').html())({
    id: "Save",
    description: tr("Variable to save"),
    default_variable: "PARSED_JSON_CHECK",
    help: {
      description: tr("Variable that stores the result of format checking (true or false).")
    }
  }) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Check that selected variable is valid JSON string and return the result to a variable.</div>
  <div class="tr tooltip-paragraph-fold">JSON is a text format for data exchange, serialization (storage) of objects, arrays, numbers, strings, logical values and <span style="color:black">null</span> values. It is based on JavaScript syntax, but still different from it: not every JavaScript code is JSON, and not every JSON is JavaScript code.</div>
  <div class="tr tooltip-paragraph-fold">With this action, you can see if you can use the string to parse JSON and retrieve data to avoid possible errors.</div>
  <div class="tr tooltip-paragraph-fold">Please note that if you specify as a variable for checking not a string, but a variable of any other type - the result will always be <span style="color:black">false</span>. In this regard, this action is different from the JavaScript function <span style="color:black">JSON.parse()</span>, as there is an additional check for suitable types.</div>
  <div class="tr tooltip-paragraph-fold">For example, checking for the string <span style="color:black">{"name":"John"}</span> will return <span style="color:black">true</span>, because it has a valid JSON format. The string <span style="color:black">"name":"John"</span> will have an incorrect structure, it does not have curly braces, so the result will be <span style="color:black">false</span>.</div>
  <div class="tr tooltip-paragraph-last-fold">See full documentation and examples <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://cheshirecaat.github.io/bas-docs/json-path/json-path-en.html'); return false;"><span class="tr">here.</span></a></div>
</div>
<%= _.template($('#back').html())({ action: "executeandadd", visible: true }) %></script><script type="text/template" id="JsonChangeFormat"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({
    id: "Data",
    description: tr("JSON string or object to change"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    help: {
      description: tr("JSON string or object to format changing. You can specify a valid JSON string here or an object whose type is not simple. Simple types include numbers, boolean values, null value.")
    }
  }) %>
	<%= _.template($('#input_constructor').html())({
    id: "Type",
    description: tr("New data format"),
    default_selector: "string",
    disable_int: true,
    value_string: "String",
    variants: ['String', 'JSON'],
    help: {
      description: tr("New data format for your variable. You can use only two options: String or JSON.")
    }
  }) %>
  <%= _.template($('#variable_constructor').html())({
    id: "Save",
    description: tr("Variable to save"),
    default_variable: "FORMATTED_JSON",
    help: {
      description: tr("Variable that stores the result of format changing (object or string).")
    }
  }) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Change the format of the selected JSON string or object and return the result to the variable.</div>
  <div class="tr tooltip-paragraph-fold">If you specify an object of the wrong type or an incorrect format, the result will be the same object.</div>
  <div class="tr tooltip-paragraph-fold">This action is deprecated. It's recommended to use the <a href="#!/JsonToString">JSON to string</a> or <a href="#!/JsonFromString">String to JSON</a> action.</div>
  <div class="tr tooltip-paragraph-fold">JSON is a text format for data exchange, serialization (storage) of objects, arrays, numbers, strings, logical values and <span style="color:black">null</span> values. It is based on JavaScript syntax, but still different from it: not every JavaScript code is JSON, and not every JSON is JavaScript code.</div>
  <div class="tr tooltip-paragraph-fold">Use action <a href="#!/JsonCheckFormat">Check if string matches JSON</a> to make sure that string conversion is possible or just use the <span style="color:black">Ignore Errors</span> action to handle possible errors.</div>
  <div class="tr tooltip-paragraph-fold">With this action, you can convert a JSON string to a JavaScript object and vice versa.</div>
  <div class="tr tooltip-paragraph-fold">For example, changing format of the string <span style="color:black">{"name":"John"}</span> will return object that contains one property - <span style="color:black">name</span> with value <span style="color:black">John</span>.</div>
  <div class="tr tooltip-paragraph-fold">In a similar way, we can do the inverse transformation, i.e. make a JSON format string from the object. For example, we have an object with two parameters. One of them is an array of three numbers, the other is a simple string. Let it be student performance data for the subject. After converting, we can get a JSON string of the form like <span style="color:black">{"name":"John","grades":[5,5,4]}</span>.</div>
  <div class="tr tooltip-paragraph-fold">Remember that this function is required for a simple conversion. You can use other actions with both the object and the string. It is recommended that you use the <span style="color:black">Get value</span> or <span style="color:black">Get all values</span> actions if you want to get specific information about an object or JSON string.</div>
  <div class="tr tooltip-paragraph-last-fold">See full documentation and examples <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://cheshirecaat.github.io/bas-docs/json-path/json-path-en.html'); return false;"><span class="tr">here.</span></a></div>
</div>
<%= _.template($('#back').html())({ action: "executeandadd", visible: true }) %></script><script type="text/template" id="JsonFromString"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({
    id: "Data",
    description: tr("Target string"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    help: {
      description: tr("Target string to convert. If a value of the incorrect type is provided, it will be returned unchanged.")
    }
  }) %>
  <%= _.template($('#variable_constructor').html())({
    id: "Save",
    description: tr("Variable to save"),
    default_variable: "JSON_OBJECT",
    help: {
      description: tr("Variable that stores the conversion result.")
    }
  }) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Convert the selected string to a JSON object and return the result to a variable.</div>
  <div class="tr tooltip-paragraph-fold">Use the <a href="#!/JsonToString">JSON to string</a> action for reverse conversion (from object to string).</div>
  <div class="tr tooltip-paragraph-fold">JSON is a text format for data exchange, serialization (storage) of objects, arrays, numbers, strings, logical values and <span style="color:black">null</span> values. It is based on JavaScript syntax, but still different from it: not every JavaScript code is JSON, and not every JSON is JavaScript code.</div>
  <div class="tr tooltip-paragraph-fold">Use action <a href="#!/JsonCheckFormat">Check if string matches JSON</a> to make sure that string conversion is possible or just use the <span style="color:black">Ignore Errors</span> action to handle possible errors.</div>
  <div class="tr tooltip-paragraph-fold">With this action, you can convert a JSON string to a JavaScript object.</div>
  <div class="tr tooltip-paragraph-fold">For example, changing format of the string <span style="color:black">{"name":"John"}</span> will return object that contains one property - <span style="color:black">name</span> with value <span style="color:black">John</span>.</div>
  <div class="tr tooltip-paragraph-fold">In a similar way, we can do the inverse transformation, i.e. make a JSON format string from the object. For example, we have an object with two parameters. One of them is an array of three numbers, the other is a simple string. Let it be student performance data for the subject. After converting, we can get a JSON string of the form like <span style="color:black">{"name":"John","grades":[5,5,4]}</span>.</div>
  <div class="tr tooltip-paragraph-fold">Remember that this function is required for a simple conversion. You can use other actions with both the object and the string. It is recommended that you use the <span style="color:black">Get value</span> or <span style="color:black">Get all values</span> actions if you want to get specific information about an object or JSON string.</div>
  <div class="tr tooltip-paragraph-last-fold">See full documentation and examples <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://cheshirecaat.github.io/bas-docs/json-path/json-path-en.html'); return false;"><span class="tr">here.</span></a></div>
</div>
<%= _.template($('#back').html())({ action: "executeandadd", visible: true }) %></script><script type="text/template" id="JsonToString"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({
    id: "Data",
    description: tr("Target object"),
    default_selector: "string",
    disable_int: true,
    value_string: "",
    help: {
      description: tr("Target object to convert. If a value of the incorrect type is provided, it will be returned unchanged.")
    }
  }) %>
  <%= _.template($('#variable_constructor').html())({
    id: "Save",
    description: tr("Variable to save"),
    default_variable: "JSON_STRING",
    help: {
      description: tr("Variable that stores the conversion result.")
    }
  }) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Convert the selected JSON object to a string and return the result to a variable.</div>
  <div class="tr tooltip-paragraph-fold">Use the <a href="#!/JsonFromString">String to JSON</a> action for reverse conversion (from string to object).</div>
  <div class="tr tooltip-paragraph-fold">JSON is a text format for data exchange, serialization (storage) of objects, arrays, numbers, strings, logical values and <span style="color:black">null</span> values. It is based on JavaScript syntax, but still different from it: not every JavaScript code is JSON, and not every JSON is JavaScript code.</div>
  <div class="tr tooltip-paragraph-fold">Use action <a href="#!/JsonCheckFormat">Check if string matches JSON</a> to make sure that string conversion is possible or just use the <span style="color:black">Ignore Errors</span> action to handle possible errors.</div>
  <div class="tr tooltip-paragraph-fold">With this action, you can convert a JavaScript object to a JSON string.</div>
  <div class="tr tooltip-paragraph-fold">For example, changing format of the string <span style="color:black">{"name":"John"}</span> will return object that contains one property - <span style="color:black">name</span> with value <span style="color:black">John</span>.</div>
  <div class="tr tooltip-paragraph-fold">In a similar way, we can do the inverse transformation, i.e. make a JSON format string from the object. For example, we have an object with two parameters. One of them is an array of three numbers, the other is a simple string. Let it be student performance data for the subject. After converting, we can get a JSON string of the form like <span style="color:black">{"name":"John","grades":[5,5,4]}</span>.</div>
  <div class="tr tooltip-paragraph-fold">Remember that this function is required for a simple conversion. You can use other actions with both the object and the string. It is recommended that you use the <span style="color:black">Get value</span> or <span style="color:black">Get all values</span> actions if you want to get specific information about an object or JSON string.</div>
  <div class="tr tooltip-paragraph-last-fold">See full documentation and examples <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://cheshirecaat.github.io/bas-docs/json-path/json-path-en.html'); return false;"><span class="tr">here.</span></a></div>
</div>
<%= _.template($('#back').html())({ action: "executeandadd", visible: true }) %></script><script type="text/template" id="CreateList"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable To Save List"), default_variable: "NEW_LIST"}) %>
    <%= _.template($('#input_constructor').html())({id:"Value1", description:tr("Value 1. Can be empty"), default_selector: "string"}) %>
    <%= _.template($('#input_constructor').html())({id:"Value2", description:tr("Value 2. Can be empty"), default_selector: "string"}) %>
    <%= _.template($('#input_constructor').html())({id:"Value3", description:tr("Value 3. Can be empty"), default_selector: "string"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Create a new list with initial values ​​(optional).</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="AddElement"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
    <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Value to add"), default_selector: "string"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Add an item to the end of the list.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="GetElementByIndex"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
    <%= _.template($('#input_constructor').html())({id:"Index", description:tr("Index"), default_selector: "int", disable_string:true, value_number:0,min_number:-9999999}) %>
    <%= _.template($('#checkbox').html())({id: "Check", title: tr("Remove From List")}) %>
    <%= _.template($('#variable_constructor').html())({id:"VariableResult", description:tr("List Element"), default_variable: "LIST_ELEMENT"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get element of the list at specific index.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="FirstListElement"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
    <%= _.template($('#checkbox').html())({id: "Check", title: tr("Remove From List")}) %>
    <%= _.template($('#variable_constructor').html())({id:"VariableResult", description:tr("List Element"), default_variable: "FIRST_LIST_ELEMENT"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the first item from the specified list.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="LastListElement"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
    <%= _.template($('#checkbox').html())({id: "Check", title: tr("Remove From List")}) %>
    <%= _.template($('#variable_constructor').html())({id:"VariableResult", description:tr("List Element"), default_variable: "LAST_LIST_ELEMENT"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the last item from the specified list.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="RandomListElement"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
    <%= _.template($('#checkbox').html())({id: "Check", title: tr("Remove From List")}) %>
    <%= _.template($('#variable_constructor').html())({id:"VariableResult", description:tr("List Element"), default_variable: "RANDOM_LIST_ELEMENT"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the random item from the specified list.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="InsertElement"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
    <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Value to add"), default_selector: "string"}) %>
    <%= _.template($('#input_constructor').html())({id:"Index", description:tr("Index"), default_selector: "int", value_number: 0, min_number: -999999}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Insert an item into specific position inside the list.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="ListSetElement"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
    <%= _.template($('#input_constructor').html())({id:"Index", description:tr("Index"), default_selector: "int", disable_string:true, min_number: -999999, value_number: 0}) %>
    <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Value"), default_selector: "string"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Change list item at specific position.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="DeleteByIndex"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
    <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Index"), default_selector: "int", disable_string:true, min_number: -999999, value_number: 0}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Remove an item with a specific index from the list.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="DeleteByValue"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
    <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Value"), default_selector: "string", min_number: -999999, value_number: 0}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Remove all items with a specific value from the list.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="ListLength"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
    <%= _.template($('#variable_constructor').html())({id:"VariableLength", description:tr("Variable To Save Length"), default_variable: "LIST_LENGTH"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get number of items in the list.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="ListContains"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
	<%= _.template($('#input_constructor').html())({id:"Value", description:tr("Value"), default_selector: "string"}) %>
    <%= _.template($('#variable_constructor').html())({id:"VariableSave", description:tr("Variable To Save Result"), default_variable: "LIST_CONTAINS"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Check if the list contains a specific value.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="Sublist"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
    <%= _.template($('#input_constructor').html())({id:"IndexStart", description:tr("Start Index"), default_selector: "int", disable_string:true, min_number: -999999, value_number: 0}) %>
    <%= _.template($('#input_constructor').html())({id:"IndexEnd", description:tr("Length"), default_selector: "int", disable_string:true, min_number: -999999, value_number: 10}) %>
    <%= _.template($('#variable_constructor').html())({id:"VariableNewList", description:tr("New List"), default_variable: "NEW_SUBLIST"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get a sublist of a certain number of items from a list.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="RemoveListPart"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
    <%= _.template($('#input_constructor').html())({id:"IndexStart", description:tr("Start Index"), default_selector: "int", disable_string:true, min_number: -999999, value_number: 0}) %>
    <%= _.template($('#input_constructor').html())({id:"IndexEnd", description:tr("End Index"), default_selector: "int", disable_string:true, min_number: -999999, value_number: 10}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Remove a specific range of items from the list.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="RemoveDuplicates"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Remove duplicate items from the specified list.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="ListJoin"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
    <%= _.template($('#input_constructor').html())({id:"Separator", description:tr("Separator"), default_selector: "string", variants: [{value:"&#034;\\n&#034;",type:"expression",description:tr("Line break, join into multiline text")},{value:"&#034;\\r\\n&#034;",type:"expression",description:tr("Carriage return and line break, join into multiline text")}], disable_int:true, value_string: ","}) %>
    <%= _.template($('#variable_constructor').html())({id:"VariableResult", description:tr("New List"), default_variable: "JOIN_RESULT_STRING"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Join all elements of the list into a string using a specific separator.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="ParseStringToList"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({id:"String", description:tr("String To Parse"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#input_constructor').html())({id:"Separator", description:tr("Separator"), default_selector: "string", disable_int:true, value_string: ","}) %>
	<%= _.template($('#variable_constructor').html())({id:"VariableResult", description:tr("Result List"), default_variable: "PARSED_LIST"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Split string into a list by a specific separator.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="GetElementIndex"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
	<%= _.template($('#input_constructor').html())({id:"Value", description:tr("Value"), default_selector: "string"}) %>
    <%= _.template($('#variable_constructor').html())({id:"VariableSave", description:tr("Variable To Save Result"), default_variable: "VALUE_INDEX"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the item index with a specific value from the list.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="CopyList"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
    <%= _.template($('#variable_constructor').html())({id:"VariableNewList", description:tr("New List"), default_variable: "NEW_LIST"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get a full copy of the list.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="ListSort"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Sort the elements of the list.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="ShuffleList"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Shuffle all list items in the random order.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="ListMerge"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
	<%= _.template($('#variable_constructor').html())({id:"VariableSecond", description:tr("List To Merge"), default_variable: ""}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Add all items from one list to another.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="ListCompare"><div class="container-fluid">
	<%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable With List"), default_variable: ""}) %>
	<%= _.template($('#variable_constructor').html())({id:"VariableSecond", description:tr("List To Compare"), default_variable: ""}) %>
	<%= _.template($('#variable_constructor').html())({id:"VariableResult", description:tr("Result"), default_variable: "LIST_COMPARE_RESULT"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Compare the two specified lists item by item. Returns true if both lists contain same values, even if they are situated in different order.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="path_base_name"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"path", description: tr("Path"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The path from which to get the last part."),examples:[{code:"/foo/bar/baz/asdf/quux.html"},{code:"D:/test/archive/engine.js"},{code:"C:/foo.php"}]} }) %>
<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
<%= _.template($('#input_constructor').html())({id:"ext", description: tr("File extension to remove"), default_selector: "string", variants: ["*<br/><span style='color:gray;font-size:small'>" + tr("Remove any file extension") + "</span>",".html",".js",".php",".png",".jpg"], disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("The file extension to be removed from the final result. This parameter is case sensitive, if the path is <code style=\"font-size:85%\">\"C:/foo.HTML\"</code> and the extension is <code style=\"font-size:85%\">\".html\"</code>, then the final result is <code style=\"font-size:85%\">\"foo.HTML\"</code>, not <code style=\"font-size:85%\">\"foo\"</code>."),examples:[{code:".html"},{code:".js"},{code:".php"},{code:"*",description:tr("Remove any file extension")},{code:tr("Empty string"),description:tr("Don't remove file extension")}]} }) %>
<%= _.template($('#block_end').html())() %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "PATH_BASE_NAME", help: {description: tr("Variable in which, after successful execution of the action, the last part of the path will be written."), examples:[{code:"quux.html",description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux.html</code>"},{code:"engine.js",description:tr("Path") + ": <code style=\"font-size:85%\">D:/test/archive/engine.js</code>"},{code:"foo.php",description:tr("Path") + ": <code style=\"font-size:85%\">C:/foo.php</code>"},{code:"quux",description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux.html</code>, " + tr("File extension to remove") + ": <code style=\"font-size:85%\">.html</code>"},{code:"engine",description:tr("Path") + ": <code style=\"font-size:85%\">D:/test/archive/engine.js</code>, " + tr("File extension to remove") + ": <code style=\"font-size:85%\">.js</code>"},{code:"foo",description:tr("Path") + ": <code style=\"font-size:85%\">C:/foo.php</code>, " + tr("File extension to remove") + ": <code style=\"font-size:85%\">.php</code>"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get the last part of the specified path.</div>
	<div class="tr tooltip-paragraph-fold">This action will return the last part of the path, which can be a file name with an extension or a folder name, trailing directory separators are ignored.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the path <code>"C:/foo/bar/baz/asdf/quux.html/"</code> is specified, then the action will return <code>"quux.html"</code>.</div>
	<div class="tr tooltip-paragraph-fold">The file extension can be removed from the final result by specifying the removed extension in the corresponding parameter in the additional settings.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the path is <code>"/test/archive/engine.js"</code> and the extension to be removed is <code>".js"</code>, then the action will return <code>"engine"</code>.</div>
	<div class="tr tooltip-paragraph-fold">The "File extension to remove" parameter is case sensitive.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the path is <code>"C:/foo.HTML"</code> and the extension to be removed is <code>".html"</code>, then the action will return <code>"foo.HTML"</code>, not <code>"foo"</code>.</div>
	<div class="tr tooltip-paragraph-fold">You can remove any extension by specifying <code>"*"</code> as the extension to remove.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the path is <code>"D:/sqlite/your.db"</code> and the extension to be removed is <code>"*"</code>, then the action will return <code>"your"</code>.</div>
	<div class="tr tooltip-paragraph-fold">You can get the path directory using the "Get folder from path" action.</div>
	<div class="tr tooltip-paragraph-fold">You can get file extension using the "Get file extension" action.</div>
	<div class="tr tooltip-paragraph-fold">You can parse a path into items using the "Parse path" action.</div>
	<div class="tr tooltip-paragraph-last-fold">If the parameter "Path" or "File extension to remove" is not a string, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="path_directory_name"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"path", description: tr("Path"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The path from which to get the directory."),examples:[{code:"/foo/bar/baz/asdf/quux"},{code:"D:/modules/res/panels/panel3.jpg"},{code:"C:/Users/Admin/Desktop/projects/project.xml"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "PATH_DIRECTORY", help: {description: tr("Variable in which, after successful execution of the action, the directory will be written."), examples:[{code:"/foo/bar/baz/asdf",description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux</code>"},{code:"D:/modules/res/panels",description:tr("Path") + ": <code style=\"font-size:85%\">D:/modules/res/panels/panel3.jpg</code>"},{code:"C:/Users/Admin/Desktop/projects",description:tr("Path") + ": <code style=\"font-size:85%\">C:/Users/Admin/Desktop/projects/project.xml</code>"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get the directory of the specified path.</div>
	<div class="tr tooltip-paragraph-fold">This action will return the directory of the specified path, trailing directory separators are ignored.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the path <code>"C:/foo/bar/baz/asdf/quux.html/"</code> is specified, then the action will return <code>"C:/foo/bar/baz/asdf"</code>.</div>
	<div class="tr tooltip-paragraph-fold">You can parse a path into items using the "Parse path" action.</div>
	<div class="tr tooltip-paragraph-last-fold">If the "Path" parameter is not a string, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="path_extension_name"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"path", description: tr("Path"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The path from which to get the extension."),examples:[{code:"/home/user/dir/file.txt"},{code:"D:/dev/sql/sqlite/your.db"},{code:"C:/Users/Admin/Desktop/site/index.html"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "PATH_FILE_EXTENSION", help: {description: tr("Variable in which, after successful execution of the action, the extension will be written."), examples:[{code:".txt",description:tr("Path") + ": <code style=\"font-size:85%\">/home/user/dir/file.txt</code>"},{code:".db",description:tr("Path") + ": <code style=\"font-size:85%\">D:/dev/sql/sqlite/your.db</code>"},{code:".html",description:tr("Path") + ": <code style=\"font-size:85%\">C:/Users/Admin/Desktop/site/index.html</code>"},{code:tr("Empty string"),description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux</code>"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get the file extension of the specified path.</div>
	<div class="tr tooltip-paragraph-fold">This will return the expansion of the last part of the path, from the last period to the end of the string, trailing directory separators are ignored.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the path <code>"C:/foo/bar/baz/asdf/quux.html/"</code> is specified, then the action will return <code>".html"</code>.</div>
	<div class="tr tooltip-paragraph-fold">If there is no period in the last part or there are no characters before the last period, then the action will return an empty string.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the path is <code>"C:/foo/bar/baz/asdf/quux/"</code> or <code>"C:/foo/bar/baz/asdf/.index"</code>, then the action will return <code>""</code>.</div>
	<div class="tr tooltip-paragraph-fold">You can parse a path into items using the "Parse path" action.</div>
	<div class="tr tooltip-paragraph-last-fold">If the "Path" parameter is not a string, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="is_absolute_path"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"path", description: tr("Path"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The path that need to check out whether it is absolute."),examples:[{code:"/foo/bar", description: tr("Absolute path")},{code:"C:/foo/..", description: tr("Absolute path")},{code:"bar/baz", description: tr("Not absolute path")},{code:"qux/", description: tr("Not absolute path")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "IS_ABSOLUTE_PATH", help: {description: tr("This variable will be true or false depending on whether the specified path is absolute."), examples:[{code:"true",description:tr("The path is absolute.")},{code:"false",description:tr("The path is not absolute.")}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Check if the specified path is absolute.</div>
	<div class="tr tooltip-paragraph-fold">This action will return true or false depending on whether the specified path is absolute. This result may be used with "If" action.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the path is <code>"/foo/bar"</code>, then the action will return true, and if the path is specified <code>"bar/baz"</code> or <code>"qux/"</code>, then the action will return false.</div>
	<div class="tr tooltip-paragraph-last-fold">If the "Path" parameter is not a string, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="join_paths"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"path1", description:tr("Path") + " 1. " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The path to be joined with other paths."),examples:[{code:"C:/Users/Admin/Desktop"},{code:"/foo/bar"},{code:"/baz"},{code:tr("Empty string"), description: tr("The parameters \"Path 2\", \"Path 3\", \"List of paths\" will be used")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"path2", description:tr("Path") + " 2. " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The path to be joined with other paths."),examples:[{code:"C:/Users/Admin/Desktop"},{code:"/foo/bar"},{code:"/baz"},{code:tr("Empty string"), description: tr("The parameters \"Path 1\", \"Path 3\", \"List of paths\" will be used")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"path3", description:tr("Path") + " 3. " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The path to be joined with other paths."),examples:[{code:"C:/Users/Admin/Desktop"},{code:"/foo/bar"},{code:"/baz"},{code:tr("Empty string"), description: tr("The parameters \"Path 1\", \"Path 2\", \"List of paths\" will be used")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"paths_list", description:tr("List of paths") + ". " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("List of paths to be joined.") + " " + tr("As a list, you can use a string consisting of paths, separated by commas."),examples:[{code:"C:/Users/Admin/Desktop,/foo/bar,/baz"},{code:"C:/Users/Admin/Desktop, /foo/bar, /baz"},{code:"[\"C:/Users/Admin/Desktop\", \"/foo/bar\", \"/baz\"]"},{code:tr("Empty string"), description: tr("The parameters \"Path 1\", \"Path 2\", \"Path 3\" will be used")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "JOIN_PATHS_RESULT", help: {description: tr("Variable in which, after successful execution of the action, the final path will be written."), examples:[{code:"C:/Users/Admin/Desktop/foo/bar"},{code:"D:/test/Archive/manifest.json"},{code:"/baz/tost/file.txt"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Join multiple paths into one.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a path composed of all the specified paths.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the parameters "Path 1" and "Path 2" are specified, the values of which are respectively <code>"/foo"</code> and <code>"/bar"</code>, then the action will return <code>"/foo/bar"</code>.</div>
	<div class="tr tooltip-paragraph-fold">Paths from separate fields and a list are added to a general list of paths that will be joined.</div>
	<div class="tr tooltip-paragraph-fold">For example, if a path is specified in the "Path 1" field and a list of 4 paths is specified in the "List of paths" field, then 5 paths will be joined.</div>
	<div class="tr tooltip-paragraph-fold">If some of the parameters ("Path 1", "Path 2", "Path 3", "List of paths") are not specified, all parameters will be used except for them.</div>
	<div class="tr tooltip-paragraph-fold">For example, if "List of paths" is not specified, then the list will be formed from the parameters "Path 1" and "Path 2" and "Path 3". If the parameters "Path 1", "Path 2", "Path 3" are empty, then the "List of paths" will be used. If all parameters are specified, then all of them will be used.</div>
	<div class="tr tooltip-paragraph-fold">The order of joining the fields is as follows "Path 1", "Path 2", "Path 3", "List of paths".</div>
	<div class="tr tooltip-paragraph-fold">The list can be created using actions from the "List" module.</div>
	<div class="tr tooltip-paragraph-last-fold">If any of the paths is not a string, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="normalize_path"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"path", description: tr("Path"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The path that need to normalize."),examples:[{code:"C:\\temp\\\\foo\\bar\\..\\"},{code:"C:////temp\\\\/\\/\\/foo/bar"},{code:"/foo/bar//baz/asdf/quux/.."}]} }) %>
<%= _.template($('#checkbox').html())({id: "Check", title: tr("Remove trailing slashes"), checked: true, help: {title:tr("Remove trailing slashes"),description:tr("If enabled, trailing slashes will be removed from the path."),examples:[{code:tr("Activated"),description:tr("Path") + " <code style=\"font-size:85%\">\"C:\\path/\\\"</code>" + tr(" will be normalized to") + " <code style=\"font-size:85%\">\"C:/path\"</code>"},{code:"<br/>" + tr("Deactivated"),description:tr("Path") + " <code style=\"font-size:85%\">\"C:\\path/\\\"</code>" + tr(" will be normalized to") + " <code style=\"font-size:85%\">\"C:/path/\"</code>"},{code:"<br/>" + tr("Activated"),description:tr("Path") + " <code style=\"font-size:85%\">\"\\\"</code>" + tr(" will be normalized to") + " <code style=\"font-size:85%\">\"\"</code>"},{code:"<br/>" + tr("Deactivated"),description:tr("Path") + " <code style=\"font-size:85%\">\"\\\"</code>" + tr(" will be normalized to") + " <code style=\"font-size:85%\">\"/\"</code>"}]}}) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "NORMALIZED_PATH", help: {description: tr("Variable in which, after successful execution of the action, the normalized path will be written."), examples:[{code:"C:/temp/foo",description:tr("Path") + ": <code style=\"font-size:85%\">C:\\temp\\\\foo\\bar\\..\\</code> " + tr("and \"Remove trailing slashes\" activated")},{code:"C:/temp/foo/bar",description:tr("Path") + ": <code style=\"font-size:85%\">C:////temp\\\\/\\/\\/foo/bar</code>"},{code:"/foo/bar/baz/asdf",description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar//baz/asdf/quux/..</code>"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Normalize path.</div>
	<div class="tr tooltip-paragraph-fold">This will return the normalized path, multiple slashes will be replaced with single ones, backslashes "&#92;" will be replaced with regular "/", segments ".." and "." will be resolved.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the path <code>"C:////temp&#92;&#92;/&#92;/&#92;/foo/bar/.."</code> is specified, then the action will return <code>"C:/temp/foo"</code>.</div>
	<div class="tr tooltip-paragraph-fold">If the "Remove trailing slashes" parameter is enabled, trailing slashes will be removed from the path, for example, path <code>"С:&#92;path&#92;"</code> will be normalized to <code>"С:/path"</code>.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the path <code>"C:&#92;path/&#92;"</code> is specified, then the action will return <code>"C:/path"</code>.</div>
	<div class="tr tooltip-paragraph-fold">If you need to compare paths, then first normalize them with this action.</div>
	<div class="tr tooltip-paragraph-last-fold">If the "Path" parameter is not a string, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="parse_path"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"path", description: tr("Path"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The path that need to parse."),examples:[{code:"/foo/bar/baz/asdf/quux.html"},{code:"D:/test/archive/engine.js"},{code:"C:/foo.php"},{code:"/foo/bar/baz/asdf/quux"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"root", description:tr("Root"), default_variable: "PATH_ROOT", help: {description: tr("This variable will contain the root of the specified path."), examples:[{code:"/",description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux.html</code>"},{code:"D:/",description:tr("Path") + ": <code style=\"font-size:85%\">D:/test/archive/engine.js</code>"},{code:"C:/",description:tr("Path") + ": <code style=\"font-size:85%\">C:/foo.php</code>"},{code:"/",description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux</code>"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"dir", description:tr("Directory"), default_variable: "PATH_DIRECTORY", help: {description: tr("This variable will contain the directory of the specified path."), examples:[{code:"/foo/bar/baz/asdf",description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux.html</code>"},{code:"D:/test/archive",description:tr("Path") + ": <code style=\"font-size:85%\">D:/test/archive/engine.js</code>"},{code:"C:/",description:tr("Path") + ": <code style=\"font-size:85%\">C:/foo.php</code>"},{code:"/foo/bar/baz/asdf",description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux</code>"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"base", description:tr("Last part"), default_variable: "PATH_BASE_NAME", help: {description: tr("This variable will contain the last part of the specified path."), examples:[{code:"quux.html",description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux.html</code>"},{code:"engine.js",description:tr("Path") + ": <code style=\"font-size:85%\">D:/test/archive/engine.js</code>"},{code:"foo.php",description:tr("Path") + ": <code style=\"font-size:85%\">C:/foo.php</code>"},{code:"quux",description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux</code>"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"ext", description:tr("File extension"), default_variable: "PATH_FILE_EXTENSION", help: {description: tr("This variable will contain the file extension of the specified path. If the path does not contain the file extension, then the variable will contain an empty string."), examples:[{code:".html",description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux.html</code>"},{code:".js",description:tr("Path") + ": <code style=\"font-size:85%\">D:/test/archive/engine.js</code>"},{code:".php",description:tr("Path") + ": <code style=\"font-size:85%\">C:/foo.php</code>"},{code:tr("Empty string"),description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux</code>"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"name", description:tr("File name"), default_variable: "PATH_FILE_NAME", help: {description: tr("This variable will contain the name of the file or directory of the specified path, filename will be saved without extension."), examples:[{code:"quux",description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux.html</code>"},{code:"engine",description:tr("Path") + ": <code style=\"font-size:85%\">D:/test/archive/engine.js</code>"},{code:"foo",description:tr("Path") + ": <code style=\"font-size:85%\">C:/foo.php</code>"},{code:"quux",description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux</code>"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"items", description:tr("List of path items"), default_variable: "PATH_ITEMS_LIST", help: {description: tr("This variable will contain a list of all items of the specified path. The resulting list can be processed using actions from the \"List\" module."), examples:[{code:"[\"foo\",\"bar\",\"baz\",\"asdf\",\"quux.html\"]",description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux.html</code>"},{code:"[\"D:\",\"test\",\"archive\",\"engine.js\"]",description:tr("Path") + ": <code style=\"font-size:85%\">D:/test/archive/engine.js</code>"},{code:"[\"C:\",\"foo.php\"]",description:tr("Path") + ": <code style=\"font-size:85%\">C:/foo.php</code>"},{code:"[\"foo\",\"bar\",\"baz\",\"asdf\",\"quux\"]",description:tr("Path") + ": <code style=\"font-size:85%\">/foo/bar/baz/asdf/quux</code>"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Parse the path into items.</div>
	<div class="tr tooltip-paragraph-fold">This action will save each item of the path to its own variable. You can learn more about paths in <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/Path_(computing)');return false">Wiki</a>.</div>
	<div class="tr tooltip-paragraph-last-fold">If the "Path" parameter is not a string, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="script_stats_project_path"><div class="container-fluid">
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "PROJECT_PATH", help: {description: tr("Variable in which, after successful execution of the action, the path to the project file will be written."), examples:[{code:"D:/projects/Gparser.xml",description:tr("Not compiled script")},{code:"D:/Gparser/appslocal/ibq8y9qo/SID/engine/project.xml",description:tr("Unprotected compiled script")},{code:"D:/Gparser/appsremote/Gparser/SID/engine/project.xml",description:tr("Protected compiled script")}]}}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the full path to the project file.</div>
	<div class="tr tooltip-paragraph-fold">This action will return the full path to the project file. If the script is not compiled, then this action will return the path to the open project file. And if the script is compiled, then this action will return the path to the project.xml file located in the root folder of the engine.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">For example, if the script is not compiled and the <code>"Gparser"</code> project located in the <code>"D:/projects"</code> folder is open, then the action will return</span> <code>"D:/projects/Gparser.xml"</code>.</div>
	<div class="tr tooltip-paragraph-fold">For compiled unprotected and protected scripts, the paths are slightly different, since the unprotected script saves the engine to the appslocal folder, and the protected one to the appsremote folder.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">For example, if the script is compiled without protection and is located in the <code>"D:/Gparser"</code> folder, then the action will return</span> <code>"D:/Gparser/appslocal/ibq8y9qo/SIDbfzc5bdv/engine/project.xml"</code>.</div>
	<div class="tooltip-paragraph-last-fold"><span class="tr">For example, if the script is compiled with protection and is located in the <code>"D:/Gparser"</code> folder, then the action will return</span> <code>"D:/Gparser/appsremote/Gparser/SIDic9cmk8n/engine/project.xml"</code>.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="project_directory"><div class="container-fluid">
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "PROJECT_DIRECTORY", help: {description: tr("Variable in which, after successful execution of the action, the path to the project directory will be written."), examples:[{code:"D:/projects",description:tr("Not compiled script")},{code:"D:/Gparser",description:tr("Unprotected compiled script") + "<strong>/</strong>" + tr("Protected compiled script")}]}}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the full path to the project directory.</div>
	<div class="tr tooltip-paragraph-last-fold">This action will return the full path to the project directory. If the script is not compiled, then this action will return the path to the directory in which the open project file is located. And if the script is compiled, then this action will return the path to the root directory of the script.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="installation_path"><div class="container-fluid">
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "INSTALLATION_PATH", help: {description: tr("Variable in which, after successful execution of the action, the installation path will be written."), examples:[{code:"C:/BrowserAutomationStudio/apps/24.0.8",description:tr("Not compiled script")},{code:"D:/Gparser/appslocal/ibq8y9qo/SID/engine",description:tr("Unprotected compiled script")},{code:"D:/Gparser/appsremote/Gparser/SID/engine",description:tr("Protected compiled script")}]}}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the full installation path.</div>
	<div class="tr tooltip-paragraph-fold">This action will return the full path to the directory where the executable file is located.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">For example, if the script is not compiled and is running BAS version <code>24.0.8</code> installed in the <code>"C:/BrowserAutomationStudio"</code> folder, then the action will return</span> <code>"C:/BrowserAutomationStudio/apps/24.0.8"</code>.</div>
	<div class="tr tooltip-paragraph-fold">For compiled unprotected and protected scripts, the paths are slightly different, since the unprotected script saves the engine to the appslocal folder, and the protected one to the appsremote folder.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">For example, if the script is compiled without protection and is located in the <code>"D:/Gparser"</code> folder, then the action will return</span> <code>"D:/Gparser/appslocal/ibq8y9qo/SIDbfzc5bdv/engine"</code>.</div>
	<div class="tooltip-paragraph-last-fold"><span class="tr">For example, if the script is compiled with protection and is located in the <code>"D:/Gparser"</code> folder, then the action will return</span> <code>"D:/Gparser/appsremote/Gparser/SIDic9cmk8n/engine"</code>.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="get_system_path"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"name", description: tr("Path name"), default_selector: "string", variants:["Program Files","Program Files (x86)","Desktop","Downloads","Documents","Pictures","Videos","Music","Favorites","App Data","Local App Data","User Profile","Public","Program Data","System Drive","System Root","Windows Directory","Temp","User Name","Computer Name"], disable_int:true, value_string: "Program Files", help: {description: tr("The name of the path that you want to receive."),examples:[{code:"Program Files"},{code:"AppData"},{code:"Desktop"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "RECEIVED_PATH", help: {description: tr("Variable in which, after successful execution of the action, the resulting path will be written."), examples:[{code:"C:/Program Files",description:tr("Path name") + ": <code style=\"font-size:85%\">Program Files</code>"},{code:"C:/Users/Admin/AppData/Roaming",description:tr("Path name") + ": <code style=\"font-size:85%\">AppData</code>"},{code:"C:/Users/Admin/Desktop",description:tr("Path name") + ": <code style=\"font-size:85%\">Desktop</code>"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get the system path with the specified name.</div>
	<div class="tr tooltip-paragraph-fold"><b>Program Files</b> - Path to the "Program Files" directory. Example: <code>"C:/Program Files"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>Program Files (x86)</b> - The path to the "Program Files (x86)" directory on 64-bit systems for x86 architecture applications. Example: <code>"C:/Program Files (x86)"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>Desktop</b> - Path to the "Desktop" directory. Example: <code>"C:/Users/Admin/Desktop"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>Downloads</b> - Path to the "Downloads" directory. Example: <code>"C:/Users/Admin/Downloads"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>Documents</b> - Path to the "Documents" directory. Example: <code>"C:/Users/Admin/Documents"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>Pictures</b> - Path to the "Pictures" directory. Example: <code>"C:/Users/Admin/Pictures"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>Videos</b> - Path to the "Videos" directory. Example: <code>"C:/Users/Admin/Videos"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>Music</b> - Path to the "Music" directory. Example: <code>"C:/Users/Admin/Music"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>Favorites</b> - Path to the "Favorites" directory. Example: <code>"C:/Users/Admin/Favorites"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>App Data</b> - The default location for app data. Example: <code>"C:/Users/Admin/AppData/Roaming"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>Local App Data</b> - The default local location for application data. Example: <code>"C:/Users/Admin/AppData/Local"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>User Profile</b> - The path to the profile of the current user. Example: <code>"C:/Users/Admin"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>System Drive</b> - The drive where the Windows root directory is located. Example: <code>"C:"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>System Root</b> - The path to the Windows root directory. Example: <code>"C:/Windows"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>Windows Directory</b> - The directory where Windows is installed. Example: <code>"C:/Windows"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>Temp</b> - Path to the temporary directory. Example: <code>"C:/Users/Admin/AppData/Local/Temp"</code>.</div>
	<div class="tr tooltip-paragraph-fold"><b>User Name</b> - The name of the current user. Example: <code>"Admin"</code>.</div>
	<div class="tr tooltip-paragraph-last-fold"><b>Computer Name</b> - Computer name. Example: <code>"ADMIN"</code>.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="SMS_GetNumber"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "service",
		description: tr("Service"),
		default_selector: "string",
		variants: [
			{value: "sms-activate.org", description: tr("Ex sms-activate.ru")},
			"smshub.org",
			"5sim.net",
			{value: "onlinesim.io", description: tr("Ex onlinesim.ru")},
			{value: "smsak.org", description: tr("Ex sms-acktiwator.ru")},
			"sms-reg.com",
			{value: "vak-sms.ru", description: tr("Ex vak-sms.com")},
			"give-sms.com",
			"getsms.online",
			"sms-man.ru",
			{value: "cheapsms.io", description: tr("Ex cheapsms.ru")},
			{value: "smscode.me", description: tr("Ex sms.kopeechka.store")},
			{value: "365sms.org", description: tr("Ex 365sms.ru")},
			"smspva.com",
			"simsms.org"
		],
		disable_int: true,
		value_string: "sms-activate.org",
		help: {
			description: tr("Service for receiving SMS, from which need to get a phone number."),
			examples: [
				{code: "sms-activate.org", description: "https://sms-activate.org"},
				{code: "smshub.org", description: "https://smshub.org"},
				{code: "sms-reg.com", description: "https://sms-reg.com"}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "apiKey",
		description: tr("API key"),
		default_selector: "string",
		disable_int: true,
		value_string: "",
		help: {
			description: tr("API key of the SMS receiving service. The key for the service selected in the \"Service\" parameter. Depending on the service, you can get it in your personal account or in the service settings."),
			examples: [
				{code: "8b1a9953c4611296a827abf8c47804d7"},
				{code: "79916U5718g2266a7bff7fad356c6cb280b3ea"},
				{code: "f4d559ba78aa6c4701c1995ae9977c03"}
			]
		}
	}) %>
	<%= _.template($('#combobox').html())({id: "site", title: tr("Site"), search: true, items: [
			{value: "Other", selected: true, name: tr("Other"), title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "1and1", name: "1and1", title: "sms-activate, smshub, 365sms"},
			{value: "1Cupis", name: "1Cupis", title: "cheapsms, sms-reg, onlinesim, vak-sms"},
			{value: "1mg", name: "1mg", title: "5sim, onlinesim"},
			{value: "1xBet", name: "1xBet", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "2domains", name: "2domains", title: "onlinesim, vak-sms"},
			{value: "4Fun", name: "4Fun", title: "sms-activate, smshub, 365sms, sms-acktiwator, vak-sms, give-sms"},
			{value: "4game", name: "4game", title: "onlinesim, sms-acktiwator"},
			{value: "23red", name: "23red", title: "smshub, 5sim, 365sms, give-sms"},
			{value: "24betting", name: "24betting", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "24u", name: "24u", title: "5sim, onlinesim, vak-sms"},
			{value: "32red", name: "32red", title: "sms-activate, 5sim, onlinesim, vak-sms"},
			{value: "99acres", name: "99acres", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "99app", name: "99app", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "99k Outlet", name: "99k Outlet", title: "sms-activate, smshub, 365sms"},
			{value: "150bar", name: "150bar", title: "onlinesim, vak-sms"},
			{value: "163.com", name: "163.com", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "888casino", name: "888casino", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "1688", name: "1688", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, vak-sms, give-sms"},
			{value: "A9A", name: "A9A", title: "sms-activate, smshub"},
			{value: "A23", name: "A23", title: "sms-activate, smshub, 365sms"},
			{value: "Abbott", name: "Abbott", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Ace2Three", name: "Ace2Three", title: "sms-activate, smshub, 5sim, 365sms, vak-sms, give-sms"},
			{value: "Acko", name: "Acko", title: "sms-activate, smshub, 365sms"},
			{value: "AdaKami", name: "AdaKami", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Adani", name: "Adani", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "adda52", name: "adda52", title: "5sim, onlinesim"},
			{value: "Adidas", name: "Adidas", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Adverts", name: "Adverts", title: "sms-activate, smshub, 365sms"},
			{value: "AfreecaTV", name: "AfreecaTV", title: "sms-activate, smshub, 365sms"},
			{value: "AGIBANK", name: "AGIBANK", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "AgriDevelop", name: "AgriDevelop", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Agroinform", name: "Agroinform", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Airbnb", name: "Airbnb", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Airtel", name: "Airtel", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Airtime", name: "Airtime", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "AIS", name: "AIS", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Aitu", name: "Aitu", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-acktiwator, give-sms"},
			{value: "Akelni", name: "Akelni", title: "5sim, onlinesim"},
			{value: "Akudo", name: "Akudo", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Akulaku", name: "Akulaku", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Alchemy", name: "Alchemy", title: "sms-activate, smshub, 365sms"},
			{value: "Alfa", name: "Alfa", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Alfagift", name: "Alfagift", title: "sms-activate, smshub, 365sms, sms-acktiwator, vak-sms, give-sms"},
			{value: "AlfaStrah", name: "AlfaStrah", title: "sms-reg, onlinesim"},
			{value: "Algida", name: "Algida", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Alibaba", name: "Alibaba", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Aliexpress", name: "Aliexpress", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "AliPay", name: "AliPay", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "All Access", name: "All Access", title: "sms-activate, smshub, 365sms"},
			{value: "Allegro", name: "Allegro", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "AlloBank", name: "AlloBank", title: "sms-activate, smshub, 365sms"},
			{value: "Allofresh", name: "Allofresh", title: "sms-activate, smshub, 365sms"},
			{value: "Amasia", name: "Amasia", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Amazon", name: "Amazon", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Ame Digital", name: "Ame Digital", title: "sms-activate, smshub, 365sms"},
			{value: "Amway", name: "Amway", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Angel One", name: "Angel One", title: "sms-activate, smshub, 365sms"},
			{value: "Anibis", name: "Anibis", title: "sms-activate, smshub, 365sms"},
			{value: "Ankama", name: "Ankama", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Aol", name: "Aol", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "ApostaGanha", name: "ApostaGanha", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Appbonus", name: "Appbonus", title: "onlinesim, sms-acktiwator"},
			{value: "Apple", name: "Apple", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Apteka.ru", name: "Apteka.ru", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, give-sms"},
			{value: "AptekiPlus", name: "AptekiPlus", title: "sms-activate, smshub, onlinesim"},
			{value: "AR Lens", name: "AR Lens", title: "sms-activate, smshub, 365sms"},
			{value: "ArenaPlus", name: "ArenaPlus", title: "sms-activate, smshub, 365sms"},
			{value: "Argent", name: "Argent", title: "sms-activate, smshub, 365sms"},
			{value: "Asda", name: "Asda", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "AsiaMiles", name: "AsiaMiles", title: "sms-activate, smshub, 365sms"},
			{value: "Astra Otoshop", name: "Astra Otoshop", title: "sms-activate, smshub, 365sms"},
			{value: "AstraPay", name: "AstraPay", title: "sms-activate, smshub, 365sms"},
			{value: "Astropay", name: "Astropay", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "AUBANK", name: "AUBANK", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Auchan", name: "Auchan", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Author24", name: "Author24", title: "sms-activate, smshub"},
			{value: "Auto.ru", name: "Auto.ru", title: "sms-activate, smshub, 365sms, onlinesim, sms-acktiwator"},
			{value: "av100pro", name: "av100pro", title: "sms-activate, smshub, 365sms"},
			{value: "Avito", name: "Avito", title: "sms-activate, smshub, 5sim, getsms, 365sms, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "AVON", name: "AVON", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "Aya Bank", name: "Aya Bank", title: "sms-activate, smshub, 365sms"},
			{value: "azar", name: "azar", title: "5sim, onlinesim"},
			{value: "Azino777", name: "Azino777", title: "5sim, onlinesim, sms-acktiwator"},
			{value: "Azino888", name: "Azino888", title: "5sim, onlinesim, sms-acktiwator"},
			{value: "Azsirbis", name: "Azsirbis", title: "onlinesim, vak-sms"},
			{value: "Badoo", name: "Badoo", title: "sms-activate, smshub, 365sms, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms"},
			{value: "Baidu", name: "Baidu", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Baihe", name: "Baihe", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Bajaj Finserv", name: "Bajaj Finserv", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Band", name: "Band", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Bankera", name: "Bankera", title: "sms-activate, smshub, 365sms"},
			{value: "Banki.ru", name: "Banki.ru", title: "5sim, onlinesim, vak-sms"},
			{value: "BankKaro", name: "BankKaro", title: "sms-activate, smshub, 365sms"},
			{value: "Banks", name: "Banks", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Banqi", name: "Banqi", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "Banrisul", name: "Banrisul", title: "sms-activate, smshub, 365sms"},
			{value: "Bazos", name: "Bazos", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "BC Game", name: "BC Game", title: "sms-activate, smshub, 365sms"},
			{value: "BCA Syariah", name: "BCA Syariah", title: "sms-activate, smshub, 365sms"},
			{value: "Bearwww", name: "Bearwww", title: "sms-activate, smshub, 365sms"},
			{value: "Bebeclub", name: "Bebeclub", title: "sms-activate, smshub, 365sms"},
			{value: "beboo", name: "beboo", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "BeeBoo", name: "BeeBoo", title: "sms-activate, smshub, 365sms"},
			{value: "Beget", name: "Beget", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, smspva, onlinesim, sms-acktiwator"},
			{value: "Belwest", name: "Belwest", title: "sms-activate, smshub, 365sms"},
			{value: "Benzuber", name: "Benzuber", title: "cheapsms, onlinesim"},
			{value: "BeReal", name: "BeReal", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "bet365", name: "bet365", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, vak-sms"},
			{value: "Betano", name: "Betano", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "BetBoom", name: "BetBoom", title: "sms-reg, onlinesim"},
			{value: "BetFair", name: "BetFair", title: "sms-activate, smshub, 5sim, 365sms, smspva, sms-acktiwator, give-sms"},
			{value: "Betting", name: "Betting", title: "sms-activate, smshub, getsms, 365sms, sms-acktiwator, give-sms"},
			{value: "betvet", name: "betvet", title: "5sim, onlinesim"},
			{value: "BharatPe", name: "BharatPe", title: "sms-activate, smshub, 365sms"},
			{value: "Biedronka", name: "Biedronka", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "bigbasket", name: "bigbasket", title: "5sim, onlinesim"},
			{value: "BigC", name: "BigC", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "BIGLION", name: "BIGLION", title: "onlinesim, vak-sms"},
			{value: "BIGO LIVE", name: "BIGO LIVE", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Bilibili", name: "Bilibili", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "BillMill", name: "BillMill", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Binance", name: "Binance", title: "sms-reg, onlinesim"},
			{value: "BinBin", name: "BinBin", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "BIP Messenger", name: "BIP Messenger", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Bisu", name: "Bisu", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Bit", name: "Bit", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Bitaqaty", name: "Bitaqaty", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "BitClout", name: "BitClout", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Bitrue", name: "Bitrue", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Bitso", name: "Bitso", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "bittube", name: "bittube", title: "5sim, sms-acktiwator"},
			{value: "BlaBlaCar", name: "BlaBlaCar", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Blank Street", name: "Blank Street", title: "sms-activate, smshub, 365sms"},
			{value: "BLIBLI", name: "BLIBLI", title: "sms-activate, smshub, 365sms, vak-sms, give-sms"},
			{value: "Blizzard", name: "Blizzard", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Blockchain", name: "Blockchain", title: "5sim, cheapsms, onlinesim, sms-acktiwator, vak-sms"},
			{value: "BLS-SPAIN", name: "BLS-SPAIN", title: "sms-activate, smshub, sms-reg, smspva"},
			{value: "Blued", name: "Blued", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "boku", name: "boku", title: "sms-activate, smshub, 365sms"},
			{value: "Bolt", name: "Bolt", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "BonusLink", name: "BonusLink", title: "sms-activate, smshub, 365sms"},
			{value: "Book My Play", name: "Book My Play", title: "sms-activate, smshub, 365sms"},
			{value: "Book24", name: "Book24", title: "cheapsms, onlinesim, vak-sms"},
			{value: "Boosty", name: "Boosty", title: "sms-activate, smshub, 365sms"},
			{value: "Boyaa", name: "Boyaa", title: "sms-activate, smshub, 365sms"},
			{value: "BPJS", name: "BPJS", title: "sms-activate, smshub, 365sms"},
			{value: "BPJSTK", name: "BPJSTK", title: "sms-activate, smshub, 365sms"},
			{value: "Br777", name: "Br777", title: "sms-activate, smshub, 365sms"},
			{value: "Brahma", name: "Brahma", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Brand20.ua", name: "Brand20.ua", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Brevo", name: "Brevo", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "BRO", name: "BRO", title: "sms-activate, smshub, 365sms"},
			{value: "budget4me-34", name: "budget4me-34", title: "sms-activate, smshub, onlinesim, vak-sms"},
			{value: "Budweiser", name: "Budweiser", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Buff.163", name: "Buff.163", title: "onlinesim, vak-sms"},
			{value: "Bukalapak", name: "Bukalapak", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Bumble", name: "Bumble", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Bunda", name: "Bunda", title: "sms-activate, smshub, 365sms"},
			{value: "Bunq", name: "Bunq", title: "sms-activate, smshub, 365sms"},
			{value: "Burger King", name: "Burger King", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "BusyFly", name: "BusyFly", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "ByBit", name: "ByBit", title: "sms-reg, onlinesim"},
			{value: "Bykea", name: "Bykea", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "BytePlus", name: "BytePlus", title: "sms-activate, smshub, 365sms"},
			{value: "C6 Bank", name: "C6 Bank", title: "sms-activate, smshub, 365sms"},
			{value: "Cabify", name: "Cabify", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "CafeBazaar", name: "CafeBazaar", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "CAIXA", name: "CAIXA", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "CallApp", name: "CallApp", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Careem", name: "Careem", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Carousell", name: "Carousell", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "CashApp", name: "CashApp", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "CashFly", name: "CashFly", title: "sms-activate, smshub, 365sms, sms-man, onlinesim, give-sms"},
			{value: "CashKaro", name: "CashKaro", title: "sms-activate, smshub, 5sim, 365sms, sms-man"},
			{value: "Cashmine", name: "Cashmine", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Casino/bet/gambling", name: "Casino/bet/gambling", title: "sms-activate, smshub, 365sms"},
			{value: "CasinoAndFriends", name: "CasinoAndFriends", title: "sms-activate, smshub, 365sms"},
			{value: "CasinoPlus", name: "CasinoPlus", title: "sms-activate, smshub, 365sms"},
			{value: "Cathay", name: "Cathay", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "CDEK", name: "CDEK", title: "sms-activate, smshub, 365sms, vak-sms"},
			{value: "CDKeys", name: "CDKeys", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Celcoin", name: "Celcoin", title: "sms-activate, smshub, 365sms"},
			{value: "CELEBe", name: "CELEBe", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Centrify", name: "Centrify", title: "cheapsms, onlinesim"},
			{value: "ChaingeFinance", name: "ChaingeFinance", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Chakra Rewards", name: "Chakra Rewards", title: "sms-activate, smshub, 365sms"},
			{value: "CheckDomain", name: "CheckDomain", title: "sms-activate, smshub, 365sms"},
			{value: "checkin", name: "checkin", title: "onlinesim, vak-sms"},
			{value: "Chevron", name: "Chevron", title: "sms-activate, smshub, 365sms"},
			{value: "Chispa", name: "Chispa", title: "sms-activate, smshub, 365sms"},
			{value: "ChitaiGorod", name: "ChitaiGorod", title: "5sim, onlinesim, vak-sms"},
			{value: "Cian", name: "Cian", title: "sms-activate, smshub, 5sim, 365sms, vak-sms"},
			{value: "Cita Previa", name: "Cita Previa", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Citilink", name: "Citilink", title: "onlinesim, vak-sms"},
			{value: "CityBase", name: "CityBase", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "CityMall", name: "CityMall", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "CityMobil", name: "CityMobil", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "ClassicRummy", name: "ClassicRummy", title: "5sim, onlinesim"},
			{value: "Claude", name: "Claude", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "Cleartrip", name: "Cleartrip", title: "sms-activate, smshub, 5sim, 365sms, sms-man"},
			{value: "CliQQ", name: "CliQQ", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Cloud Manager", name: "Cloud Manager", title: "sms-activate, smshub, 365sms"},
			{value: "CloudBet", name: "CloudBet", title: "sms-activate, smshub, 365sms"},
			{value: "CloudChat", name: "CloudChat", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Clubhouse", name: "Clubhouse", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "CMB", name: "CMB", title: "sms-activate, smshub, 365sms"},
			{value: "CMTcuzdan", name: "CMTcuzdan", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Coca-Cola", name: "Coca-Cola", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "Codashop", name: "Codashop", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "CoffeeLike", name: "CoffeeLike", title: "sms-activate, smshub, 365sms"},
			{value: "CoffeeTea", name: "CoffeeTea", title: "sms-activate, smshub, 365sms"},
			{value: "Cofix", name: "Cofix", title: "onlinesim, vak-sms"},
			{value: "CoinBase", name: "CoinBase", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Coindcx", name: "Coindcx", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "CoinField", name: "CoinField", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "CollabAct", name: "CollabAct", title: "sms-activate, smshub, 365sms"},
			{value: "CommunityGaming", name: "CommunityGaming", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "constitutioner", name: "constitutioner", title: "sms-activate, smshub, 365sms"},
			{value: "Consultant", name: "Consultant", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "CONTACT", name: "CONTACT", title: "cheapsms, smspva"},
			{value: "ContactSys", name: "ContactSys", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Corona", name: "Corona", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Coupons.com", name: "Coupons.com", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "CourseHero", name: "CourseHero", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Craigslist", name: "Craigslist", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Credcesta", name: "Credcesta", title: "sms-activate, smshub, 365sms"},
			{value: "CreditPlus", name: "CreditPlus", title: "cheapsms, onlinesim"},
			{value: "CrefisaMais", name: "CrefisaMais", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Crickpe", name: "Crickpe", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Crowdtap", name: "Crowdtap", title: "sms-activate, smshub, 365sms"},
			{value: "Crypto.com", name: "Crypto.com", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "CStar", name: "CStar", title: "onlinesim, vak-sms"},
			{value: "Cumbuca", name: "Cumbuca", title: "sms-activate, smshub, 365sms"},
			{value: "CupidMedia", name: "CupidMedia", title: "sms-activate, smshub, 365sms, smspva"},
			{value: "D5BET", name: "D5BET", title: "sms-activate, smshub, 365sms"},
			{value: "Dagangan", name: "Dagangan", title: "sms-activate, smshub, 365sms"},
			{value: "dahadaha", name: "dahadaha", title: "5sim, onlinesim"},
			{value: "Daki", name: "Daki", title: "sms-activate, smshub, 365sms"},
			{value: "Damejidlo", name: "Damejidlo", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Dana", name: "Dana", title: "sms-activate, smshub, 365sms, vak-sms, give-sms"},
			{value: "Daya Auto", name: "Daya Auto", title: "sms-activate, smshub, 365sms"},
			{value: "dbrUA", name: "dbrUA", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "DealShare", name: "DealShare", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Delimobil", name: "Delimobil", title: "sms-reg, onlinesim"},
			{value: "Deliveroo", name: "Deliveroo", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Delivery Club", name: "Delivery Club", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, sms-acktiwator, give-sms"},
			{value: "Dent", name: "Dent", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Depop", name: "Depop", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "DetskiyMir", name: "DetskiyMir", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, onlinesim, give-sms"},
			{value: "DewuPoison", name: "DewuPoison", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Dhani", name: "Dhani", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "DiDi", name: "DiDi", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Digikala", name: "Digikala", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "DIKIDI", name: "DIKIDI", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Discord", name: "Discord", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Discover Hong Kong", name: "Discover Hong Kong", title: "sms-activate, smshub, 365sms"},
			{value: "Disney Hotstar", name: "Disney Hotstar", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Divar", name: "Divar", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Dixy", name: "Dixy", title: "5sim, onlinesim, vak-sms"},
			{value: "DodoPizza", name: "DodoPizza", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, smspva, onlinesim, vak-sms, give-sms"},
			{value: "DOKU", name: "DOKU", title: "sms-activate, smshub, 365sms"},
			{value: "Dominos Pizza", name: "Dominos Pizza", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, vak-sms, give-sms"},
			{value: "DoneDeal", name: "DoneDeal", title: "sms-activate, smshub, 365sms"},
			{value: "DoorDash", name: "DoorDash", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Dosi", name: "Dosi", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Dostavista", name: "Dostavista", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Dotz", name: "Dotz", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Douyin", name: "Douyin", title: "sms-activate, smshub, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Douyu", name: "Douyu", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Dream11", name: "Dream11", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Drom.ru", name: "Drom.ru", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "DrugVokrug", name: "DrugVokrug", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Dukascopy", name: "Dukascopy", title: "5sim, onlinesim, sms-acktiwator"},
			{value: "Dundle", name: "Dundle", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, vak-sms, give-sms"},
			{value: "dunzo", name: "dunzo", title: "5sim, onlinesim"},
			{value: "E bike Gewinnspiel", name: "E bike Gewinnspiel", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "E-NUM", name: "E-NUM", title: "smspva, onlinesim"},
			{value: "EAPTEKA", name: "EAPTEKA", title: "sms-reg, onlinesim"},
			{value: "EarnEasy", name: "EarnEasy", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Easycash", name: "Easycash", title: "sms-activate, smshub, 365sms"},
			{value: "EasyPay", name: "EasyPay", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "eBay", name: "eBay", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "eFood", name: "eFood", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Ekapusta", name: "Ekapusta", title: "cheapsms, sms-reg, onlinesim"},
			{value: "ELDORADO", name: "ELDORADO", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Electroneum", name: "Electroneum", title: "5sim, onlinesim"},
			{value: "Eneba", name: "Eneba", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "EnerGO", name: "EnerGO", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "EscapeFromTarkov", name: "EscapeFromTarkov", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Etsy", name: "Etsy", title: "sms-activate, smshub, 365sms, onlinesim, sms-acktiwator"},
			{value: "EUROBET", name: "EUROBET", title: "smspva, onlinesim"},
			{value: "eWallet", name: "eWallet", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Expressmoney", name: "Expressmoney", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Eyecon", name: "Eyecon", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "ezBuy", name: "ezBuy", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "Faberlic", name: "Faberlic", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "Facebook", name: "Facebook", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "FACEIT", name: "FACEIT", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "Facily", name: "Facily", title: "sms-activate, smshub, 365sms"},
			{value: "Familia", name: "Familia", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "farmcare", name: "farmcare", title: "5sim, onlinesim"},
			{value: "FarPost", name: "FarPost", title: "sms-activate, smshub, 365sms, sms-acktiwator, vak-sms"},
			{value: "FastMail", name: "FastMail", title: "sms-activate, smshub, 365sms, smspva, give-sms"},
			{value: "Feeld", name: "Feeld", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim"},
			{value: "Feels", name: "Feels", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "FeetFinder", name: "FeetFinder", title: "sms-activate, smshub, 365sms"},
			{value: "fiewin", name: "fiewin", title: "5sim, onlinesim"},
			{value: "Fiqsy", name: "Fiqsy", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "FitCredit", name: "FitCredit", title: "sms-activate, smshub, 365sms"},
			{value: "Fiverr", name: "Fiverr", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "flam", name: "flam", title: "5sim, onlinesim"},
			{value: "Fliff", name: "Fliff", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "Flik", name: "Flik", title: "sms-activate, smshub, 365sms"},
			{value: "Flink", name: "Flink", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Flip", name: "Flip", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Flipkart", name: "Flipkart", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Flowwow", name: "Flowwow", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "flypgs", name: "flypgs", title: "5sim, onlinesim"},
			{value: "Fon.bet", name: "Fon.bet", title: "sms-reg, smspva, onlinesim"},
			{value: "FoodHub", name: "FoodHub", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Foodora", name: "Foodora", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator"},
			{value: "FoodPanda", name: "FoodPanda", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Foody", name: "Foody", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Fora", name: "Fora", title: "sms-activate, smshub, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Fortumo", name: "Fortumo", title: "sms-activate, smshub, 365sms"},
			{value: "FortunaSK", name: "FortunaSK", title: "sms-activate, smshub, 365sms"},
			{value: "Fortune Slots", name: "Fortune Slots", title: "sms-activate, smshub, 365sms"},
			{value: "Fotka", name: "Fotka", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "FotoCasa", name: "FotoCasa", title: "sms-activate, smshub, 365sms"},
			{value: "Fotostrana", name: "Fotostrana", title: "sms-activate, smshub, cheapsms, 365sms, sms-reg, smspva, onlinesim, sms-acktiwator"},
			{value: "FoxFord", name: "FoxFord", title: "sms-activate, smshub, 365sms"},
			{value: "Foxtrot", name: "Foxtrot", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Freecash", name: "Freecash", title: "onlinesim, vak-sms"},
			{value: "FreeChargeApp", name: "FreeChargeApp", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Freelancer", name: "Freelancer", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "FreeNow", name: "FreeNow", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "FreshKarta", name: "FreshKarta", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Friendtech", name: "Friendtech", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Frizza", name: "Frizza", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Fruitz", name: "Fruitz", title: "sms-activate, smshub, 365sms"},
			{value: "ftx.com", name: "ftx.com", title: "onlinesim, vak-sms"},
			{value: "Fugeelah", name: "Fugeelah", title: "sms-activate, smshub, 365sms"},
			{value: "fun88", name: "fun88", title: "5sim, onlinesim"},
			{value: "FunPay", name: "FunPay", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim"},
			{value: "Fups", name: "Fups", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "FWDMAX", name: "FWDMAX", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "G2A", name: "G2A", title: "sms-activate, smshub, 365sms, smspva, onlinesim, sms-acktiwator"},
			{value: "G2G", name: "G2G", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Gabi", name: "Gabi", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "GalaxyChat", name: "GalaxyChat", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "GalaxyWin", name: "GalaxyWin", title: "sms-activate, smshub, 5sim, give-sms"},
			{value: "GameArena", name: "GameArena", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "GameFlip", name: "GameFlip", title: "5sim, smspva, onlinesim, sms-acktiwator"},
			{value: "Gamekit", name: "Gamekit", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Gamer", name: "Gamer", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Gamesofa", name: "Gamesofa", title: "sms-activate, smshub, 365sms"},
			{value: "gamezy", name: "gamezy", title: "5sim, onlinesim"},
			{value: "Gazprom", name: "Gazprom", title: "5sim, cheapsms, onlinesim, vak-sms"},
			{value: "GCash", name: "GCash", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Gem4me", name: "Gem4me", title: "onlinesim, sms-acktiwator"},
			{value: "Gemgala", name: "Gemgala", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Gemini.com", name: "Gemini.com", title: "5sim, onlinesim"},
			{value: "Gener8", name: "Gener8", title: "sms-activate, smshub, 365sms"},
			{value: "Getcontact", name: "Getcontact", title: "onlinesim, vak-sms"},
			{value: "Getir", name: "Getir", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Getmega", name: "Getmega", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "GetNinjas", name: "GetNinjas", title: "sms-activate, smshub, 365sms"},
			{value: "GetPlus", name: "GetPlus", title: "sms-activate, smshub, 365sms"},
			{value: "GetResponse", name: "GetResponse", title: "sms-activate, smshub, 365sms, onlinesim, sms-acktiwator"},
			{value: "Gett", name: "Gett", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "GG", name: "GG", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "GGbet", name: "GGbet", title: "smspva, onlinesim"},
			{value: "Giftcloud", name: "Giftcloud", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "GiraBank", name: "GiraBank", title: "sms-activate, smshub, 365sms"},
			{value: "Gittigidiyor", name: "Gittigidiyor", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Global24", name: "Global24", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "GlobalTel", name: "GlobalTel", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Globus", name: "Globus", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Glovo", name: "Glovo", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "GlowRoad", name: "GlowRoad", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "GMNG", name: "GMNG", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "GMX", name: "GMX", title: "sms-activate, smshub, 365sms"},
			{value: "GoChat", name: "GoChat", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Godrej", name: "Godrej", title: "sms-activate, smshub, 365sms"},
			{value: "GoerliFaucet", name: "GoerliFaucet", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "GoFundMe", name: "GoFundMe", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "GoGo", name: "GoGo", title: "onlinesim, sms-acktiwator"},
			{value: "Gojek", name: "Gojek", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "GOMOFY", name: "GOMOFY", title: "sms-activate, smshub, 365sms"},
			{value: "Goods", name: "Goods", title: "5sim, smspva, onlinesim, sms-acktiwator"},
			{value: "Google", name: "Google", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "GoogleVoice", name: "GoogleVoice", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "GoPayz", name: "GoPayz", title: "sms-activate, smshub, 365sms"},
			{value: "Gopuff", name: "Gopuff", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "GORDAN", name: "GORDAN", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Gorzdrav", name: "Gorzdrav", title: "onlinesim, sms-acktiwator"},
			{value: "Gosuslugi", name: "Gosuslugi", title: "sms-reg, onlinesim"},
			{value: "GovBr", name: "GovBr", title: "sms-activate, smshub, 365sms"},
			{value: "gpnbonus", name: "gpnbonus", title: "sms-activate, smshub, cheapsms, 365sms"},
			{value: "Grab", name: "Grab", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Grailed", name: "Grailed", title: "sms-activate, smshub, 365sms, smspva, onlinesim"},
			{value: "Greggs", name: "Greggs", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "Greywoods", name: "Greywoods", title: "sms-activate, smshub, 365sms"},
			{value: "Grindr", name: "Grindr", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Grofers", name: "Grofers", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "GroupMe", name: "GroupMe", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Guiche Web", name: "Guiche Web", title: "sms-activate, smshub, 365sms"},
			{value: "GullyRummy", name: "GullyRummy", title: "5sim, onlinesim"},
			{value: "Gurmanika", name: "Gurmanika", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "GuruBets", name: "GuruBets", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "gusli.net", name: "gusli.net", title: "sms-reg, onlinesim"},
			{value: "GyFTR", name: "GyFTR", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Haleon", name: "Haleon", title: "sms-activate, smshub, 365sms"},
			{value: "hamrahaval", name: "hamrahaval", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "HandyPick", name: "HandyPick", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "Hanya", name: "Hanya", title: "sms-activate, smshub, 365sms"},
			{value: "Happn", name: "Happn", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "HappyFresh", name: "HappyFresh", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Haraj", name: "Haraj", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "hdfcbank", name: "hdfcbank", title: "sms-activate, smshub, 365sms"},
			{value: "Hepsiburada.com", name: "Hepsiburada.com", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Her", name: "Her", title: "sms-activate, smshub, 365sms"},
			{value: "Hermes", name: "Hermes", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "HeyBox", name: "HeyBox", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Hezzl", name: "Hezzl", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "hh", name: "hh", title: "sms-activate, smshub, 365sms"},
			{value: "HH.ru", name: "HH.ru", title: "onlinesim, vak-sms"},
			{value: "Hily", name: "Hily", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Hinge", name: "Hinge", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Hinge Dating", name: "Hinge Dating", title: "sms-activate, smshub, 365sms"},
			{value: "Hirect", name: "Hirect", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Hoff", name: "Hoff", title: "onlinesim, vak-sms"},
			{value: "Hohoro", name: "Hohoro", title: "cheapsms, onlinesim"},
			{value: "HOP", name: "HOP", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Hopi", name: "Hopi", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "hopper", name: "hopper", title: "5sim, smspva"},
			{value: "Hotline", name: "Hotline", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Hotmail", name: "Hotmail", title: "5sim, sms-man"},
			{value: "HQ Trivia", name: "HQ Trivia", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "HUAWEI", name: "HUAWEI", title: "smspva, onlinesim"},
			{value: "HumbleBundle", name: "HumbleBundle", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Humta", name: "Humta", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "hungerstation", name: "hungerstation", title: "5sim, onlinesim"},
			{value: "Huya", name: "Huya", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, vak-sms, give-sms"},
			{value: "iCard", name: "iCard", title: "5sim, smspva, sms-acktiwator"},
			{value: "IceCasino", name: "IceCasino", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "ICNKR", name: "ICNKR", title: "sms-activate, smshub, 365sms"},
			{value: "ICQ", name: "ICQ", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "Icrypex", name: "Icrypex", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Idealista", name: "Idealista", title: "sms-activate, smshub, 365sms, onlinesim, sms-acktiwator"},
			{value: "IFood", name: "IFood", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, give-sms"},
			{value: "ihc.ru", name: "ihc.ru", title: "onlinesim, sms-acktiwator"},
			{value: "iHerb", name: "iHerb", title: "sms-reg, onlinesim"},
			{value: "Immowelt", name: "Immowelt", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Imo", name: "Imo", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "inbox.lv", name: "inbox.lv", title: "smspva, onlinesim"},
			{value: "InboxLv", name: "InboxLv", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "IndiaGold", name: "IndiaGold", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "IndianOil", name: "IndianOil", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "IndiaPlays", name: "IndiaPlays", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "INDOBA", name: "INDOBA", title: "sms-activate, smshub, 365sms"},
			{value: "Indodax", name: "Indodax", title: "sms-activate, smshub, 365sms"},
			{value: "Indomaret", name: "Indomaret", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "inDriver", name: "inDriver", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, vak-sms, give-sms"},
			{value: "InFund", name: "InFund", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Ininal", name: "Ininal", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Instagram", name: "Instagram", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "InternetOpros", name: "InternetOpros", title: "onlinesim, vak-sms"},
			{value: "IOST", name: "IOST", title: "5sim, onlinesim, sms-acktiwator"},
			{value: "iPanelOnline", name: "iPanelOnline", title: "sms-activate, smshub, 365sms"},
			{value: "IPLwin", name: "IPLwin", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Ipsos iSay", name: "Ipsos iSay", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "iQIYI", name: "iQIYI", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "IQOS", name: "IQOS", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "irancell", name: "irancell", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "IRCTC", name: "IRCTC", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Iti", name: "Iti", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "IVI", name: "IVI", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, onlinesim, give-sms"},
			{value: "Iwplay", name: "Iwplay", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "IZI", name: "IZI", title: "sms-activate, smshub, getsms, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "JamesDelivery", name: "JamesDelivery", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "JD.com", name: "JD.com", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms"},
			{value: "Jiayuan", name: "Jiayuan", title: "onlinesim, sms-acktiwator"},
			{value: "JinJiang", name: "JinJiang", title: "sms-activate, smshub, 365sms"},
			{value: "JioMart", name: "JioMart", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Jiva Petani", name: "Jiva Petani", title: "sms-activate, smshub, 365sms"},
			{value: "JKF", name: "JKF", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "JoGo", name: "JoGo", title: "sms-activate, smshub"},
			{value: "Jollychic", name: "Jollychic", title: "onlinesim, sms-acktiwator"},
			{value: "joymall", name: "joymall", title: "5sim, onlinesim"},
			{value: "Joyride", name: "Joyride", title: "sms-activate, smshub, 5sim, getsms, 365sms, give-sms"},
			{value: "JTExpress", name: "JTExpress", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "JungleeRummy", name: "JungleeRummy", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "JustDating", name: "JustDating", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "K11", name: "K11", title: "sms-activate, smshub, 365sms"},
			{value: "Kabanchik.ua", name: "Kabanchik.ua", title: "onlinesim, sms-acktiwator"},
			{value: "Kaching", name: "Kaching", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "Kaggle", name: "Kaggle", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "kaidee", name: "kaidee", title: "5sim, sms-man"},
			{value: "KakaoTalk", name: "KakaoTalk", title: "sms-activate, smshub, 5sim, getsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Kamatera", name: "Kamatera", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Karusel", name: "Karusel", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Kaya", name: "Kaya", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "kazandirio", name: "kazandirio", title: "5sim, onlinesim"},
			{value: "KazanExpress", name: "KazanExpress", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, onlinesim, vak-sms, give-sms"},
			{value: "Kemnaker RI", name: "Kemnaker RI", title: "sms-activate, smshub, 365sms"},
			{value: "Keybase", name: "Keybase", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "KeyPay", name: "KeyPay", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "KFC", name: "KFC", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, sms-acktiwator, vak-sms, give-sms"},
			{value: "Khatabook", name: "Khatabook", title: "sms-activate, smshub, 365sms"},
			{value: "khelraja", name: "khelraja", title: "5sim, onlinesim"},
			{value: "Kia", name: "Kia", title: "sms-activate, smshub, 365sms"},
			{value: "KION", name: "KION", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Kirana", name: "Kirana", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "kisma", name: "kisma", title: "5sim, onlinesim"},
			{value: "Klarna", name: "Klarna", title: "sms-activate, smshub, 365sms, smspva, onlinesim"},
			{value: "Kolesa.kz", name: "Kolesa.kz", title: "sms-activate, smshub, 365sms, sms-man, sms-reg, onlinesim, give-sms"},
			{value: "komandacard", name: "komandacard", title: "5sim, sms-acktiwator"},
			{value: "koo", name: "koo", title: "5sim, onlinesim"},
			{value: "KoronaPay", name: "KoronaPay", title: "cheapsms, sms-reg, smspva"},
			{value: "Koshelek", name: "Koshelek", title: "sms-activate, smshub, onlinesim, vak-sms"},
			{value: "Kotak811", name: "Kotak811", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "KuCoinPlay", name: "KuCoinPlay", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Kufar.by", name: "Kufar.by", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Kvartplata+", name: "Kvartplata+", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Kwai", name: "Kwai", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Kwork", name: "Kwork", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "LadyMaria", name: "LadyMaria", title: "sms-activate, smshub, 365sms"},
			{value: "Lalamove", name: "Lalamove", title: "sms-activate, smshub, 365sms, smspva, give-sms"},
			{value: "Lamoda", name: "Lamoda", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "laposte", name: "laposte", title: "5sim, smspva"},
			{value: "Lazada", name: "Lazada", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "LazyPay", name: "LazyPay", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "lbry", name: "lbry", title: "5sim, onlinesim"},
			{value: "LDinfo", name: "LDinfo", title: "onlinesim, sms-acktiwator"},
			{value: "Leboncoin", name: "Leboncoin", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, give-sms"},
			{value: "Leboncoin1", name: "Leboncoin1", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Lenta", name: "Lenta", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "Letual", name: "Letual", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "Lianxin", name: "Lianxin", title: "5sim, onlinesim"},
			{value: "Lidl", name: "Lidl", title: "sms-activate, smshub, 365sms, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "LigaPro", name: "LigaPro", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "LigaStavok", name: "LigaStavok", title: "sms-reg, onlinesim"},
			{value: "LightChat", name: "LightChat", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Likee", name: "Likee", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "LINE Messenger", name: "LINE Messenger", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "LinkAja", name: "LinkAja", title: "sms-activate, smshub, 365sms"},
			{value: "LinkedIN", name: "LinkedIN", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Lino.network", name: "Lino.network", title: "onlinesim, sms-acktiwator"},
			{value: "Linode", name: "Linode", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Lion Parcel", name: "Lion Parcel", title: "sms-activate, smshub, 365sms"},
			{value: "litnet", name: "litnet", title: "onlinesim, vak-sms"},
			{value: "LiveScore", name: "LiveScore", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms"},
			{value: "Loanflix", name: "Loanflix", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "LocalBitcoins", name: "LocalBitcoins", title: "sms-reg, smspva, onlinesim"},
			{value: "LOCO", name: "LOCO", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "LongHu", name: "LongHu", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "LOTTE Mart", name: "LOTTE Mart", title: "sms-activate, smshub, 365sms"},
			{value: "Lotus", name: "Lotus", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "LoveLocal", name: "LoveLocal", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Loveplanet", name: "Loveplanet", title: "onlinesim, sms-acktiwator"},
			{value: "LoveRu", name: "LoveRu", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "LuckyLand Slots", name: "LuckyLand Slots", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "Lukoil", name: "Lukoil", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Lydia", name: "Lydia", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Lyft", name: "Lyft", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "LYKA", name: "LYKA", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "MagaLu", name: "MagaLu", title: "sms-activate, smshub, 365sms"},
			{value: "Magicbricks", name: "Magicbricks", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Magicpin", name: "Magicpin", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Magnit", name: "Magnit", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Magnolia", name: "Magnolia", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Mail.ru", name: "Mail.ru", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Mail.ru Group", name: "Mail.ru Group", title: "sms-activate, smshub, smspva, sms-acktiwator, vak-sms, give-sms"},
			{value: "Mamba", name: "Mamba", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "MapleSEA", name: "MapleSEA", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "MarketGuru", name: "MarketGuru", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "MarketPapa", name: "MarketPapa", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Marktplaats", name: "Marktplaats", title: "sms-activate, smshub, 365sms, smspva, onlinesim"},
			{value: "Marlboro", name: "Marlboro", title: "sms-activate, smshub, cheapsms, 365sms, onlinesim, vak-sms"},
			{value: "Marwadi", name: "Marwadi", title: "sms-activate, smshub, 365sms"},
			{value: "Matbea.com", name: "Matbea.com", title: "sms-reg, onlinesim"},
			{value: "Maxim", name: "Maxim", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Maxis", name: "Maxis", title: "sms-activate, smshub, 365sms"},
			{value: "Maybank", name: "Maybank", title: "sms-activate, smshub, 365sms"},
			{value: "McDonalds", name: "McDonalds", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, sms-acktiwator, give-sms"},
			{value: "MediBuddy", name: "MediBuddy", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Meesho", name: "Meesho", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "MeetMe", name: "MeetMe", title: "sms-activate, 5sim, getsms, sms-reg, onlinesim, sms-acktiwator, vak-sms"},
			{value: "MEGA", name: "MEGA", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Megogo", name: "Megogo", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "MeiQFashion", name: "MeiQFashion", title: "sms-activate, smshub, 365sms"},
			{value: "Meitu", name: "Meitu", title: "sms-activate, smshub, 365sms"},
			{value: "Meituan", name: "Meituan", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Meliuz", name: "Meliuz", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Mera Gaon", name: "Mera Gaon", title: "sms-activate, smshub, 365sms"},
			{value: "Mercado", name: "Mercado", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Mercado Pago", name: "Mercado Pago", title: "sms-activate, smshub, 365sms"},
			{value: "Mercari", name: "Mercari", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Meta", name: "Meta", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "METRO", name: "METRO", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Mewt", name: "Mewt", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "MiChat", name: "MiChat", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "MicroKlad", name: "MicroKlad", title: "cheapsms, onlinesim, sms-acktiwator"},
			{value: "Microsoft", name: "Microsoft", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Mihuashi", name: "Mihuashi", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Miloan", name: "Miloan", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "minima", name: "minima", title: "5sim, onlinesim"},
			{value: "Miratorg", name: "Miratorg", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Miravia", name: "Miravia", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "MitID", name: "MitID", title: "sms-activate, smshub, 365sms"},
			{value: "MIXMART", name: "MIXMART", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "MIYACHAT", name: "MIYACHAT", title: "sms-activate, smshub, 365sms"},
			{value: "MobiKwik", name: "MobiKwik", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Mobile01", name: "Mobile01", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "MockGuru", name: "MockGuru", title: "sms-activate, smshub, 365sms"},
			{value: "Mocospace", name: "Mocospace", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "MOMO", name: "MOMO", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, give-sms"},
			{value: "Monese", name: "Monese", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "MonetaRu", name: "MonetaRu", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "MoneyLion", name: "MoneyLion", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, sms-acktiwator, give-sms"},
			{value: "MoneyPay", name: "MoneyPay", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "MoneyСontrol", name: "MoneyСontrol", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Monobank", name: "Monobank", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "MonobankIndia", name: "MonobankIndia", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "more", name: "more", title: "5sim, onlinesim"},
			{value: "Mos.ru", name: "Mos.ru", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "MotionPay", name: "MotionPay", title: "sms-activate, smshub, 365sms"},
			{value: "MotorkuX", name: "MotorkuX", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "Move It", name: "Move It", title: "sms-activate, smshub, 365sms"},
			{value: "MPL", name: "MPL", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "MrGreen", name: "MrGreen", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "MrQ", name: "MrQ", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "mrsool", name: "mrsool", title: "5sim, onlinesim"},
			{value: "MTR Mobile", name: "MTR Mobile", title: "sms-activate, smshub, 365sms"},
			{value: "MTS CashBack", name: "MTS CashBack", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Muzz", name: "Muzz", title: "sms-activate, smshub, 365sms"},
			{value: "MVideo", name: "MVideo", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-reg, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "My.Games", name: "My.Games", title: "5sim, onlinesim"},
			{value: "My11Circle", name: "My11Circle", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "MyACUVUE", name: "MyACUVUE", title: "sms-reg, onlinesim"},
			{value: "myata", name: "myata", title: "5sim, onlinesim"},
			{value: "mybeautybonus", name: "mybeautybonus", title: "onlinesim, vak-sms"},
			{value: "myboost", name: "myboost", title: "sms-activate, smshub, 365sms"},
			{value: "MyDailyCash", name: "MyDailyCash", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "MyFishka", name: "MyFishka", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "myGLO", name: "myGLO", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "MyLavash", name: "MyLavash", title: "sms-activate, smshub"},
			{value: "MyLove", name: "MyLove", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "MyMusicTaste", name: "MyMusicTaste", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Myntra", name: "Myntra", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "MyValue", name: "MyValue", title: "sms-activate, smshub, 365sms"},
			{value: "mzadqatar", name: "mzadqatar", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Namars", name: "Namars", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "Nanovest", name: "Nanovest", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "NationalLottery", name: "NationalLottery", title: "onlinesim, vak-sms"},
			{value: "Naver", name: "Naver", title: "sms-activate, smshub, 5sim, getsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "NCsoft", name: "NCsoft", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "neftm", name: "neftm", title: "sms-activate, smshub"},
			{value: "Neocrypto", name: "Neocrypto", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Neon", name: "Neon", title: "sms-activate, smshub, 365sms"},
			{value: "NEQUI", name: "NEQUI", title: "sms-activate, smshub, 365sms"},
			{value: "NetBet", name: "NetBet", title: "smspva, onlinesim"},
			{value: "Netease", name: "Netease", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Neteller", name: "Neteller", title: "sms-reg, smspva"},
			{value: "Netflix", name: "Netflix", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "NEXMO", name: "NEXMO", title: "sms-reg, onlinesim"},
			{value: "Next", name: "Next", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Nextdoor", name: "Nextdoor", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Nice88", name: "Nice88", title: "sms-activate, smshub, 365sms"},
			{value: "Nifty", name: "Nifty", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Nike", name: "Nike", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "NimoTV", name: "NimoTV", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "nimses", name: "nimses", title: "5sim, onlinesim, sms-acktiwator"},
			{value: "Njuškalo", name: "Njuškalo", title: "sms-activate, smshub, 365sms"},
			{value: "nloto", name: "nloto", title: "sms-activate, smshub, 365sms, vak-sms"},
			{value: "NoBroker", name: "NoBroker", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "Noon", name: "Noon", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Notifire", name: "Notifire", title: "sms-activate, smshub, 365sms"},
			{value: "NovaPoshta", name: "NovaPoshta", title: "sms-activate, smshub, 365sms, sms-reg, sms-acktiwator"},
			{value: "NRJ Music Awards", name: "NRJ Music Awards", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "NTT Game", name: "NTT Game", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Nubank", name: "Nubank", title: "sms-activate, smshub, 365sms"},
			{value: "NutriClub", name: "NutriClub", title: "sms-activate, smshub, 365sms"},
			{value: "OfferUp", name: "OfferUp", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, vak-sms, give-sms"},
			{value: "OffGamers", name: "OffGamers", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "ogon.ru", name: "ogon.ru", title: "onlinesim, vak-sms"},
			{value: "Ok.ru", name: "Ok.ru", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "OkCupid", name: "OkCupid", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Okey", name: "Okey", title: "5sim, cheapsms, onlinesim, sms-acktiwator"},
			{value: "Okko", name: "Okko", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, onlinesim, give-sms"},
			{value: "Okolo", name: "Okolo", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Okta", name: "Okta", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "OKX.com", name: "OKX.com", title: "5sim, sms-reg"},
			{value: "Olacabs", name: "Olacabs", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Oldubil", name: "Oldubil", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Olimp.bet", name: "Olimp.bet", title: "sms-reg, onlinesim"},
			{value: "Ollis", name: "Ollis", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "OLX", name: "OLX", title: "sms-activate, smshub, 5sim, getsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "ONBUKA", name: "ONBUKA", title: "sms-activate, smshub, 365sms"},
			{value: "OneAset", name: "OneAset", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "OneForma", name: "OneForma", title: "sms-activate, smshub, 365sms"},
			{value: "Onet", name: "Onet", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Onliner.by", name: "Onliner.by", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "OnTaxi", name: "OnTaxi", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "OpenAI", name: "OpenAI", title: "sms-activate, smshub, 5sim, getsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "OpenPhone", name: "OpenPhone", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "OPPO", name: "OPPO", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "Oriflame", name: "Oriflame", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, give-sms"},
			{value: "Orteka", name: "Orteka", title: "sms-activate, smshub, 365sms"},
			{value: "OSTIN", name: "OSTIN", title: "onlinesim, vak-sms"},
			{value: "otipy", name: "otipy", title: "5sim, onlinesim"},
			{value: "Otzovik.com", name: "Otzovik.com", title: "sms-reg, onlinesim"},
			{value: "OVO", name: "OVO", title: "sms-activate, smshub, 365sms, sms-acktiwator, vak-sms, give-sms"},
			{value: "oyo", name: "oyo", title: "5sim, onlinesim"},
			{value: "Ozan", name: "Ozan", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Ozan SuperApp", name: "Ozan SuperApp", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "OZON", name: "OZON", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Packeta", name: "Packeta", title: "sms-activate, smshub, 365sms"},
			{value: "PaddyPower", name: "PaddyPower", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "PagBank", name: "PagBank", title: "sms-activate, smshub, 365sms"},
			{value: "PagSmile", name: "PagSmile", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Pairs", name: "Pairs", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Pandao", name: "Pandao", title: "getsms, cheapsms, onlinesim"},
			{value: "Panvel", name: "Panvel", title: "sms-activate, smshub, 365sms"},
			{value: "PapaJohns", name: "PapaJohns", title: "smspva, onlinesim"},
			{value: "Papara", name: "Papara", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Pari.ru", name: "Pari.ru", title: "sms-reg, smspva, onlinesim"},
			{value: "Parimatch", name: "Parimatch", title: "5sim, sms-reg, smspva, onlinesim, sms-acktiwator"},
			{value: "Parkplus", name: "Parkplus", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "PaxFuL", name: "PaxFuL", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "Payberry", name: "Payberry", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "Paybis", name: "Paybis", title: "sms-activate, smshub, 365sms"},
			{value: "Paycell", name: "Paycell", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-acktiwator, give-sms"},
			{value: "paymaya", name: "paymaya", title: "5sim, onlinesim"},
			{value: "Payoneer", name: "Payoneer", title: "sms-activate, smshub, 365sms, sms-reg, smspva, onlinesim"},
			{value: "PayPal", name: "PayPal", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, sms-acktiwator, vak-sms, give-sms"},
			{value: "Paysafecard", name: "Paysafecard", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, sms-acktiwator, vak-sms, give-sms"},
			{value: "PaySend", name: "PaySend", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, vak-sms, give-sms"},
			{value: "PayTM", name: "PayTM", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "Payzapp", name: "Payzapp", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Perekrestok", name: "Perekrestok", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "Perfluence", name: "Perfluence", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "PetrI", name: "PetrI", title: "onlinesim, sms-acktiwator"},
			{value: "PGbonus", name: "PGbonus", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "phable", name: "phable", title: "5sim, onlinesim"},
			{value: "PharmEasy", name: "PharmEasy", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "PhoneCode", name: "PhoneCode", title: "onlinesim, sms-acktiwator"},
			{value: "Phound", name: "Phound", title: "sms-activate, smshub, 365sms"},
			{value: "Picpay", name: "Picpay", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "Pinduoduo", name: "Pinduoduo", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "PingCode", name: "PingCode", title: "sms-activate, smshub, 365sms"},
			{value: "PingPong", name: "PingPong", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smscode, give-sms"},
			{value: "Pivko24", name: "Pivko24", title: "sms-activate, smshub, 365sms, vak-sms, give-sms"},
			{value: "PizzaHut", name: "PizzaHut", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "PlayerAuctions", name: "PlayerAuctions", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Playerzpot", name: "Playerzpot", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "PlayOJO", name: "PlayOJO", title: "sms-activate, smshub, 365sms"},
			{value: "playship", name: "playship", title: "5sim, onlinesim"},
			{value: "PMSM", name: "PMSM", title: "onlinesim, sms-acktiwator"},
			{value: "pochta.ru", name: "pochta.ru", title: "sms-activate, smshub, cheapsms, 365sms, onlinesim, sms-acktiwator"},
			{value: "POCHTABANK", name: "POCHTABANK", title: "cheapsms, sms-reg, vak-sms"},
			{value: "Pocket52", name: "Pocket52", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Pockit", name: "Pockit", title: "sms-activate, smshub, 365sms, vak-sms"},
			{value: "Podeli", name: "Podeli", title: "sms-activate, smshub, 365sms"},
			{value: "POF.com", name: "POF.com", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "PokerMaster", name: "PokerMaster", title: "5sim, onlinesim"},
			{value: "Porbet", name: "Porbet", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Poshmark", name: "Poshmark", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-acktiwator, give-sms"},
			{value: "PoshVine", name: "PoshVine", title: "sms-activate, smshub, 365sms"},
			{value: "Potato Chat", name: "Potato Chat", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Powerkredite", name: "Powerkredite", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Prakerja", name: "Prakerja", title: "sms-activate, smshub, 365sms"},
			{value: "PREMIER", name: "PREMIER", title: "sms-reg, onlinesim"},
			{value: "Premium.one", name: "Premium.one", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Prenagen Club", name: "Prenagen Club", title: "sms-activate, smshub, 365sms"},
			{value: "Primaries 2020", name: "Primaries 2020", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Prime Opinion", name: "Prime Opinion", title: "sms-activate, smshub, 365sms"},
			{value: "Privalia", name: "Privalia", title: "sms-activate, smshub, 365sms"},
			{value: "PrivetMir", name: "PrivetMir", title: "sms-activate, smshub, 365sms, vak-sms"},
			{value: "Privy", name: "Privy", title: "sms-activate, smshub, 365sms"},
			{value: "Probo", name: "Probo", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "ProDoctorov", name: "ProDoctorov", title: "onlinesim, sms-acktiwator"},
			{value: "Profee", name: "Profee", title: "sms-activate, smshub, 365sms"},
			{value: "Profi.ru", name: "Profi.ru", title: "sms-activate, smshub, 365sms, sms-reg, onlinesim, vak-sms"},
			{value: "Prom.ua", name: "Prom.ua", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "ProtonMail", name: "ProtonMail", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "PUBG", name: "PUBG", title: "5sim, onlinesim"},
			{value: "Publi24", name: "Publi24", title: "sms-activate, smshub, 365sms"},
			{value: "punjab citizen", name: "punjab citizen", title: "sms-activate, smshub, 365sms"},
			{value: "PurePlatfrom", name: "PurePlatfrom", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Pyro Music", name: "Pyro Music", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Q12 Trivia", name: "Q12 Trivia", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "QIP", name: "QIP", title: "onlinesim, sms-acktiwator"},
			{value: "Qiwi", name: "Qiwi", title: "smshub, 5sim, cheapsms, 365sms, smspva, sms-acktiwator, vak-sms, give-sms"},
			{value: "Qoo10", name: "Qoo10", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Qrooto", name: "Qrooto", title: "onlinesim, sms-acktiwator"},
			{value: "Quack", name: "Quack", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "quikr", name: "quikr", title: "5sim, sms-man"},
			{value: "Quipp", name: "Quipp", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Qunar", name: "Qunar", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "QwikCilver", name: "QwikCilver", title: "sms-activate, smshub, 365sms"},
			{value: "RabotnikiUA", name: "RabotnikiUA", title: "onlinesim, sms-acktiwator"},
			{value: "Radium", name: "Radium", title: "sms-activate, smshub, 365sms"},
			{value: "Raiffeisen", name: "Raiffeisen", title: "sms-reg, vak-sms"},
			{value: "Raketa", name: "Raketa", title: "smspva, onlinesim, sms-acktiwator"},
			{value: "Rambler", name: "Rambler", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "rapido", name: "rapido", title: "5sim, onlinesim"},
			{value: "Rappi", name: "Rappi", title: "sms-activate, smshub, 365sms"},
			{value: "Razer", name: "Razer", title: "sms-activate, smshub, 365sms"},
			{value: "Rbt", name: "Rbt", title: "sms-activate, smshub, 365sms"},
			{value: "Rebtel", name: "Rebtel", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "RecargaPay", name: "RecargaPay", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "RedBook", name: "RedBook", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "redbubble", name: "redbubble", title: "5sim, onlinesim"},
			{value: "redBus", name: "redBus", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Rediffmail", name: "Rediffmail", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Redigame", name: "Redigame", title: "sms-activate, smshub, 365sms"},
			{value: "reg.ru", name: "reg.ru", title: "sms-activate, smshub, 365sms, sms-reg, onlinesim, vak-sms"},
			{value: "Remotasks", name: "Remotasks", title: "sms-activate, smshub, 365sms"},
			{value: "RESO", name: "RESO", title: "cheapsms, sms-reg, onlinesim"},
			{value: "Revolut", name: "Revolut", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "ROBINHOOD", name: "ROBINHOOD", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "RoboForex", name: "RoboForex", title: "sms-reg, onlinesim"},
			{value: "RockeTreach", name: "RockeTreach", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms"},
			{value: "roomster", name: "roomster", title: "sms-activate, smshub, 365sms, smspva"},
			{value: "Roposo", name: "Roposo", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "RosaKhutor", name: "RosaKhutor", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "rosbank", name: "rosbank", title: "onlinesim, vak-sms"},
			{value: "Rosneft", name: "Rosneft", title: "cheapsms, onlinesim, vak-sms"},
			{value: "Rostelecom", name: "Rostelecom", title: "sms-reg, onlinesim"},
			{value: "Royal Canin", name: "Royal Canin", title: "sms-activate, smshub, 365sms, smspva, onlinesim"},
			{value: "RoyalWin", name: "RoyalWin", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Rozetka", name: "Rozetka", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "RRSA", name: "RRSA", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Rummy", name: "Rummy", title: "5sim, onlinesim"},
			{value: "RummyCircle", name: "RummyCircle", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "RummyCulture", name: "RummyCulture", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "RummyGold", name: "RummyGold", title: "5sim, onlinesim"},
			{value: "RummyLoot", name: "RummyLoot", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "RummyModern", name: "RummyModern", title: "5sim, onlinesim"},
			{value: "RummyOla", name: "RummyOla", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "RummyTime", name: "RummyTime", title: "5sim, onlinesim"},
			{value: "RummyWealth", name: "RummyWealth", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Rush", name: "Rush", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Ruten", name: "Ruten", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "RuTube", name: "RuTube", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "RUVDS", name: "RUVDS", title: "onlinesim, vak-sms"},
			{value: "Ryde", name: "Ryde", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Salampay", name: "Salampay", title: "cheapsms, sms-reg"},
			{value: "Samokat", name: "Samokat", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "SamsungShop", name: "SamsungShop", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Santander", name: "Santander", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "SberApteka", name: "SberApteka", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "SberMarket", name: "SberMarket", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, sms-acktiwator, vak-sms, give-sms"},
			{value: "SberMegaMarket", name: "SberMegaMarket", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, vak-sms, give-sms"},
			{value: "SBI Card", name: "SBI Card", title: "sms-activate, smshub, 365sms"},
			{value: "Schibsted", name: "Schibsted", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Seagm", name: "Seagm", title: "smspva, onlinesim, sms-acktiwator"},
			{value: "SEEDS", name: "SEEDS", title: "sms-activate, smshub, 365sms"},
			{value: "Segari", name: "Segari", title: "sms-activate, smshub, 365sms"},
			{value: "Selectel", name: "Selectel", title: "onlinesim, vak-sms"},
			{value: "Selfcontrol", name: "Selfcontrol", title: "sms-reg, onlinesim"},
			{value: "SellMonitor", name: "SellMonitor", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "sendinblue", name: "sendinblue", title: "5sim, onlinesim"},
			{value: "SEOsprint", name: "SEOsprint", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "Servify", name: "Servify", title: "sms-activate, smshub, 365sms"},
			{value: "Setel", name: "Setel", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Seznam", name: "Seznam", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Shafa", name: "Shafa", title: "onlinesim, sms-acktiwator"},
			{value: "ShareParty", name: "ShareParty", title: "sms-activate, smshub, 365sms"},
			{value: "SheerID", name: "SheerID", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Shein", name: "Shein", title: "sms-activate, smshub, 365sms"},
			{value: "ShellBox", name: "ShellBox", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Shopee", name: "Shopee", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Shpock", name: "Shpock", title: "sms-activate, smshub, 365sms, sms-reg, onlinesim"},
			{value: "Signal", name: "Signal", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, smspva, onlinesim, vak-sms, give-sms"},
			{value: "sikka", name: "sikka", title: "5sim, onlinesim"},
			{value: "Singcity", name: "Singcity", title: "sms-activate, smshub, 365sms"},
			{value: "Siply", name: "Siply", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Sipnet", name: "Sipnet", title: "onlinesim, sms-acktiwator"},
			{value: "Sisal", name: "Sisal", title: "smspva, onlinesim"},
			{value: "Sizeer", name: "Sizeer", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "SKCAPITAL", name: "SKCAPITAL", title: "sms-activate, smshub, 365sms"},
			{value: "Skout", name: "Skout", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Skrill", name: "Skrill", title: "smspva, onlinesim"},
			{value: "Skroutz", name: "Skroutz", title: "sms-activate, smshub, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Skype", name: "Skype", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "SkyTV", name: "SkyTV", title: "sms-activate, smshub, 365sms"},
			{value: "Smart", name: "Smart", title: "sms-activate, smshub, 365sms, onlinesim, sms-acktiwator"},
			{value: "Smartfren", name: "Smartfren", title: "sms-activate, smshub, 365sms"},
			{value: "SmartyPig", name: "SmartyPig", title: "sms-activate, smshub, 365sms"},
			{value: "Smiles", name: "Smiles", title: "sms-activate, smshub, 365sms"},
			{value: "SMO71", name: "SMO71", title: "sms-activate, smshub, 365sms"},
			{value: "Snapchat", name: "Snapchat", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "SnappFood", name: "SnappFood", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "SneakersnStuff", name: "SneakersnStuff", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "Socios", name: "Socios", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "SOKOLOV", name: "SOKOLOV", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms"},
			{value: "Sony", name: "Sony", title: "onlinesim, sms-acktiwator"},
			{value: "Sony LIV", name: "Sony LIV", title: "sms-activate, smshub, 365sms"},
			{value: "Sorare", name: "Sorare", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "SoulApp", name: "SoulApp", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Spaces", name: "Spaces", title: "onlinesim, sms-acktiwator"},
			{value: "SpaceWeb", name: "SpaceWeb", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "SPAR", name: "SPAR", title: "5sim, onlinesim"},
			{value: "Spark Driver", name: "Spark Driver", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "SpatenOktoberfest", name: "SpatenOktoberfest", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "SportGully", name: "SportGully", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "SportMaster", name: "SportMaster", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "sportsbuzz11", name: "sportsbuzz11", title: "5sim, onlinesim"},
			{value: "SpotHit", name: "SpotHit", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Spotify", name: "Spotify", title: "sms-activate, smshub, 365sms, sms-reg"},
			{value: "Sprinthost", name: "Sprinthost", title: "onlinesim, sms-acktiwator"},
			{value: "Sravni.ru", name: "Sravni.ru", title: "sms-activate, smshub, 5sim, 365sms, sms-reg"},
			{value: "SSOid.net", name: "SSOid.net", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Starbucks", name: "Starbucks", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Steam", name: "Steam", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "steemit", name: "steemit", title: "5sim, cheapsms, onlinesim, sms-acktiwator, vak-sms"},
			{value: "SticPay", name: "SticPay", title: "sms-activate, smshub, 365sms"},
			{value: "StockyDodo", name: "StockyDodo", title: "sms-activate, smshub, 365sms"},
			{value: "Stoloto", name: "Stoloto", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Stormgain", name: "Stormgain", title: "sms-activate, smshub, 365sms, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "Strato", name: "Strato", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Stripe", name: "Stripe", title: "sms-activate, smshub, 365sms, vak-sms, give-sms"},
			{value: "Striving in the Lion City", name: "Striving in the Lion City", title: "sms-activate, smshub, 365sms"},
			{value: "Studwork", name: "Studwork", title: "onlinesim, sms-acktiwator"},
			{value: "Subito", name: "Subito", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Sunlight", name: "Sunlight", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator"},
			{value: "Suntec", name: "Suntec", title: "sms-activate, smshub, 365sms"},
			{value: "SuperS", name: "SuperS", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Surveybell", name: "Surveybell", title: "sms-activate, smshub, 365sms"},
			{value: "Surveytime", name: "Surveytime", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Sushkof", name: "Sushkof", title: "onlinesim, vak-sms"},
			{value: "swagbucks", name: "swagbucks", title: "5sim, smspva, onlinesim"},
			{value: "SWEET.TV", name: "SWEET.TV", title: "onlinesim, sms-acktiwator"},
			{value: "Swiggy", name: "Swiggy", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Switips", name: "Switips", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Swvl", name: "Swvl", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "SynotTip", name: "SynotTip", title: "sms-activate, smshub"},
			{value: "tabor.ru", name: "tabor.ru", title: "onlinesim, sms-acktiwator"},
			{value: "Taikang", name: "Taikang", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Taki", name: "Taki", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Taksheel", name: "Taksheel", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "talabat", name: "talabat", title: "5sim, onlinesim"},
			{value: "TamTam", name: "TamTam", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Tango", name: "Tango", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms"},
			{value: "Tanoti", name: "Tanoti", title: "sms-activate, smshub, 365sms"},
			{value: "TanTan", name: "TanTan", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Tanuki", name: "Tanuki", title: "onlinesim, vak-sms"},
			{value: "Taobao", name: "Taobao", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Taptap Send", name: "Taptap Send", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Tata CLiQ Palette", name: "Tata CLiQ Palette", title: "sms-activate, smshub, 365sms"},
			{value: "Tata Neu", name: "Tata Neu", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Tatneft", name: "Tatneft", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Taxify", name: "Taxify", title: "onlinesim, sms-acktiwator"},
			{value: "TaxiMaxim", name: "TaxiMaxim", title: "smspva, onlinesim, sms-acktiwator, vak-sms"},
			{value: "TEAMORU", name: "TEAMORU", title: "sms-activate, smshub, 365sms"},
			{value: "TeenpattiRummy3", name: "TeenpattiRummy3", title: "5sim, onlinesim"},
			{value: "TeenPattiStarpro", name: "TeenPattiStarpro", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "Telegram", name: "Telegram", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Telegram 2.0", name: "Telegram 2.0", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Temu", name: "Temu", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Tencent QQ", name: "Tencent QQ", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "TenChat", name: "TenChat", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "teremok", name: "teremok", title: "5sim, onlinesim"},
			{value: "TheFork", name: "TheFork", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Things", name: "Things", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "This Fate", name: "This Fate", title: "sms-activate, smshub, 365sms"},
			{value: "Thisshop", name: "Thisshop", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Threads", name: "Threads", title: "sms-activate, smspva"},
			{value: "Tick", name: "Tick", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Ticketmaster", name: "Ticketmaster", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms"},
			{value: "Tier", name: "Tier", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "tiketcom", name: "tiketcom", title: "sms-activate, smshub, 365sms"},
			{value: "TikTok", name: "TikTok", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Tilda", name: "Tilda", title: "sms-reg, onlinesim, vak-sms"},
			{value: "Tinder", name: "Tinder", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Tinkoff", name: "Tinkoff", title: "cheapsms, vak-sms"},
			{value: "Tiptapp", name: "Tiptapp", title: "sms-activate, smshub, 365sms"},
			{value: "TipTip", name: "TipTip", title: "sms-activate, smshub, 365sms"},
			{value: "Tiv", name: "Tiv", title: "sms-activate, smshub, 365sms"},
			{value: "Tokopedia", name: "Tokopedia", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "TOL Online", name: "TOL Online", title: "onlinesim, sms-acktiwator"},
			{value: "Tomato", name: "Tomato", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "TopDetal", name: "TopDetal", title: "sms-activate, smshub, 365sms"},
			{value: "Tosla", name: "Tosla", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Touchance", name: "Touchance", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "TradeUP", name: "TradeUP", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "TradingView", name: "TradingView", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "Transfergo", name: "Transfergo", title: "sms-activate, smshub, 365sms, sms-reg"},
			{value: "Trembet", name: "Trembet", title: "sms-activate, smshub, 365sms"},
			{value: "Trendyol", name: "Trendyol", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Trip", name: "Trip", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "Trovo", name: "Trovo", title: "onlinesim, vak-sms"},
			{value: "Truecaller", name: "Truecaller", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "TRUTH SOCIAL", name: "TRUTH SOCIAL", title: "sms-activate, smshub, 365sms, vak-sms"},
			{value: "TurkiyePetrolleri", name: "TurkiyePetrolleri", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Tuul", name: "Tuul", title: "sms-activate, smshub, 365sms"},
			{value: "Twilio", name: "Twilio", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, give-sms"},
			{value: "Twitch", name: "Twitch", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Twitter", name: "Twitter", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "UangMe", name: "UangMe", title: "sms-activate, smshub, 365sms"},
			{value: "Uber", name: "Uber", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Ubisoft", name: "Ubisoft", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms"},
			{value: "Uklon", name: "Uklon", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "Ukrnet", name: "Ukrnet", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "ultra.io", name: "ultra.io", title: "onlinesim, vak-sms"},
			{value: "Ultragaz", name: "Ultragaz", title: "sms-activate, smshub, 365sms"},
			{value: "unacademy", name: "unacademy", title: "5sim, onlinesim"},
			{value: "Uplay", name: "Uplay", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Upwork", name: "Upwork", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator"},
			{value: "Uralairlines", name: "Uralairlines", title: "sms-activate, smshub, 365sms"},
			{value: "urent", name: "urent", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Uteka", name: "Uteka", title: "sms-activate, smshub, cheapsms, 365sms, onlinesim, give-sms"},
			{value: "Utkonos", name: "Utkonos", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "UU163", name: "UU163", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "UWIN", name: "UWIN", title: "sms-activate, smshub, 365sms, sms-man, give-sms"},
			{value: "Uzum", name: "Uzum", title: "sms-activate, smshub, 365sms, onlinesim, sms-acktiwator"},
			{value: "Venmo", name: "Venmo", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "Venteny", name: "Venteny", title: "sms-activate, smshub, 365sms"},
			{value: "Vercel", name: "Vercel", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "VerifyKit", name: "VerifyKit", title: "sms-activate, smshub, 365sms"},
			{value: "Vernyi", name: "Vernyi", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Verse", name: "Verse", title: "sms-activate, smshub, 5sim, 365sms, smspva, give-sms"},
			{value: "vezet", name: "vezet", title: "5sim, onlinesim"},
			{value: "VFS GLOBAL", name: "VFS GLOBAL", title: "sms-activate, smshub, 365sms"},
			{value: "Viber", name: "Viber", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Vida", name: "Vida", title: "sms-activate, smshub, 365sms"},
			{value: "Vidio", name: "Vidio", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "VIMpay", name: "VIMpay", title: "sms-activate, smshub, 365sms"},
			{value: "Vinted", name: "Vinted", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "vipvending", name: "vipvending", title: "5sim, onlinesim"},
			{value: "Virgo", name: "Virgo", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "VitaExpress", name: "VitaExpress", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Vivo", name: "Vivo", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "VK", name: "VK", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Vkusvill", name: "Vkusvill", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, onlinesim, vak-sms, give-sms"},
			{value: "Vlife", name: "Vlife", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "VODOROBOT", name: "VODOROBOT", title: "onlinesim, vak-sms"},
			{value: "Voggt", name: "Voggt", title: "sms-activate, smshub, 365sms"},
			{value: "Voi", name: "Voi", title: "sms-activate, smshub, 365sms"},
			{value: "Voltz", name: "Voltz", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Vscale", name: "Vscale", title: "onlinesim, sms-acktiwator"},
			{value: "vscric", name: "vscric", title: "5sim, onlinesim"},
			{value: "Vsesmart", name: "Vsesmart", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "Vulkan Vegas", name: "Vulkan Vegas", title: "sms-activate, smshub, 365sms"},
			{value: "Walmart", name: "Walmart", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator"},
			{value: "WashXpress", name: "WashXpress", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "WAUG", name: "WAUG", title: "sms-activate, smshub, 365sms"},
			{value: "Webbankir.com", name: "Webbankir.com", title: "sms-reg, onlinesim"},
			{value: "WEBDE", name: "WEBDE", title: "sms-activate, smshub, 365sms"},
			{value: "WebMoney", name: "WebMoney", title: "cheapsms, sms-reg, smspva, sms-acktiwator, vak-sms"},
			{value: "WEBULL", name: "WEBULL", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "WeChat", name: "WeChat", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Weex", name: "Weex", title: "sms-activate, smshub, 365sms"},
			{value: "Weibo", name: "Weibo", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Weidian", name: "Weidian", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "WestStein", name: "WestStein", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Weverse", name: "Weverse", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "WhatsApp", name: "WhatsApp", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "WhatsAround", name: "WhatsAround", title: "onlinesim, sms-acktiwator"},
			{value: "Whoosh", name: "Whoosh", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Wildberries", name: "Wildberries", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "willhaben", name: "willhaben", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "WINDS", name: "WINDS", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Winelab", name: "Winelab", title: "onlinesim, vak-sms"},
			{value: "Wing Money", name: "Wing Money", title: "sms-activate, smshub, 5sim, 365sms, smspva, give-sms"},
			{value: "Wink", name: "Wink", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Winline", name: "Winline", title: "sms-reg, onlinesim"},
			{value: "Winmasters", name: "Winmasters", title: "sms-activate, smshub, 365sms"},
			{value: "winston", name: "winston", title: "5sim, onlinesim"},
			{value: "Winter Loan", name: "Winter Loan", title: "sms-activate, smshub, 365sms"},
			{value: "winzo", name: "winzo", title: "5sim, sms-man, onlinesim"},
			{value: "WinzoGame", name: "WinzoGame", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Wise", name: "Wise", title: "sms-activate, smshub, 365sms, sms-reg, smspva, onlinesim, vak-sms, give-sms"},
			{value: "Wish", name: "Wish", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "wizely", name: "wizely", title: "5sim, onlinesim"},
			{value: "Wmaraci", name: "Wmaraci", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "WOG.ua", name: "WOG.ua", title: "onlinesim, sms-acktiwator"},
			{value: "Wolt", name: "Wolt", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Wondermart", name: "Wondermart", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "WooPlus", name: "WooPlus", title: "sms-activate, smshub, 365sms"},
			{value: "WorldRemit", name: "WorldRemit", title: "sms-activate, smshub, 365sms"},
			{value: "X5ID", name: "X5ID", title: "sms-activate, smshub, cheapsms, 365sms, sms-reg, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "XadrezFeliz", name: "XadrezFeliz", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Xbox", name: "Xbox", title: "sms-activate, smshub, 365sms"},
			{value: "Xiaomi", name: "Xiaomi", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Ximalaya", name: "Ximalaya", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "xworldwallet", name: "xworldwallet", title: "sms-activate, smshub, 365sms"},
			{value: "XXGame", name: "XXGame", title: "sms-activate, smshub, 365sms"},
			{value: "Yaay", name: "Yaay", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Yahoo", name: "Yahoo", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Yalla", name: "Yalla", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Yamaguchi", name: "Yamaguchi", title: "onlinesim, vak-sms"},
			{value: "Yami", name: "Yami", title: "sms-activate, smshub"},
			{value: "Yandex", name: "Yandex", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Yandex.Eda", name: "Yandex.Eda", title: "onlinesim, sms-acktiwator"},
			{value: "YandexGo", name: "YandexGo", title: "sms-activate, smshub, cheapsms, 365sms, sms-acktiwator, give-sms"},
			{value: "yango", name: "yango", title: "5sim, onlinesim"},
			{value: "YAPPY", name: "YAPPY", title: "sms-activate, smshub, 5sim, getsms, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Yemeksepeti", name: "Yemeksepeti", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "YikYak", name: "YikYak", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Yonogames", name: "Yonogames", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "YooMoney", name: "YooMoney", title: "cheapsms, sms-reg, smspva, sms-acktiwator, vak-sms"},
			{value: "Yota", name: "Yota", title: "sms-reg, onlinesim"},
			{value: "YouDo", name: "YouDo", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, sms-acktiwator, vak-sms"},
			{value: "YouGotaGift", name: "YouGotaGift", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "Youla", name: "Youla", title: "sms-activate, smshub, 5sim, getsms, 365sms, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "YouStar", name: "YouStar", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "YoWin", name: "YoWin", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Ys4fun", name: "Ys4fun", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Yubo", name: "Yubo", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, vak-sms, give-sms"},
			{value: "Zach Bryan", name: "Zach Bryan", title: "sms-activate, smshub, 365sms"},
			{value: "Zadarma", name: "Zadarma", title: "sms-reg, onlinesim, sms-acktiwator"},
			{value: "ZaleyCash", name: "ZaleyCash", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Zalo", name: "Zalo", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Zasilkovna", name: "Zasilkovna", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Zaymer", name: "Zaymer", title: "cheapsms, sms-reg, onlinesim"},
			{value: "ZCity", name: "ZCity", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "Zdorov", name: "Zdorov", title: "sms-activate, smshub"},
			{value: "ZdravCity", name: "ZdravCity", title: "sms-activate, smshub, cheapsms, 365sms, sms-man, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "zebpay", name: "zebpay", title: "5sim, onlinesim"},
			{value: "zenly", name: "zenly", title: "onlinesim, sms-acktiwator"},
			{value: "Zenvia", name: "Zenvia", title: "sms-activate, smshub, 365sms"},
			{value: "Zepto", name: "Zepto", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Zhihu", name: "Zhihu", title: "sms-activate, smshub, 365sms, vak-sms, give-sms"},
			{value: "Ziglu", name: "Ziglu", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Zilch", name: "Zilch", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Zoho", name: "Zoho", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Zolushka", name: "Zolushka", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Zomato", name: "Zomato", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Zoo Game", name: "Zoo Game", title: "sms-activate, smshub, 365sms"},
			{value: "ZOON.RU", name: "ZOON.RU", title: "onlinesim, vak-sms"},
			{value: "Zupee", name: "Zupee", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "ZUS Coffee", name: "ZUS Coffee", title: "sms-activate, smshub, 365sms"},
			{value: "ZéDelivery", name: "ZéDelivery", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Şikayet var", name: "Şikayet var", title: "sms-activate, smshub, 365sms, sms-man, give-sms"},
			{value: "Автор24", name: "Автор24", title: "365sms, onlinesim"},
			{value: "Аптека Апрель", name: "Аптека Апрель", title: "sms-activate, smshub, 365sms"},
			{value: "Бери заряд", name: "Бери заряд", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "БлинБери", name: "БлинБери", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Велобайк", name: "Велобайк", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Вкусно и Точка", name: "Вкусно и Точка", title: "sms-activate, smshub, cheapsms, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "ВсеИнструменты", name: "ВсеИнструменты", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "Голос", name: "Голос", title: "sms-activate, smshub"},
			{value: "Город", name: "Город", title: "sms-activate, smshub, 365sms"},
			{value: "Джилекс", name: "Джилекс", title: "sms-activate, smshub, 365sms"},
			{value: "Домовой", name: "Домовой", title: "sms-activate, smshub, 365sms"},
			{value: "Едем.рф", name: "Едем.рф", title: "onlinesim, vak-sms"},
			{value: "Золотое Яблоко", name: "Золотое Яблоко", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "Контур", name: "Контур", title: "sms-activate, smshub, 365sms"},
			{value: "Кораблик", name: "Кораблик", title: "sms-activate, smshub, 365sms"},
			{value: "Кузбасс Онлайн", name: "Кузбасс Онлайн", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "КухняНаРайоне", name: "КухняНаРайоне", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Лейка", name: "Лейка", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Максавит", name: "Максавит", title: "sms-activate, smshub, 365sms"},
			{value: "МИГРАНТ СЕРВИС", name: "МИГРАНТ СЕРВИС", title: "sms-activate, smshub, 365sms"},
			{value: "МирЗнакомств", name: "МирЗнакомств", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Нефтьмагистраль", name: "Нефтьмагистраль", title: "365sms, onlinesim"},
			{value: "Окей", name: "Окей", title: "sms-activate, smshub, 365sms"},
			{value: "Петрович", name: "Петрович", title: "onlinesim, vak-sms"},
			{value: "Рив Гош", name: "Рив Гош", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "РСА", name: "РСА", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "СhampionСasino", name: "СhampionСasino", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Совкомбанк", name: "Совкомбанк", title: "cheapsms, vak-sms"},
			{value: "СушиВёсла", name: "СушиВёсла", title: "sms-activate, smshub, 365sms"},
			{value: "ТОКИО-CITY", name: "ТОКИО-CITY", title: "sms-activate, smshub, 365sms"},
			{value: "Улыбка радуги", name: "Улыбка радуги", title: "365sms, onlinesim, vak-sms"},
			{value: "УлыбкаРадуги", name: "УлыбкаРадуги", title: "sms-activate, smshub"},
			{value: "Халва", name: "Халва", title: "sms-activate, smshub, 365sms"},
			{value: "Шоколадница", name: "Шоколадница", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "Штолле", name: "Штолле", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Энергобум", name: "Энергобум", title: "sms-activate, smshub, 365sms"},
			{value: "ЯRUS", name: "ЯRUS", title: "onlinesim, vak-sms"},
			{value: "炙热星河", name: "炙热星河", title: "sms-activate, smshub, 365sms, give-sms"}
		]
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "country",
		description: tr("Country"),
		default_selector: "string",
		disable_int: true,
		value_string: "RU",
		variants: [
			"RU<br/><span style='color:gray' title='sms-activate, smshub, 5sim, getsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Russian Federation") + "</span>",
			"KZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, getsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Kazakhstan") + "</span>",
			"UA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Ukraine") + "</span>",
			"PL<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Poland") + "</span>",
			"GB<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("United Kingdom") + "</span>",
			"EE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Estonia") + "</span>",
			"DE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Germany") + "</span>",
			"LT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Lithuania") + "</span>",
			"SE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Sweden") + "</span>",
			"NL<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Netherlands") + "</span>",
			"LV<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Latvia") + "</span>",
			"AT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Austria") + "</span>",
			"CZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Czech Republic") + "</span>",
			"FR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("France") + "</span>",
			"MD<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Moldova") + "</span>",
			"PT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Portugal") + "</span>",
			"GR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Greece") + "</span>",
			"PH<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Philippines") + "</span>",
			"ID<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Indonesia") + "</span>",
			"MY<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Malaysia") + "</span>",
			"KE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Kenya") + "</span>",
			"LA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Lao People's Democratic Republic") + "</span>",
			"RO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Romania") + "</span>",
			"MA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Morocco") + "</span>",
			"TH<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Thailand") + "</span>",
			"ES<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Spain") + "</span>",
			"SI<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Slovenia") + "</span>",
			"FI<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Finland") + "</span>",
			"US<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("United States") + "</span>",
			"US (Virtual)<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-acktiwator, give-sms'>" + tr("United States") + "</span>",
			"VN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, vak-sms, give-sms'>" + tr("Vietnam") + "</span>",
			"KG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Kyrgyzstan") + "</span>",
			"IL<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Israel") + "</span>",
			"NG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Nigeria") + "</span>",
			"RS<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Serbia") + "</span>",
			"ZA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("South Africa") + "</span>",
			"CO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Colombia") + "</span>",
			"MX<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, vak-sms, give-sms'>" + tr("Mexico") + "</span>",
			"BR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Brazil") + "</span>",
			"CY<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Cyprus") + "</span>",
			"BG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, vak-sms, give-sms'>" + tr("Bulgaria") + "</span>",
			"GE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Georgia") + "</span>",
			"CL<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Chile") + "</span>",
			"DK<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Denmark") + "</span>",
			"CN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, onlinesim, give-sms'>" + tr("China") + "</span>",
			"MM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Myanmar") + "</span>",
			"HK<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, vak-sms, give-sms'>" + tr("Hong Kong") + "</span>",
			"IN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("India") + "</span>",
			"IE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Ireland") + "</span>",
			"KH<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Cambodia") + "</span>",
			"CI<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Cote d'Ivoire") + "</span>",
			"CA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, sms-acktiwator, give-sms'>" + tr("Canada") + "</span>",
			"CA (Virtual)<br/><span style='color:gray' title='onlinesim'>" + tr("Canada") + "</span>",
			"AR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Argentina") + "</span>",
			"UZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Uzbekistan") + "</span>",
			"CM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Cameroon") + "</span>",
			"TD<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Chad") + "</span>",
			"HR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Croatia") + "</span>",
			"BY<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Belarus") + "</span>",
			"TR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Turkey") + "</span>",
			"PK<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, vak-sms, give-sms'>" + tr("Pakistan") + "</span>",
			"PK (Virtual)<br/><span style='color:gray' title='smspva'>" + tr("Pakistan") + "</span>",
			"NZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("New Zealand") + "</span>",
			"GN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Guinea") + "</span>",
			"UG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Uganda") + "</span>",
			"IT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Italy") + "</span>",
			"HN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Honduras") + "</span>",
			"SV<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("El Salvador") + "</span>",
			"DO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Dominican Republic") + "</span>",
			"MR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Mauritania") + "</span>",
			"BJ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Benin") + "</span>",
			"BF<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Burkina Faso") + "</span>",
			"EG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Egypt") + "</span>",
			"EG (Virtual)<br/><span style='color:gray' title='smspva'>" + tr("Egypt") + "</span>",
			"HT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Haiti") + "</span>",
			"GM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Gambia") + "</span>",
			"YE<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Yemen") + "</span>",
			"GH<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Ghana") + "</span>",
			"GH (Virtual)<br/><span style='color:gray' title='smspva'>" + tr("Ghana") + "</span>",
			"IQ<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Iraq") + "</span>",
			"SA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Saudi Arabia") + "</span>",
			"TW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Taiwan, Province of China") + "</span>",
			"BD<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, give-sms'>" + tr("Bangladesh") + "</span>",
			"SN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Senegal") + "</span>",
			"LK<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Sri Lanka") + "</span>",
			"PE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Peru") + "</span>",
			"ML<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Mali") + "</span>",
			"VE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Venezuela") + "</span>",
			"MN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Mongolia") + "</span>",
			"AF<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Afghanistan") + "</span>",
			"AO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Angola") + "</span>",
			"MZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-acktiwator, give-sms'>" + tr("Mozambique") + "</span>",
			"NP<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Nepal") + "</span>",
			"HU<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, give-sms'>" + tr("Hungary") + "</span>",
			"PY<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, give-sms'>" + tr("Paraguay") + "</span>",
			"TN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Tunisia") + "</span>",
			"NI<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Nicaragua") + "</span>",
			"BO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Bolivia, plurinational state of") + "</span>",
			"TG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator'>" + tr("Togo") + "</span>",
			"EC<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Ecuador") + "</span>",
			"BA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, sms-acktiwator'>" + tr("Bosnia and Herzegovina") + "</span>",
			"SL<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Sierra Leone") + "</span>",
			"JO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Jordan") + "</span>",
			"BI<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator'>" + tr("Burundi") + "</span>",
			"BW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-acktiwator, give-sms'>" + tr("Botswana") + "</span>",
			"LR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Liberia") + "</span>",
			"SK<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, sms-acktiwator'>" + tr("Slovakia") + "</span>",
			"TJ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Tajikistan") + "</span>",
			"CG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Congo") + "</span>",
			"GA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Gabon") + "</span>",
			"NO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-acktiwator, give-sms'>" + tr("Norway") + "</span>",
			"MK<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim'>" + tr("Macedonia, The Former Yugoslav Republic Of") + "</span>",
			"TZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Tanzania, United Republic Of") + "</span>",
			"DZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Algeria") + "</span>",
			"ET<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Ethiopia") + "</span>",
			"PG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Papua New Guinea") + "</span>",
			"BE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Belgium") + "</span>",
			"GT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Guatemala") + "</span>",
			"ZW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Zimbabwe") + "</span>",
			"JM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Jamaica") + "</span>",
			"TT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Trinidad and Tobago") + "</span>",
			"PA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Panama") + "</span>",
			"GW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Guinea-Bissau") + "</span>",
			"GY<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Guyana") + "</span>",
			"MW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Malawi") + "</span>",
			"SR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Suriname") + "</span>",
			"RE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Reunion") + "</span>",
			"ZM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Zambia") + "</span>",
			"AM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Armenia") + "</span>",
			"AL<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva'>" + tr("Albania") + "</span>",
			"MU<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Mauritius") + "</span>",
			"BT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Bhutan") + "</span>",
			"MV<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Maldives") + "</span>",
			"TM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Turkmenistan") + "</span>",
			"CH<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Switzerland") + "</span>",
			"AU<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Australia") + "</span>",
			"SG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Singapore") + "</span>",
			"MG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Madagascar") + "</span>",
			"CD<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man, give-sms'>" + tr("Congo, Democratic Republic of the") + "</span>",
			"MO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Macao") + "</span>",
			"AZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, sms-man, onlinesim'>" + tr("Azerbaijan") + "</span>",
			"IR<br/><span style='color:gray' title='sms-activate, smshub, sms-man, onlinesim, give-sms'>" + tr("Iran, Islamic Republic of") + "</span>",
			"TL<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Timor-Leste") + "</span>",
			"CR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Costa Rica") + "</span>",
			"AE<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man, give-sms'>" + tr("United Arab Emirates") + "</span>",
			"PR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Puerto Rico") + "</span>",
			"SD<br/><span style='color:gray' title='sms-activate, smshub, sms-man, onlinesim, give-sms'>" + tr("Sudan") + "</span>",
			"KW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Kuwait") + "</span>",
			"LY<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man, give-sms'>" + tr("Libyan Arab Jamahiriya") + "</span>",
			"SZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Eswatini") + "</span>",
			"OM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Oman") + "</span>",
			"BB<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Barbados") + "</span>",
			"BS<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Bahamas") + "</span>",
			"BZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Belize") + "</span>",
			"DM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, give-sms'>" + tr("Dominica") + "</span>",
			"GD<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Grenada") + "</span>",
			"KM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Comoros") + "</span>",
			"KN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Saint Kitts and Nevis") + "</span>",
			"LS<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Lesotho") + "</span>",
			"NA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Namibia") + "</span>",
			"NE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Niger") + "</span>",
			"RW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Rwanda") + "</span>",
			"BH<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Bahrain") + "</span>",
			"LB<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man, give-sms'>" + tr("Lebanon") + "</span>",
			"UY<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Uruguay") + "</span>",
			"GP<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Guadeloupe") + "</span>",
			"GF<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("French Guiana") + "</span>",
			"LC<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Saint Lucia") + "</span>",
			"LU<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Luxembourg") + "</span>",
			"VC<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Saint Vincent and the Grenadines") + "</span>",
			"GQ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Equatorial Guinea") + "</span>",
			"AG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Antigua and Barbuda") + "</span>",
			"AW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, give-sms'>" + tr("Aruba") + "</span>",
			"NC<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("New Caledonia") + "</span>",
			"CV<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Cape Verde") + "</span>",
			"SY<br/><span style='color:gray' title='sms-activate, smshub, sms-man, give-sms'>" + tr("Syrian Arab Republic") + "</span>",
			"QA<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man'>" + tr("Qatar") + "</span>",
			"CU<br/><span style='color:gray' title='sms-activate, smshub, sms-man, sms-acktiwator'>" + tr("Cuba") + "</span>",
			"BN<br/><span style='color:gray' title='sms-activate, smshub, 365sms, give-sms'>" + tr("Brunei Darussalam") + "</span>",
			"CF<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man'>" + tr("Central African Republic") + "</span>",
			"IS<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man'>" + tr("Iceland") + "</span>",
			"SO<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man'>" + tr("Somalia") + "</span>",
			"DJ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Djibouti") + "</span>",
			"KY<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Cayman Islands") + "</span>",
			"ME<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Montenegro") + "</span>",
			"ER<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Eritrea") + "</span>",
			"SS<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man'>" + tr("South Sudan") + "</span>",
			"ST<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Sao Tome and Principe") + "</span>",
			"MS<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Montserrat") + "</span>",
			"AI<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Anguilla") + "</span>",
			"SC<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Seychelles") + "</span>",
			"FJ<br/><span style='color:gray' title='sms-activate, smshub, 365sms, give-sms'>" + tr("Fiji") + "</span>",
			"MC<br/><span style='color:gray' title='sms-activate, smshub, 365sms'>" + tr("Monaco") + "</span>",
			"GI<br/><span style='color:gray' title='sms-activate, smshub, smspva'>" + tr("Gibraltar") + "</span>",
			"JP<br/><span style='color:gray' title='5sim, sms-man'>" + tr("Japan") + "</span>",
			"KR<br/><span style='color:gray' title='5sim, give-sms'>" + tr("Korea, Republic of") + "</span>",
			"WS<br/><span style='color:gray' title='5sim'>" + tr("Samoa") + "</span>",
			"SB<br/><span style='color:gray' title='5sim'>" + tr("Solomon Islands") + "</span>",
			"TO<br/><span style='color:gray' title='5sim'>" + tr("Tonga") + "</span>",
			"TC<br/><span style='color:gray' title='5sim'>" + tr("Turks and Caicos Islands") + "</span>",
			"VG<br/><span style='color:gray' title='5sim'>" + tr("Virgin Islands, British") + "</span>",
			"XK<br/><span style='color:gray' title='smspva'>" + tr("Kosovo") + "</span>",
			"BM<br/><span style='color:gray' title='give-sms'>" + tr("Bermuda") + "</span>"
		],
		help: {
			description: tr("Optional parameter.") + " " + tr("Country of the number."),
			examples: [
				{code: "RU", description: tr("Russian Federation")},
				{code: "UA", description: tr("Ukraine")},
				{code: "US", description: tr("United States")},
				{code: tr("Empty string"), description: tr("Depends on the service used, maybe the last used country or some specific country, you can find out more in the description of the API of the service.")}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#input_constructor').html())({
			id: "operator",
			description: tr("Operator"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Cellular operator of the number, in the form in which it is perceived by the SMS receiving service.") + " " + tr("This parameter is not available for all services."),
				examples: [
					{code: "megafon", description: tr("MegaFon")},
					{code: "kyivstar", description: tr("Kyivstar")},
					{code: "tele2", description: "Tele2"},
					{code: tr("Empty string"), description: tr("Use any operator.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "maxPrice",
			description: tr("Maximum price"),
			default_selector: "int",
			disable_string: true,
			value_number: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("The maximum price for which you are willing to buy a number.") + " " + tr("This parameter is not available for all services."),
				examples: [
					{code: "10"},
					{code: "15"},
					{code: "20"},
					{code: tr("Empty string"), description: tr("Buy at regular price.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "customSite",
			description: tr("Custom site"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Custom value of the site, in the form in which it is perceived by the SMS receiving service. If this parameter is specified, then it will be used instead of the \"Site\" parameter and sent to the service without preliminary processing."),
				examples: [
					{code: "wa", description: "WhatsApp"},
					{code: "tg", description: "Telegram"},
					{code: "go", description: "Google"},
					{code: tr("Empty string"), description: tr("Use value from \"") + tr("Site") + tr("\" parameter.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "customCountry",
			description: tr("Custom country"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Custom value of the country, in the form in which it is perceived by the SMS receiving service. If this parameter is specified, then it will be used instead of the \"Country\" parameter and sent to the service without preliminary processing."),
				examples: [
					{code: "0", description: tr("Russian Federation")},
					{code: "1", description: tr("Ukraine")},
					{code: "187", description: tr("United States")},
					{code: tr("Empty string"), description: tr("Use value from \"") + tr("Country") + tr("\" parameter.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "serverUrl",
			description: tr("Server url"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Url of the SMS receiving service server. Use this parameter to specify the url of the server, if the required service is not in the list of available ones, but it works through an API similar to the selected service."),
				examples: [
					{code: "https://sms.org"},
					{code: "http://receive-sms.com"},
					{code: "http://127.0.0.1:8888"},
					{code: tr("Empty string"), description: tr("Use default server url, https://api.sms-activate.org for sms-activate.org, etc")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#variable_constructor').html())({
		id: "Save",
		description: tr("Variable to save the result"),
		default_variable: "PHONE_NUMBER",
		help: {
			description:tr("Variable in which, after successful execution of the action, the phone number will be written."),
			examples: [
				{code: "79001112323"},
				{code: "17039688838"},
				{code: "380048698566"}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get phone number from the SMS receiving service.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a string containing the received phone number.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">Example</span>: <code>"79001112323"</code></div>
	<div class="tr tooltip-paragraph-fold">The received number must be used in the "Get activation code" action to get the code from SMS, or in the "Change activation status" action to change the number status.</div>
	<div class="tr tooltip-paragraph-fold">You can specify your value for the operator, site and country in the corresponding parameters located in the additional settings. Please note that these values must be specified in the form in which the service perceives them, they will be sent as you specified them.</div>
	<div class="tr tooltip-paragraph-fold">If the required service is not in the list of available ones, but it works through an API similar to the selected service, then you can specify its server url in the corresponding parameter located in the additional settings.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %></script><script type="text/template" id="SMS_GetCode"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "number",
		description: tr("Number"),
		default_selector: "string",
		disable_int: true,
		value_string: "",
		help: {
			description:tr("The number obtained from the \"Get phone number\" action, for which need to receive an SMS code."),
			examples: [
				{code: "79001112323"},
				{code: "17039688838"},
				{code: "380048698566"}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#input_constructor').html())({
			id: "interval",
			description: tr("Interval (seconds)"),
			default_selector: "int",
			disable_string: true,
			value_number: 5,
			min_number: 1,
			max_number: 999999,
			help: {
				description: tr("The code readiness check interval in seconds."),
				examples: [
					{code: 2, description: tr("Check every 2 seconds")},
					{code: 5, description: tr("Check every 5 seconds")},
					{code: 10, description: tr("Check every 10 seconds")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "timeout",
			description: tr("Timeout (minutes)"),
			default_selector: "int",
			disable_string: true,
			value_number: 10,
			min_number: 1,
			max_number: 999999,
			help: {
				description: tr("Maximum waiting time for SMS code in minutes. If the specified time expires and the SMS is not received, then the action will end with an error."),
				examples: [
					{code: 10, description: tr("Wait 10 minutes")},
					{code: 15, description: tr("Wait 15 minutes")},
					{code: 20, description: tr("Wait 20 minutes")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#variable_constructor').html())({
		id: "Save",
		description: tr("Variable to save the result"),
		default_variable: "SMS_CODE",
		help: {
			description:tr("Variable in which, after successful execution of the action, he SMS code will be written."),
			examples: [
				{code: "75588"},
				{code: "98292"},
				{code: "558925"},
				{code: tr("Activation code: 75588"), description: tr("The service failed to get the code from the SMS, a full message was returned")}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get an activation code from the specified number.</div>
	<div class="tr tooltip-paragraph-fold">Before performing this action, you first need to get a number using the "Get phone number" action and use it unchanged in the "Number" parameter.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a string containing the code from the SMS message or the full message if the service was unable to get the code from it.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the service managed to get the code from SMS, then the action will return <code>"75588"</code>, and if the service failed to get the code from SMS, then the action will return <code>"Activation code: 75588"</code>.</div>
	<div class="tr tooltip-paragraph-fold">To get another code to the same number, set status <code>3</code> by the action "Change activation status" and call this action again. You must set the status <code>3</code> before each new receipt of the code to the same number.</div>
	<div class="tooltip-paragraph-fold"><span class="tr"><code>&lt;Attention!&gt;</code></span><span class="tr">Depending on the service, receiving a repeated SMS code may be paid, unavailable or limited in number, information about this should be found in the description of the service or its API.</span><span class="tr"><code>&lt;Attention!&gt;</code></span></div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action or code is not received within timeout specified in additional settings, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="SMS_SetStatus"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "number",
		description: tr("Number"),
		default_selector: "string",
		disable_int: true,
		value_string: "",
		help: {
			description:tr("The number obtained from the \"Get phone number\" action, for which need to change the activation status."),
			examples: [
				{code: "79001112323"},
				{code: "17039688838"},
				{code: "380048698566"}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "status",
		description: tr("Stаtus"),
		default_selector: "string",
		disable_int: true,
		value_string: "", 
		variants: [
			"-1<br/><span style='color:gray'>" + tr("Cancel activation.") + "</span>",
			"1<br/><span style='color:gray'>" + tr("Inform about the availability of the number.") + "</span>",
			"3<br/><span style='color:gray'>" + tr("Request another code.") + "</span>",
			"6<br/><span style='color:gray'>" + tr("Complete activation.") + "</span>",
			"8<br/><span style='color:gray'>" + tr("Notify that the number is used and cancel the activation.") + "</span>",
		],
		help: {
			description: tr("The status to be set for the specified number."),
			examples: [
				{code: "-1", description: tr("Cancel activation.")},
				{code: "1", description: tr("Inform about the availability of the number.")},
				{code: "3", description: tr("Request another code.")},
				{code: "6", description: tr("Complete activation.")},
				{code: "8", description: tr("Notify that the number is used and cancel the activation.")}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#checkbox').html())({id: "Check", title: tr("Delete information about the number when the status is -1, 6 or 8."), checked: true}) %>

	<%= _.template($('#block_end').html())() %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Change the activation status for the specified number.</div>
	<div class="tr tooltip-paragraph-fold">Before performing this action, you first need to get a number using the "Get phone number" action and use it unchanged in the "Number" parameter.</div>
	<div class="tr tooltip-paragraph-fold">This action changes the activation status for the specified number on the SMS receiving service.</div>
	<div class="tr tooltip-paragraph-fold">Possible statuses:</div>
	<div class="tr tooltip-paragraph-fold"><code>-1</code> - cancel activation, if the number did not suit you or was received by accident.</div>
	<div class="tr tooltip-paragraph-fold"><code>1</code> - inform about the readiness of the number, if the SMS has already been sent, the "Get activation code" action sets this status automatically, therefore it is not necessary to set this status.</div>
	<div class="tr tooltip-paragraph-fold"><code>3</code> - request another code, if you need to receive another SMS code to the same number. This status must be set before each reuse of the "Get activation code" action.</div>
	<div class="tooltip-paragraph-fold"><span class="tr"><code>&lt;Attention!&gt;</code></span><span class="tr">Depending on the service, receiving a repeated SMS code may be paid, unavailable or limited in number, information about this should be found in the description of the service or its API.</span><span class="tr"><code>&lt;Attention!&gt;</code></span></div>
	<div class="tr tooltip-paragraph-fold"><code>6</code> - complete activation, if the correct SMS code has been received and you want to complete the work with the specified number.</div>
	<div class="tr tooltip-paragraph-fold"><code>8</code> - inform that the number has been used and cancel activation if the specified number is busy or blocked on the desired site.</div>
	<div class="tr tooltip-paragraph-fold">By default, the information about the number is deleted when the statuses -1, 6 and 8 are successfully set, but this can be disabled in the additional settings.</div>
	<div class="tr tooltip-paragraph-fold">If the service does not support the specified status, then the action will do nothing.</div>
	<div class="tr tooltip-paragraph-last-fold">If the status cannot be changed or an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %></script><script type="text/template" id="SMS_GetBalance"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "service",
		description: tr("Service"),
		default_selector: "string",
		variants: [
			{value: "sms-activate.org", description: tr("Ex sms-activate.ru")},
			"smshub.org",
			"5sim.net",
			{value: "onlinesim.io", description: tr("Ex onlinesim.ru")},
			{value: "smsak.org", description: tr("Ex sms-acktiwator.ru")},
			"sms-reg.com",
			{value: "vak-sms.ru", description: tr("Ex vak-sms.com")},
			"give-sms.com",
			"getsms.online",
			"sms-man.ru",
			{value: "cheapsms.io", description: tr("Ex cheapsms.ru")},
			{value: "smscode.me", description: tr("Ex sms.kopeechka.store")},
			{value: "365sms.org", description: tr("Ex 365sms.ru")},
			"smspva.com",
			"simsms.org"
		],
		disable_int: true,
		value_string: "sms-activate.org",
		help: {
			description: tr("SMS receiving service for which need to get a balance."),
			examples: [
				{code: "sms-activate.org", description: "https://sms-activate.org"},
				{code: "smshub.org", description: "https://smshub.org"},
				{code: "sms-reg.com", description: "https://sms-reg.com"}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "apiKey",
		description: tr("API key"),
		default_selector: "string",
		disable_int: true,
		value_string: "",
		help: {
			description: tr("API key of the SMS receiving service. The key for the service selected in the \"Service\" parameter. Depending on the service, you can get it in your personal account or in the service settings."),
			examples: [
				{code: "8b1a9953c4611296a827abf8c47804d7"},
				{code: "79916U5718g2266a7bff7fad356c6cb280b3ea"},
				{code: "f4d559ba78aa6c4701c1995ae9977c03"}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#input_constructor').html())({
			id: "serverUrl",
			description: tr("Server url"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Url of the SMS receiving service server. Use this parameter to specify the url of the server, if the required service is not in the list of available ones, but it works through an API similar to the selected service."),
				examples: [
					{code: "https://sms.org"},
					{code: "http://receive-sms.com"},
					{code: "http://127.0.0.1:8888"},
					{code: tr("Empty string"), description: tr("Use default server url, https://api.sms-activate.org for sms-activate.org, etc")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#variable_constructor').html())({
		id: "Save",
		description: tr("Variable to save the result"),
		default_variable: "SMS_BALANCE",
		help: {
			description:tr("Variable in which, after successful execution of the action, the balance will be written."),
			examples: [
				{code: 1.32},
				{code: 120},
				{code: 1596},
				{code: "null", description: tr("Failed to get balance")}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get the balance of the SMS receiving service.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a number equal to the balance of the specified SMS receiving service. If failed to get the balance, then the action will return <code>null</code>.</div>
	<div class="tr tooltip-paragraph-fold">If the required service is not in the list of available ones, but it works through an API similar to the selected service, then you can specify its server url in the corresponding parameter located in the additional settings.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %></script><script type="text/template" id="SMS_GetNumbersCount"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "service",
		description: tr("Service"),
		default_selector: "string",
		variants: [
			{value: "sms-activate.org", description: tr("Ex sms-activate.ru")},
			"smshub.org",
			"5sim.net",
			{value: "onlinesim.io", description: tr("Ex onlinesim.ru")},
			{value: "smsak.org", description: tr("Ex sms-acktiwator.ru")},
			{value: "vak-sms.ru", description: tr("Ex vak-sms.com")},
			"give-sms.com",
			"getsms.online",
			"sms-man.ru",
			{value: "cheapsms.io", description: tr("Ex cheapsms.ru")},
			{value: "smscode.me", description: tr("Ex sms.kopeechka.store")},
			{value: "365sms.org", description: tr("Ex 365sms.ru")},
			"smspva.com",
			"simsms.org"
		],
		disable_int: true,
		value_string: "sms-activate.org",
		help: {
			description: tr("SMS receiving service for which need to get the count of available numbers."),
			examples: [
				{code: "sms-activate.org", description: "https://sms-activate.org"},
				{code: "smshub.org", description: "https://smshub.org"},
				{code: "5sim.net", description: "https://5sim.net"}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "apiKey",
		description: tr("API key"),
		default_selector: "string",
		disable_int: true,
		value_string: "",
		help: {
			description: tr("API key of the SMS receiving service. The key for the service selected in the \"Service\" parameter. Depending on the service, you can get it in your personal account or in the service settings."),
			examples: [
				{code: "8b1a9953c4611296a827abf8c47804d7"},
				{code: "79916U5718g2266a7bff7fad356c6cb280b3ea"},
				{code: "f4d559ba78aa6c4701c1995ae9977c03"}
			]
		}
	}) %>
	<%= _.template($('#combobox').html())({id: "site", title: tr("Site"), search: true, items: [
			{value: "Other", selected: true, name: tr("Other"), title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "1and1", name: "1and1", title: "sms-activate, smshub, 365sms"},
			{value: "1Cupis", name: "1Cupis", title: "cheapsms, sms-reg, onlinesim, vak-sms"},
			{value: "1mg", name: "1mg", title: "5sim, onlinesim"},
			{value: "1xBet", name: "1xBet", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "2domains", name: "2domains", title: "onlinesim, vak-sms"},
			{value: "4Fun", name: "4Fun", title: "sms-activate, smshub, 365sms, sms-acktiwator, vak-sms, give-sms"},
			{value: "4game", name: "4game", title: "onlinesim, sms-acktiwator"},
			{value: "23red", name: "23red", title: "smshub, 5sim, 365sms, give-sms"},
			{value: "24betting", name: "24betting", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "24u", name: "24u", title: "5sim, onlinesim, vak-sms"},
			{value: "32red", name: "32red", title: "sms-activate, 5sim, onlinesim, vak-sms"},
			{value: "99acres", name: "99acres", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "99app", name: "99app", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "99k Outlet", name: "99k Outlet", title: "sms-activate, smshub, 365sms"},
			{value: "150bar", name: "150bar", title: "onlinesim, vak-sms"},
			{value: "163.com", name: "163.com", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "888casino", name: "888casino", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "1688", name: "1688", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, vak-sms, give-sms"},
			{value: "A9A", name: "A9A", title: "sms-activate, smshub"},
			{value: "A23", name: "A23", title: "sms-activate, smshub, 365sms"},
			{value: "Abbott", name: "Abbott", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Ace2Three", name: "Ace2Three", title: "sms-activate, smshub, 5sim, 365sms, vak-sms, give-sms"},
			{value: "Acko", name: "Acko", title: "sms-activate, smshub, 365sms"},
			{value: "AdaKami", name: "AdaKami", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Adani", name: "Adani", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "adda52", name: "adda52", title: "5sim, onlinesim"},
			{value: "Adidas", name: "Adidas", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Adverts", name: "Adverts", title: "sms-activate, smshub, 365sms"},
			{value: "AfreecaTV", name: "AfreecaTV", title: "sms-activate, smshub, 365sms"},
			{value: "AGIBANK", name: "AGIBANK", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "AgriDevelop", name: "AgriDevelop", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Agroinform", name: "Agroinform", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Airbnb", name: "Airbnb", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Airtel", name: "Airtel", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Airtime", name: "Airtime", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "AIS", name: "AIS", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Aitu", name: "Aitu", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-acktiwator, give-sms"},
			{value: "Akelni", name: "Akelni", title: "5sim, onlinesim"},
			{value: "Akudo", name: "Akudo", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Akulaku", name: "Akulaku", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Alchemy", name: "Alchemy", title: "sms-activate, smshub, 365sms"},
			{value: "Alfa", name: "Alfa", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Alfagift", name: "Alfagift", title: "sms-activate, smshub, 365sms, sms-acktiwator, vak-sms, give-sms"},
			{value: "AlfaStrah", name: "AlfaStrah", title: "sms-reg, onlinesim"},
			{value: "Algida", name: "Algida", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Alibaba", name: "Alibaba", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Aliexpress", name: "Aliexpress", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "AliPay", name: "AliPay", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "All Access", name: "All Access", title: "sms-activate, smshub, 365sms"},
			{value: "Allegro", name: "Allegro", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "AlloBank", name: "AlloBank", title: "sms-activate, smshub, 365sms"},
			{value: "Allofresh", name: "Allofresh", title: "sms-activate, smshub, 365sms"},
			{value: "Amasia", name: "Amasia", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Amazon", name: "Amazon", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Ame Digital", name: "Ame Digital", title: "sms-activate, smshub, 365sms"},
			{value: "Amway", name: "Amway", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Angel One", name: "Angel One", title: "sms-activate, smshub, 365sms"},
			{value: "Anibis", name: "Anibis", title: "sms-activate, smshub, 365sms"},
			{value: "Ankama", name: "Ankama", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Aol", name: "Aol", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "ApostaGanha", name: "ApostaGanha", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Appbonus", name: "Appbonus", title: "onlinesim, sms-acktiwator"},
			{value: "Apple", name: "Apple", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Apteka.ru", name: "Apteka.ru", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, give-sms"},
			{value: "AptekiPlus", name: "AptekiPlus", title: "sms-activate, smshub, onlinesim"},
			{value: "AR Lens", name: "AR Lens", title: "sms-activate, smshub, 365sms"},
			{value: "ArenaPlus", name: "ArenaPlus", title: "sms-activate, smshub, 365sms"},
			{value: "Argent", name: "Argent", title: "sms-activate, smshub, 365sms"},
			{value: "Asda", name: "Asda", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "AsiaMiles", name: "AsiaMiles", title: "sms-activate, smshub, 365sms"},
			{value: "Astra Otoshop", name: "Astra Otoshop", title: "sms-activate, smshub, 365sms"},
			{value: "AstraPay", name: "AstraPay", title: "sms-activate, smshub, 365sms"},
			{value: "Astropay", name: "Astropay", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "AUBANK", name: "AUBANK", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Auchan", name: "Auchan", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Author24", name: "Author24", title: "sms-activate, smshub"},
			{value: "Auto.ru", name: "Auto.ru", title: "sms-activate, smshub, 365sms, onlinesim, sms-acktiwator"},
			{value: "av100pro", name: "av100pro", title: "sms-activate, smshub, 365sms"},
			{value: "Avito", name: "Avito", title: "sms-activate, smshub, 5sim, getsms, 365sms, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "AVON", name: "AVON", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "Aya Bank", name: "Aya Bank", title: "sms-activate, smshub, 365sms"},
			{value: "azar", name: "azar", title: "5sim, onlinesim"},
			{value: "Azino777", name: "Azino777", title: "5sim, onlinesim, sms-acktiwator"},
			{value: "Azino888", name: "Azino888", title: "5sim, onlinesim, sms-acktiwator"},
			{value: "Azsirbis", name: "Azsirbis", title: "onlinesim, vak-sms"},
			{value: "Badoo", name: "Badoo", title: "sms-activate, smshub, 365sms, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms"},
			{value: "Baidu", name: "Baidu", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Baihe", name: "Baihe", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Bajaj Finserv", name: "Bajaj Finserv", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Band", name: "Band", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Bankera", name: "Bankera", title: "sms-activate, smshub, 365sms"},
			{value: "Banki.ru", name: "Banki.ru", title: "5sim, onlinesim, vak-sms"},
			{value: "BankKaro", name: "BankKaro", title: "sms-activate, smshub, 365sms"},
			{value: "Banks", name: "Banks", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Banqi", name: "Banqi", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "Banrisul", name: "Banrisul", title: "sms-activate, smshub, 365sms"},
			{value: "Bazos", name: "Bazos", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "BC Game", name: "BC Game", title: "sms-activate, smshub, 365sms"},
			{value: "BCA Syariah", name: "BCA Syariah", title: "sms-activate, smshub, 365sms"},
			{value: "Bearwww", name: "Bearwww", title: "sms-activate, smshub, 365sms"},
			{value: "Bebeclub", name: "Bebeclub", title: "sms-activate, smshub, 365sms"},
			{value: "beboo", name: "beboo", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "BeeBoo", name: "BeeBoo", title: "sms-activate, smshub, 365sms"},
			{value: "Beget", name: "Beget", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, smspva, onlinesim, sms-acktiwator"},
			{value: "Belwest", name: "Belwest", title: "sms-activate, smshub, 365sms"},
			{value: "Benzuber", name: "Benzuber", title: "cheapsms, onlinesim"},
			{value: "BeReal", name: "BeReal", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "bet365", name: "bet365", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, vak-sms"},
			{value: "Betano", name: "Betano", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "BetBoom", name: "BetBoom", title: "sms-reg, onlinesim"},
			{value: "BetFair", name: "BetFair", title: "sms-activate, smshub, 5sim, 365sms, smspva, sms-acktiwator, give-sms"},
			{value: "Betting", name: "Betting", title: "sms-activate, smshub, getsms, 365sms, sms-acktiwator, give-sms"},
			{value: "betvet", name: "betvet", title: "5sim, onlinesim"},
			{value: "BharatPe", name: "BharatPe", title: "sms-activate, smshub, 365sms"},
			{value: "Biedronka", name: "Biedronka", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "bigbasket", name: "bigbasket", title: "5sim, onlinesim"},
			{value: "BigC", name: "BigC", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "BIGLION", name: "BIGLION", title: "onlinesim, vak-sms"},
			{value: "BIGO LIVE", name: "BIGO LIVE", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Bilibili", name: "Bilibili", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "BillMill", name: "BillMill", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Binance", name: "Binance", title: "sms-reg, onlinesim"},
			{value: "BinBin", name: "BinBin", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "BIP Messenger", name: "BIP Messenger", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Bisu", name: "Bisu", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Bit", name: "Bit", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Bitaqaty", name: "Bitaqaty", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "BitClout", name: "BitClout", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Bitrue", name: "Bitrue", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Bitso", name: "Bitso", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "bittube", name: "bittube", title: "5sim, sms-acktiwator"},
			{value: "BlaBlaCar", name: "BlaBlaCar", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Blank Street", name: "Blank Street", title: "sms-activate, smshub, 365sms"},
			{value: "BLIBLI", name: "BLIBLI", title: "sms-activate, smshub, 365sms, vak-sms, give-sms"},
			{value: "Blizzard", name: "Blizzard", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Blockchain", name: "Blockchain", title: "5sim, cheapsms, onlinesim, sms-acktiwator, vak-sms"},
			{value: "BLS-SPAIN", name: "BLS-SPAIN", title: "sms-activate, smshub, sms-reg, smspva"},
			{value: "Blued", name: "Blued", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "boku", name: "boku", title: "sms-activate, smshub, 365sms"},
			{value: "Bolt", name: "Bolt", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "BonusLink", name: "BonusLink", title: "sms-activate, smshub, 365sms"},
			{value: "Book My Play", name: "Book My Play", title: "sms-activate, smshub, 365sms"},
			{value: "Book24", name: "Book24", title: "cheapsms, onlinesim, vak-sms"},
			{value: "Boosty", name: "Boosty", title: "sms-activate, smshub, 365sms"},
			{value: "Boyaa", name: "Boyaa", title: "sms-activate, smshub, 365sms"},
			{value: "BPJS", name: "BPJS", title: "sms-activate, smshub, 365sms"},
			{value: "BPJSTK", name: "BPJSTK", title: "sms-activate, smshub, 365sms"},
			{value: "Br777", name: "Br777", title: "sms-activate, smshub, 365sms"},
			{value: "Brahma", name: "Brahma", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Brand20.ua", name: "Brand20.ua", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Brevo", name: "Brevo", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "BRO", name: "BRO", title: "sms-activate, smshub, 365sms"},
			{value: "budget4me-34", name: "budget4me-34", title: "sms-activate, smshub, onlinesim, vak-sms"},
			{value: "Budweiser", name: "Budweiser", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Buff.163", name: "Buff.163", title: "onlinesim, vak-sms"},
			{value: "Bukalapak", name: "Bukalapak", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Bumble", name: "Bumble", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Bunda", name: "Bunda", title: "sms-activate, smshub, 365sms"},
			{value: "Bunq", name: "Bunq", title: "sms-activate, smshub, 365sms"},
			{value: "Burger King", name: "Burger King", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "BusyFly", name: "BusyFly", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "ByBit", name: "ByBit", title: "sms-reg, onlinesim"},
			{value: "Bykea", name: "Bykea", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "BytePlus", name: "BytePlus", title: "sms-activate, smshub, 365sms"},
			{value: "C6 Bank", name: "C6 Bank", title: "sms-activate, smshub, 365sms"},
			{value: "Cabify", name: "Cabify", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "CafeBazaar", name: "CafeBazaar", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "CAIXA", name: "CAIXA", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "CallApp", name: "CallApp", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Careem", name: "Careem", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Carousell", name: "Carousell", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "CashApp", name: "CashApp", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "CashFly", name: "CashFly", title: "sms-activate, smshub, 365sms, sms-man, onlinesim, give-sms"},
			{value: "CashKaro", name: "CashKaro", title: "sms-activate, smshub, 5sim, 365sms, sms-man"},
			{value: "Cashmine", name: "Cashmine", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Casino/bet/gambling", name: "Casino/bet/gambling", title: "sms-activate, smshub, 365sms"},
			{value: "CasinoAndFriends", name: "CasinoAndFriends", title: "sms-activate, smshub, 365sms"},
			{value: "CasinoPlus", name: "CasinoPlus", title: "sms-activate, smshub, 365sms"},
			{value: "Cathay", name: "Cathay", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "CDEK", name: "CDEK", title: "sms-activate, smshub, 365sms, vak-sms"},
			{value: "CDKeys", name: "CDKeys", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Celcoin", name: "Celcoin", title: "sms-activate, smshub, 365sms"},
			{value: "CELEBe", name: "CELEBe", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Centrify", name: "Centrify", title: "cheapsms, onlinesim"},
			{value: "ChaingeFinance", name: "ChaingeFinance", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Chakra Rewards", name: "Chakra Rewards", title: "sms-activate, smshub, 365sms"},
			{value: "CheckDomain", name: "CheckDomain", title: "sms-activate, smshub, 365sms"},
			{value: "checkin", name: "checkin", title: "onlinesim, vak-sms"},
			{value: "Chevron", name: "Chevron", title: "sms-activate, smshub, 365sms"},
			{value: "Chispa", name: "Chispa", title: "sms-activate, smshub, 365sms"},
			{value: "ChitaiGorod", name: "ChitaiGorod", title: "5sim, onlinesim, vak-sms"},
			{value: "Cian", name: "Cian", title: "sms-activate, smshub, 5sim, 365sms, vak-sms"},
			{value: "Cita Previa", name: "Cita Previa", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Citilink", name: "Citilink", title: "onlinesim, vak-sms"},
			{value: "CityBase", name: "CityBase", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "CityMall", name: "CityMall", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "CityMobil", name: "CityMobil", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "ClassicRummy", name: "ClassicRummy", title: "5sim, onlinesim"},
			{value: "Claude", name: "Claude", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "Cleartrip", name: "Cleartrip", title: "sms-activate, smshub, 5sim, 365sms, sms-man"},
			{value: "CliQQ", name: "CliQQ", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Cloud Manager", name: "Cloud Manager", title: "sms-activate, smshub, 365sms"},
			{value: "CloudBet", name: "CloudBet", title: "sms-activate, smshub, 365sms"},
			{value: "CloudChat", name: "CloudChat", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Clubhouse", name: "Clubhouse", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "CMB", name: "CMB", title: "sms-activate, smshub, 365sms"},
			{value: "CMTcuzdan", name: "CMTcuzdan", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Coca-Cola", name: "Coca-Cola", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "Codashop", name: "Codashop", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "CoffeeLike", name: "CoffeeLike", title: "sms-activate, smshub, 365sms"},
			{value: "CoffeeTea", name: "CoffeeTea", title: "sms-activate, smshub, 365sms"},
			{value: "Cofix", name: "Cofix", title: "onlinesim, vak-sms"},
			{value: "CoinBase", name: "CoinBase", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Coindcx", name: "Coindcx", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "CoinField", name: "CoinField", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "CollabAct", name: "CollabAct", title: "sms-activate, smshub, 365sms"},
			{value: "CommunityGaming", name: "CommunityGaming", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "constitutioner", name: "constitutioner", title: "sms-activate, smshub, 365sms"},
			{value: "Consultant", name: "Consultant", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "CONTACT", name: "CONTACT", title: "cheapsms, smspva"},
			{value: "ContactSys", name: "ContactSys", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Corona", name: "Corona", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Coupons.com", name: "Coupons.com", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "CourseHero", name: "CourseHero", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Craigslist", name: "Craigslist", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Credcesta", name: "Credcesta", title: "sms-activate, smshub, 365sms"},
			{value: "CreditPlus", name: "CreditPlus", title: "cheapsms, onlinesim"},
			{value: "CrefisaMais", name: "CrefisaMais", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Crickpe", name: "Crickpe", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Crowdtap", name: "Crowdtap", title: "sms-activate, smshub, 365sms"},
			{value: "Crypto.com", name: "Crypto.com", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "CStar", name: "CStar", title: "onlinesim, vak-sms"},
			{value: "Cumbuca", name: "Cumbuca", title: "sms-activate, smshub, 365sms"},
			{value: "CupidMedia", name: "CupidMedia", title: "sms-activate, smshub, 365sms, smspva"},
			{value: "D5BET", name: "D5BET", title: "sms-activate, smshub, 365sms"},
			{value: "Dagangan", name: "Dagangan", title: "sms-activate, smshub, 365sms"},
			{value: "dahadaha", name: "dahadaha", title: "5sim, onlinesim"},
			{value: "Daki", name: "Daki", title: "sms-activate, smshub, 365sms"},
			{value: "Damejidlo", name: "Damejidlo", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Dana", name: "Dana", title: "sms-activate, smshub, 365sms, vak-sms, give-sms"},
			{value: "Daya Auto", name: "Daya Auto", title: "sms-activate, smshub, 365sms"},
			{value: "dbrUA", name: "dbrUA", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "DealShare", name: "DealShare", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Delimobil", name: "Delimobil", title: "sms-reg, onlinesim"},
			{value: "Deliveroo", name: "Deliveroo", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Delivery Club", name: "Delivery Club", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, sms-acktiwator, give-sms"},
			{value: "Dent", name: "Dent", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Depop", name: "Depop", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "DetskiyMir", name: "DetskiyMir", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, onlinesim, give-sms"},
			{value: "DewuPoison", name: "DewuPoison", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Dhani", name: "Dhani", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "DiDi", name: "DiDi", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Digikala", name: "Digikala", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "DIKIDI", name: "DIKIDI", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Discord", name: "Discord", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Discover Hong Kong", name: "Discover Hong Kong", title: "sms-activate, smshub, 365sms"},
			{value: "Disney Hotstar", name: "Disney Hotstar", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Divar", name: "Divar", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Dixy", name: "Dixy", title: "5sim, onlinesim, vak-sms"},
			{value: "DodoPizza", name: "DodoPizza", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, smspva, onlinesim, vak-sms, give-sms"},
			{value: "DOKU", name: "DOKU", title: "sms-activate, smshub, 365sms"},
			{value: "Dominos Pizza", name: "Dominos Pizza", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, vak-sms, give-sms"},
			{value: "DoneDeal", name: "DoneDeal", title: "sms-activate, smshub, 365sms"},
			{value: "DoorDash", name: "DoorDash", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Dosi", name: "Dosi", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Dostavista", name: "Dostavista", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Dotz", name: "Dotz", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Douyin", name: "Douyin", title: "sms-activate, smshub, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Douyu", name: "Douyu", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Dream11", name: "Dream11", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Drom.ru", name: "Drom.ru", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "DrugVokrug", name: "DrugVokrug", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Dukascopy", name: "Dukascopy", title: "5sim, onlinesim, sms-acktiwator"},
			{value: "Dundle", name: "Dundle", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, vak-sms, give-sms"},
			{value: "dunzo", name: "dunzo", title: "5sim, onlinesim"},
			{value: "E bike Gewinnspiel", name: "E bike Gewinnspiel", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "E-NUM", name: "E-NUM", title: "smspva, onlinesim"},
			{value: "EAPTEKA", name: "EAPTEKA", title: "sms-reg, onlinesim"},
			{value: "EarnEasy", name: "EarnEasy", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Easycash", name: "Easycash", title: "sms-activate, smshub, 365sms"},
			{value: "EasyPay", name: "EasyPay", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "eBay", name: "eBay", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "eFood", name: "eFood", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Ekapusta", name: "Ekapusta", title: "cheapsms, sms-reg, onlinesim"},
			{value: "ELDORADO", name: "ELDORADO", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Electroneum", name: "Electroneum", title: "5sim, onlinesim"},
			{value: "Eneba", name: "Eneba", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "EnerGO", name: "EnerGO", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "EscapeFromTarkov", name: "EscapeFromTarkov", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Etsy", name: "Etsy", title: "sms-activate, smshub, 365sms, onlinesim, sms-acktiwator"},
			{value: "EUROBET", name: "EUROBET", title: "smspva, onlinesim"},
			{value: "eWallet", name: "eWallet", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Expressmoney", name: "Expressmoney", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Eyecon", name: "Eyecon", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "ezBuy", name: "ezBuy", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "Faberlic", name: "Faberlic", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "Facebook", name: "Facebook", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "FACEIT", name: "FACEIT", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "Facily", name: "Facily", title: "sms-activate, smshub, 365sms"},
			{value: "Familia", name: "Familia", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "farmcare", name: "farmcare", title: "5sim, onlinesim"},
			{value: "FarPost", name: "FarPost", title: "sms-activate, smshub, 365sms, sms-acktiwator, vak-sms"},
			{value: "FastMail", name: "FastMail", title: "sms-activate, smshub, 365sms, smspva, give-sms"},
			{value: "Feeld", name: "Feeld", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim"},
			{value: "Feels", name: "Feels", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "FeetFinder", name: "FeetFinder", title: "sms-activate, smshub, 365sms"},
			{value: "fiewin", name: "fiewin", title: "5sim, onlinesim"},
			{value: "Fiqsy", name: "Fiqsy", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "FitCredit", name: "FitCredit", title: "sms-activate, smshub, 365sms"},
			{value: "Fiverr", name: "Fiverr", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "flam", name: "flam", title: "5sim, onlinesim"},
			{value: "Fliff", name: "Fliff", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "Flik", name: "Flik", title: "sms-activate, smshub, 365sms"},
			{value: "Flink", name: "Flink", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Flip", name: "Flip", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Flipkart", name: "Flipkart", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Flowwow", name: "Flowwow", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "flypgs", name: "flypgs", title: "5sim, onlinesim"},
			{value: "Fon.bet", name: "Fon.bet", title: "sms-reg, smspva, onlinesim"},
			{value: "FoodHub", name: "FoodHub", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Foodora", name: "Foodora", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator"},
			{value: "FoodPanda", name: "FoodPanda", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Foody", name: "Foody", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Fora", name: "Fora", title: "sms-activate, smshub, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Fortumo", name: "Fortumo", title: "sms-activate, smshub, 365sms"},
			{value: "FortunaSK", name: "FortunaSK", title: "sms-activate, smshub, 365sms"},
			{value: "Fortune Slots", name: "Fortune Slots", title: "sms-activate, smshub, 365sms"},
			{value: "Fotka", name: "Fotka", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "FotoCasa", name: "FotoCasa", title: "sms-activate, smshub, 365sms"},
			{value: "Fotostrana", name: "Fotostrana", title: "sms-activate, smshub, cheapsms, 365sms, sms-reg, smspva, onlinesim, sms-acktiwator"},
			{value: "FoxFord", name: "FoxFord", title: "sms-activate, smshub, 365sms"},
			{value: "Foxtrot", name: "Foxtrot", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Freecash", name: "Freecash", title: "onlinesim, vak-sms"},
			{value: "FreeChargeApp", name: "FreeChargeApp", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Freelancer", name: "Freelancer", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "FreeNow", name: "FreeNow", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "FreshKarta", name: "FreshKarta", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Friendtech", name: "Friendtech", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Frizza", name: "Frizza", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Fruitz", name: "Fruitz", title: "sms-activate, smshub, 365sms"},
			{value: "ftx.com", name: "ftx.com", title: "onlinesim, vak-sms"},
			{value: "Fugeelah", name: "Fugeelah", title: "sms-activate, smshub, 365sms"},
			{value: "fun88", name: "fun88", title: "5sim, onlinesim"},
			{value: "FunPay", name: "FunPay", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim"},
			{value: "Fups", name: "Fups", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "FWDMAX", name: "FWDMAX", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "G2A", name: "G2A", title: "sms-activate, smshub, 365sms, smspva, onlinesim, sms-acktiwator"},
			{value: "G2G", name: "G2G", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Gabi", name: "Gabi", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "GalaxyChat", name: "GalaxyChat", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "GalaxyWin", name: "GalaxyWin", title: "sms-activate, smshub, 5sim, give-sms"},
			{value: "GameArena", name: "GameArena", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "GameFlip", name: "GameFlip", title: "5sim, smspva, onlinesim, sms-acktiwator"},
			{value: "Gamekit", name: "Gamekit", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Gamer", name: "Gamer", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Gamesofa", name: "Gamesofa", title: "sms-activate, smshub, 365sms"},
			{value: "gamezy", name: "gamezy", title: "5sim, onlinesim"},
			{value: "Gazprom", name: "Gazprom", title: "5sim, cheapsms, onlinesim, vak-sms"},
			{value: "GCash", name: "GCash", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Gem4me", name: "Gem4me", title: "onlinesim, sms-acktiwator"},
			{value: "Gemgala", name: "Gemgala", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Gemini.com", name: "Gemini.com", title: "5sim, onlinesim"},
			{value: "Gener8", name: "Gener8", title: "sms-activate, smshub, 365sms"},
			{value: "Getcontact", name: "Getcontact", title: "onlinesim, vak-sms"},
			{value: "Getir", name: "Getir", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Getmega", name: "Getmega", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "GetNinjas", name: "GetNinjas", title: "sms-activate, smshub, 365sms"},
			{value: "GetPlus", name: "GetPlus", title: "sms-activate, smshub, 365sms"},
			{value: "GetResponse", name: "GetResponse", title: "sms-activate, smshub, 365sms, onlinesim, sms-acktiwator"},
			{value: "Gett", name: "Gett", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "GG", name: "GG", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "GGbet", name: "GGbet", title: "smspva, onlinesim"},
			{value: "Giftcloud", name: "Giftcloud", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "GiraBank", name: "GiraBank", title: "sms-activate, smshub, 365sms"},
			{value: "Gittigidiyor", name: "Gittigidiyor", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Global24", name: "Global24", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "GlobalTel", name: "GlobalTel", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Globus", name: "Globus", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Glovo", name: "Glovo", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "GlowRoad", name: "GlowRoad", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "GMNG", name: "GMNG", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "GMX", name: "GMX", title: "sms-activate, smshub, 365sms"},
			{value: "GoChat", name: "GoChat", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Godrej", name: "Godrej", title: "sms-activate, smshub, 365sms"},
			{value: "GoerliFaucet", name: "GoerliFaucet", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "GoFundMe", name: "GoFundMe", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "GoGo", name: "GoGo", title: "onlinesim, sms-acktiwator"},
			{value: "Gojek", name: "Gojek", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "GOMOFY", name: "GOMOFY", title: "sms-activate, smshub, 365sms"},
			{value: "Goods", name: "Goods", title: "5sim, smspva, onlinesim, sms-acktiwator"},
			{value: "Google", name: "Google", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "GoogleVoice", name: "GoogleVoice", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "GoPayz", name: "GoPayz", title: "sms-activate, smshub, 365sms"},
			{value: "Gopuff", name: "Gopuff", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "GORDAN", name: "GORDAN", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Gorzdrav", name: "Gorzdrav", title: "onlinesim, sms-acktiwator"},
			{value: "Gosuslugi", name: "Gosuslugi", title: "sms-reg, onlinesim"},
			{value: "GovBr", name: "GovBr", title: "sms-activate, smshub, 365sms"},
			{value: "gpnbonus", name: "gpnbonus", title: "sms-activate, smshub, cheapsms, 365sms"},
			{value: "Grab", name: "Grab", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Grailed", name: "Grailed", title: "sms-activate, smshub, 365sms, smspva, onlinesim"},
			{value: "Greggs", name: "Greggs", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "Greywoods", name: "Greywoods", title: "sms-activate, smshub, 365sms"},
			{value: "Grindr", name: "Grindr", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Grofers", name: "Grofers", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "GroupMe", name: "GroupMe", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Guiche Web", name: "Guiche Web", title: "sms-activate, smshub, 365sms"},
			{value: "GullyRummy", name: "GullyRummy", title: "5sim, onlinesim"},
			{value: "Gurmanika", name: "Gurmanika", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "GuruBets", name: "GuruBets", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "gusli.net", name: "gusli.net", title: "sms-reg, onlinesim"},
			{value: "GyFTR", name: "GyFTR", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Haleon", name: "Haleon", title: "sms-activate, smshub, 365sms"},
			{value: "hamrahaval", name: "hamrahaval", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "HandyPick", name: "HandyPick", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "Hanya", name: "Hanya", title: "sms-activate, smshub, 365sms"},
			{value: "Happn", name: "Happn", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "HappyFresh", name: "HappyFresh", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Haraj", name: "Haraj", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "hdfcbank", name: "hdfcbank", title: "sms-activate, smshub, 365sms"},
			{value: "Hepsiburada.com", name: "Hepsiburada.com", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Her", name: "Her", title: "sms-activate, smshub, 365sms"},
			{value: "Hermes", name: "Hermes", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "HeyBox", name: "HeyBox", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Hezzl", name: "Hezzl", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "hh", name: "hh", title: "sms-activate, smshub, 365sms"},
			{value: "HH.ru", name: "HH.ru", title: "onlinesim, vak-sms"},
			{value: "Hily", name: "Hily", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Hinge", name: "Hinge", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Hinge Dating", name: "Hinge Dating", title: "sms-activate, smshub, 365sms"},
			{value: "Hirect", name: "Hirect", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Hoff", name: "Hoff", title: "onlinesim, vak-sms"},
			{value: "Hohoro", name: "Hohoro", title: "cheapsms, onlinesim"},
			{value: "HOP", name: "HOP", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Hopi", name: "Hopi", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "hopper", name: "hopper", title: "5sim, smspva"},
			{value: "Hotline", name: "Hotline", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Hotmail", name: "Hotmail", title: "5sim, sms-man"},
			{value: "HQ Trivia", name: "HQ Trivia", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "HUAWEI", name: "HUAWEI", title: "smspva, onlinesim"},
			{value: "HumbleBundle", name: "HumbleBundle", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Humta", name: "Humta", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "hungerstation", name: "hungerstation", title: "5sim, onlinesim"},
			{value: "Huya", name: "Huya", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, vak-sms, give-sms"},
			{value: "iCard", name: "iCard", title: "5sim, smspva, sms-acktiwator"},
			{value: "IceCasino", name: "IceCasino", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "ICNKR", name: "ICNKR", title: "sms-activate, smshub, 365sms"},
			{value: "ICQ", name: "ICQ", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "Icrypex", name: "Icrypex", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Idealista", name: "Idealista", title: "sms-activate, smshub, 365sms, onlinesim, sms-acktiwator"},
			{value: "IFood", name: "IFood", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, give-sms"},
			{value: "ihc.ru", name: "ihc.ru", title: "onlinesim, sms-acktiwator"},
			{value: "iHerb", name: "iHerb", title: "sms-reg, onlinesim"},
			{value: "Immowelt", name: "Immowelt", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Imo", name: "Imo", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "inbox.lv", name: "inbox.lv", title: "smspva, onlinesim"},
			{value: "InboxLv", name: "InboxLv", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "IndiaGold", name: "IndiaGold", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "IndianOil", name: "IndianOil", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "IndiaPlays", name: "IndiaPlays", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "INDOBA", name: "INDOBA", title: "sms-activate, smshub, 365sms"},
			{value: "Indodax", name: "Indodax", title: "sms-activate, smshub, 365sms"},
			{value: "Indomaret", name: "Indomaret", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "inDriver", name: "inDriver", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, vak-sms, give-sms"},
			{value: "InFund", name: "InFund", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Ininal", name: "Ininal", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Instagram", name: "Instagram", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "InternetOpros", name: "InternetOpros", title: "onlinesim, vak-sms"},
			{value: "IOST", name: "IOST", title: "5sim, onlinesim, sms-acktiwator"},
			{value: "iPanelOnline", name: "iPanelOnline", title: "sms-activate, smshub, 365sms"},
			{value: "IPLwin", name: "IPLwin", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Ipsos iSay", name: "Ipsos iSay", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "iQIYI", name: "iQIYI", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "IQOS", name: "IQOS", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "irancell", name: "irancell", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "IRCTC", name: "IRCTC", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Iti", name: "Iti", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "IVI", name: "IVI", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, onlinesim, give-sms"},
			{value: "Iwplay", name: "Iwplay", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "IZI", name: "IZI", title: "sms-activate, smshub, getsms, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "JamesDelivery", name: "JamesDelivery", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "JD.com", name: "JD.com", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms"},
			{value: "Jiayuan", name: "Jiayuan", title: "onlinesim, sms-acktiwator"},
			{value: "JinJiang", name: "JinJiang", title: "sms-activate, smshub, 365sms"},
			{value: "JioMart", name: "JioMart", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Jiva Petani", name: "Jiva Petani", title: "sms-activate, smshub, 365sms"},
			{value: "JKF", name: "JKF", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "JoGo", name: "JoGo", title: "sms-activate, smshub"},
			{value: "Jollychic", name: "Jollychic", title: "onlinesim, sms-acktiwator"},
			{value: "joymall", name: "joymall", title: "5sim, onlinesim"},
			{value: "Joyride", name: "Joyride", title: "sms-activate, smshub, 5sim, getsms, 365sms, give-sms"},
			{value: "JTExpress", name: "JTExpress", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "JungleeRummy", name: "JungleeRummy", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "JustDating", name: "JustDating", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "K11", name: "K11", title: "sms-activate, smshub, 365sms"},
			{value: "Kabanchik.ua", name: "Kabanchik.ua", title: "onlinesim, sms-acktiwator"},
			{value: "Kaching", name: "Kaching", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "Kaggle", name: "Kaggle", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "kaidee", name: "kaidee", title: "5sim, sms-man"},
			{value: "KakaoTalk", name: "KakaoTalk", title: "sms-activate, smshub, 5sim, getsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Kamatera", name: "Kamatera", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Karusel", name: "Karusel", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Kaya", name: "Kaya", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "kazandirio", name: "kazandirio", title: "5sim, onlinesim"},
			{value: "KazanExpress", name: "KazanExpress", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, onlinesim, vak-sms, give-sms"},
			{value: "Kemnaker RI", name: "Kemnaker RI", title: "sms-activate, smshub, 365sms"},
			{value: "Keybase", name: "Keybase", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "KeyPay", name: "KeyPay", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "KFC", name: "KFC", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, sms-acktiwator, vak-sms, give-sms"},
			{value: "Khatabook", name: "Khatabook", title: "sms-activate, smshub, 365sms"},
			{value: "khelraja", name: "khelraja", title: "5sim, onlinesim"},
			{value: "Kia", name: "Kia", title: "sms-activate, smshub, 365sms"},
			{value: "KION", name: "KION", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Kirana", name: "Kirana", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "kisma", name: "kisma", title: "5sim, onlinesim"},
			{value: "Klarna", name: "Klarna", title: "sms-activate, smshub, 365sms, smspva, onlinesim"},
			{value: "Kolesa.kz", name: "Kolesa.kz", title: "sms-activate, smshub, 365sms, sms-man, sms-reg, onlinesim, give-sms"},
			{value: "komandacard", name: "komandacard", title: "5sim, sms-acktiwator"},
			{value: "koo", name: "koo", title: "5sim, onlinesim"},
			{value: "KoronaPay", name: "KoronaPay", title: "cheapsms, sms-reg, smspva"},
			{value: "Koshelek", name: "Koshelek", title: "sms-activate, smshub, onlinesim, vak-sms"},
			{value: "Kotak811", name: "Kotak811", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "KuCoinPlay", name: "KuCoinPlay", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Kufar.by", name: "Kufar.by", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Kvartplata+", name: "Kvartplata+", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Kwai", name: "Kwai", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Kwork", name: "Kwork", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "LadyMaria", name: "LadyMaria", title: "sms-activate, smshub, 365sms"},
			{value: "Lalamove", name: "Lalamove", title: "sms-activate, smshub, 365sms, smspva, give-sms"},
			{value: "Lamoda", name: "Lamoda", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "laposte", name: "laposte", title: "5sim, smspva"},
			{value: "Lazada", name: "Lazada", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "LazyPay", name: "LazyPay", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "lbry", name: "lbry", title: "5sim, onlinesim"},
			{value: "LDinfo", name: "LDinfo", title: "onlinesim, sms-acktiwator"},
			{value: "Leboncoin", name: "Leboncoin", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, give-sms"},
			{value: "Leboncoin1", name: "Leboncoin1", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Lenta", name: "Lenta", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "Letual", name: "Letual", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "Lianxin", name: "Lianxin", title: "5sim, onlinesim"},
			{value: "Lidl", name: "Lidl", title: "sms-activate, smshub, 365sms, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "LigaPro", name: "LigaPro", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "LigaStavok", name: "LigaStavok", title: "sms-reg, onlinesim"},
			{value: "LightChat", name: "LightChat", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Likee", name: "Likee", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "LINE Messenger", name: "LINE Messenger", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "LinkAja", name: "LinkAja", title: "sms-activate, smshub, 365sms"},
			{value: "LinkedIN", name: "LinkedIN", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Lino.network", name: "Lino.network", title: "onlinesim, sms-acktiwator"},
			{value: "Linode", name: "Linode", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Lion Parcel", name: "Lion Parcel", title: "sms-activate, smshub, 365sms"},
			{value: "litnet", name: "litnet", title: "onlinesim, vak-sms"},
			{value: "LiveScore", name: "LiveScore", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms"},
			{value: "Loanflix", name: "Loanflix", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "LocalBitcoins", name: "LocalBitcoins", title: "sms-reg, smspva, onlinesim"},
			{value: "LOCO", name: "LOCO", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "LongHu", name: "LongHu", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "LOTTE Mart", name: "LOTTE Mart", title: "sms-activate, smshub, 365sms"},
			{value: "Lotus", name: "Lotus", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "LoveLocal", name: "LoveLocal", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Loveplanet", name: "Loveplanet", title: "onlinesim, sms-acktiwator"},
			{value: "LoveRu", name: "LoveRu", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "LuckyLand Slots", name: "LuckyLand Slots", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "Lukoil", name: "Lukoil", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Lydia", name: "Lydia", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Lyft", name: "Lyft", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "LYKA", name: "LYKA", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "MagaLu", name: "MagaLu", title: "sms-activate, smshub, 365sms"},
			{value: "Magicbricks", name: "Magicbricks", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Magicpin", name: "Magicpin", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Magnit", name: "Magnit", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Magnolia", name: "Magnolia", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Mail.ru", name: "Mail.ru", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Mail.ru Group", name: "Mail.ru Group", title: "sms-activate, smshub, smspva, sms-acktiwator, vak-sms, give-sms"},
			{value: "Mamba", name: "Mamba", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "MapleSEA", name: "MapleSEA", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "MarketGuru", name: "MarketGuru", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "MarketPapa", name: "MarketPapa", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Marktplaats", name: "Marktplaats", title: "sms-activate, smshub, 365sms, smspva, onlinesim"},
			{value: "Marlboro", name: "Marlboro", title: "sms-activate, smshub, cheapsms, 365sms, onlinesim, vak-sms"},
			{value: "Marwadi", name: "Marwadi", title: "sms-activate, smshub, 365sms"},
			{value: "Matbea.com", name: "Matbea.com", title: "sms-reg, onlinesim"},
			{value: "Maxim", name: "Maxim", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Maxis", name: "Maxis", title: "sms-activate, smshub, 365sms"},
			{value: "Maybank", name: "Maybank", title: "sms-activate, smshub, 365sms"},
			{value: "McDonalds", name: "McDonalds", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, sms-acktiwator, give-sms"},
			{value: "MediBuddy", name: "MediBuddy", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Meesho", name: "Meesho", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "MeetMe", name: "MeetMe", title: "sms-activate, 5sim, getsms, sms-reg, onlinesim, sms-acktiwator, vak-sms"},
			{value: "MEGA", name: "MEGA", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Megogo", name: "Megogo", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "MeiQFashion", name: "MeiQFashion", title: "sms-activate, smshub, 365sms"},
			{value: "Meitu", name: "Meitu", title: "sms-activate, smshub, 365sms"},
			{value: "Meituan", name: "Meituan", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Meliuz", name: "Meliuz", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Mera Gaon", name: "Mera Gaon", title: "sms-activate, smshub, 365sms"},
			{value: "Mercado", name: "Mercado", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Mercado Pago", name: "Mercado Pago", title: "sms-activate, smshub, 365sms"},
			{value: "Mercari", name: "Mercari", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Meta", name: "Meta", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "METRO", name: "METRO", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Mewt", name: "Mewt", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "MiChat", name: "MiChat", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "MicroKlad", name: "MicroKlad", title: "cheapsms, onlinesim, sms-acktiwator"},
			{value: "Microsoft", name: "Microsoft", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Mihuashi", name: "Mihuashi", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Miloan", name: "Miloan", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "minima", name: "minima", title: "5sim, onlinesim"},
			{value: "Miratorg", name: "Miratorg", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Miravia", name: "Miravia", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "MitID", name: "MitID", title: "sms-activate, smshub, 365sms"},
			{value: "MIXMART", name: "MIXMART", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "MIYACHAT", name: "MIYACHAT", title: "sms-activate, smshub, 365sms"},
			{value: "MobiKwik", name: "MobiKwik", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Mobile01", name: "Mobile01", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "MockGuru", name: "MockGuru", title: "sms-activate, smshub, 365sms"},
			{value: "Mocospace", name: "Mocospace", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "MOMO", name: "MOMO", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, give-sms"},
			{value: "Monese", name: "Monese", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "MonetaRu", name: "MonetaRu", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "MoneyLion", name: "MoneyLion", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, sms-acktiwator, give-sms"},
			{value: "MoneyPay", name: "MoneyPay", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "MoneyСontrol", name: "MoneyСontrol", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Monobank", name: "Monobank", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "MonobankIndia", name: "MonobankIndia", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "more", name: "more", title: "5sim, onlinesim"},
			{value: "Mos.ru", name: "Mos.ru", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "MotionPay", name: "MotionPay", title: "sms-activate, smshub, 365sms"},
			{value: "MotorkuX", name: "MotorkuX", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "Move It", name: "Move It", title: "sms-activate, smshub, 365sms"},
			{value: "MPL", name: "MPL", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "MrGreen", name: "MrGreen", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "MrQ", name: "MrQ", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "mrsool", name: "mrsool", title: "5sim, onlinesim"},
			{value: "MTR Mobile", name: "MTR Mobile", title: "sms-activate, smshub, 365sms"},
			{value: "MTS CashBack", name: "MTS CashBack", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Muzz", name: "Muzz", title: "sms-activate, smshub, 365sms"},
			{value: "MVideo", name: "MVideo", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-reg, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "My.Games", name: "My.Games", title: "5sim, onlinesim"},
			{value: "My11Circle", name: "My11Circle", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "MyACUVUE", name: "MyACUVUE", title: "sms-reg, onlinesim"},
			{value: "myata", name: "myata", title: "5sim, onlinesim"},
			{value: "mybeautybonus", name: "mybeautybonus", title: "onlinesim, vak-sms"},
			{value: "myboost", name: "myboost", title: "sms-activate, smshub, 365sms"},
			{value: "MyDailyCash", name: "MyDailyCash", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "MyFishka", name: "MyFishka", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "myGLO", name: "myGLO", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "MyLavash", name: "MyLavash", title: "sms-activate, smshub"},
			{value: "MyLove", name: "MyLove", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "MyMusicTaste", name: "MyMusicTaste", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Myntra", name: "Myntra", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "MyValue", name: "MyValue", title: "sms-activate, smshub, 365sms"},
			{value: "mzadqatar", name: "mzadqatar", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Namars", name: "Namars", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "Nanovest", name: "Nanovest", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "NationalLottery", name: "NationalLottery", title: "onlinesim, vak-sms"},
			{value: "Naver", name: "Naver", title: "sms-activate, smshub, 5sim, getsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "NCsoft", name: "NCsoft", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "neftm", name: "neftm", title: "sms-activate, smshub"},
			{value: "Neocrypto", name: "Neocrypto", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Neon", name: "Neon", title: "sms-activate, smshub, 365sms"},
			{value: "NEQUI", name: "NEQUI", title: "sms-activate, smshub, 365sms"},
			{value: "NetBet", name: "NetBet", title: "smspva, onlinesim"},
			{value: "Netease", name: "Netease", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Neteller", name: "Neteller", title: "sms-reg, smspva"},
			{value: "Netflix", name: "Netflix", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "NEXMO", name: "NEXMO", title: "sms-reg, onlinesim"},
			{value: "Next", name: "Next", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Nextdoor", name: "Nextdoor", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Nice88", name: "Nice88", title: "sms-activate, smshub, 365sms"},
			{value: "Nifty", name: "Nifty", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Nike", name: "Nike", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "NimoTV", name: "NimoTV", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "nimses", name: "nimses", title: "5sim, onlinesim, sms-acktiwator"},
			{value: "Njuškalo", name: "Njuškalo", title: "sms-activate, smshub, 365sms"},
			{value: "nloto", name: "nloto", title: "sms-activate, smshub, 365sms, vak-sms"},
			{value: "NoBroker", name: "NoBroker", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "Noon", name: "Noon", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Notifire", name: "Notifire", title: "sms-activate, smshub, 365sms"},
			{value: "NovaPoshta", name: "NovaPoshta", title: "sms-activate, smshub, 365sms, sms-reg, sms-acktiwator"},
			{value: "NRJ Music Awards", name: "NRJ Music Awards", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "NTT Game", name: "NTT Game", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Nubank", name: "Nubank", title: "sms-activate, smshub, 365sms"},
			{value: "NutriClub", name: "NutriClub", title: "sms-activate, smshub, 365sms"},
			{value: "OfferUp", name: "OfferUp", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, vak-sms, give-sms"},
			{value: "OffGamers", name: "OffGamers", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "ogon.ru", name: "ogon.ru", title: "onlinesim, vak-sms"},
			{value: "Ok.ru", name: "Ok.ru", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "OkCupid", name: "OkCupid", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Okey", name: "Okey", title: "5sim, cheapsms, onlinesim, sms-acktiwator"},
			{value: "Okko", name: "Okko", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, onlinesim, give-sms"},
			{value: "Okolo", name: "Okolo", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Okta", name: "Okta", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "OKX.com", name: "OKX.com", title: "5sim, sms-reg"},
			{value: "Olacabs", name: "Olacabs", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Oldubil", name: "Oldubil", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Olimp.bet", name: "Olimp.bet", title: "sms-reg, onlinesim"},
			{value: "Ollis", name: "Ollis", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "OLX", name: "OLX", title: "sms-activate, smshub, 5sim, getsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "ONBUKA", name: "ONBUKA", title: "sms-activate, smshub, 365sms"},
			{value: "OneAset", name: "OneAset", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "OneForma", name: "OneForma", title: "sms-activate, smshub, 365sms"},
			{value: "Onet", name: "Onet", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Onliner.by", name: "Onliner.by", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "OnTaxi", name: "OnTaxi", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "OpenAI", name: "OpenAI", title: "sms-activate, smshub, 5sim, getsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "OpenPhone", name: "OpenPhone", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "OPPO", name: "OPPO", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "Oriflame", name: "Oriflame", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, give-sms"},
			{value: "Orteka", name: "Orteka", title: "sms-activate, smshub, 365sms"},
			{value: "OSTIN", name: "OSTIN", title: "onlinesim, vak-sms"},
			{value: "otipy", name: "otipy", title: "5sim, onlinesim"},
			{value: "Otzovik.com", name: "Otzovik.com", title: "sms-reg, onlinesim"},
			{value: "OVO", name: "OVO", title: "sms-activate, smshub, 365sms, sms-acktiwator, vak-sms, give-sms"},
			{value: "oyo", name: "oyo", title: "5sim, onlinesim"},
			{value: "Ozan", name: "Ozan", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Ozan SuperApp", name: "Ozan SuperApp", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "OZON", name: "OZON", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Packeta", name: "Packeta", title: "sms-activate, smshub, 365sms"},
			{value: "PaddyPower", name: "PaddyPower", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "PagBank", name: "PagBank", title: "sms-activate, smshub, 365sms"},
			{value: "PagSmile", name: "PagSmile", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Pairs", name: "Pairs", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Pandao", name: "Pandao", title: "getsms, cheapsms, onlinesim"},
			{value: "Panvel", name: "Panvel", title: "sms-activate, smshub, 365sms"},
			{value: "PapaJohns", name: "PapaJohns", title: "smspva, onlinesim"},
			{value: "Papara", name: "Papara", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Pari.ru", name: "Pari.ru", title: "sms-reg, smspva, onlinesim"},
			{value: "Parimatch", name: "Parimatch", title: "5sim, sms-reg, smspva, onlinesim, sms-acktiwator"},
			{value: "Parkplus", name: "Parkplus", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "PaxFuL", name: "PaxFuL", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "Payberry", name: "Payberry", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "Paybis", name: "Paybis", title: "sms-activate, smshub, 365sms"},
			{value: "Paycell", name: "Paycell", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-acktiwator, give-sms"},
			{value: "paymaya", name: "paymaya", title: "5sim, onlinesim"},
			{value: "Payoneer", name: "Payoneer", title: "sms-activate, smshub, 365sms, sms-reg, smspva, onlinesim"},
			{value: "PayPal", name: "PayPal", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, sms-acktiwator, vak-sms, give-sms"},
			{value: "Paysafecard", name: "Paysafecard", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, sms-acktiwator, vak-sms, give-sms"},
			{value: "PaySend", name: "PaySend", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, vak-sms, give-sms"},
			{value: "PayTM", name: "PayTM", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "Payzapp", name: "Payzapp", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Perekrestok", name: "Perekrestok", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "Perfluence", name: "Perfluence", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "PetrI", name: "PetrI", title: "onlinesim, sms-acktiwator"},
			{value: "PGbonus", name: "PGbonus", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "phable", name: "phable", title: "5sim, onlinesim"},
			{value: "PharmEasy", name: "PharmEasy", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "PhoneCode", name: "PhoneCode", title: "onlinesim, sms-acktiwator"},
			{value: "Phound", name: "Phound", title: "sms-activate, smshub, 365sms"},
			{value: "Picpay", name: "Picpay", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "Pinduoduo", name: "Pinduoduo", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "PingCode", name: "PingCode", title: "sms-activate, smshub, 365sms"},
			{value: "PingPong", name: "PingPong", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smscode, give-sms"},
			{value: "Pivko24", name: "Pivko24", title: "sms-activate, smshub, 365sms, vak-sms, give-sms"},
			{value: "PizzaHut", name: "PizzaHut", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "PlayerAuctions", name: "PlayerAuctions", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Playerzpot", name: "Playerzpot", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "PlayOJO", name: "PlayOJO", title: "sms-activate, smshub, 365sms"},
			{value: "playship", name: "playship", title: "5sim, onlinesim"},
			{value: "PMSM", name: "PMSM", title: "onlinesim, sms-acktiwator"},
			{value: "pochta.ru", name: "pochta.ru", title: "sms-activate, smshub, cheapsms, 365sms, onlinesim, sms-acktiwator"},
			{value: "POCHTABANK", name: "POCHTABANK", title: "cheapsms, sms-reg, vak-sms"},
			{value: "Pocket52", name: "Pocket52", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Pockit", name: "Pockit", title: "sms-activate, smshub, 365sms, vak-sms"},
			{value: "Podeli", name: "Podeli", title: "sms-activate, smshub, 365sms"},
			{value: "POF.com", name: "POF.com", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "PokerMaster", name: "PokerMaster", title: "5sim, onlinesim"},
			{value: "Porbet", name: "Porbet", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Poshmark", name: "Poshmark", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-acktiwator, give-sms"},
			{value: "PoshVine", name: "PoshVine", title: "sms-activate, smshub, 365sms"},
			{value: "Potato Chat", name: "Potato Chat", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Powerkredite", name: "Powerkredite", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Prakerja", name: "Prakerja", title: "sms-activate, smshub, 365sms"},
			{value: "PREMIER", name: "PREMIER", title: "sms-reg, onlinesim"},
			{value: "Premium.one", name: "Premium.one", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Prenagen Club", name: "Prenagen Club", title: "sms-activate, smshub, 365sms"},
			{value: "Primaries 2020", name: "Primaries 2020", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Prime Opinion", name: "Prime Opinion", title: "sms-activate, smshub, 365sms"},
			{value: "Privalia", name: "Privalia", title: "sms-activate, smshub, 365sms"},
			{value: "PrivetMir", name: "PrivetMir", title: "sms-activate, smshub, 365sms, vak-sms"},
			{value: "Privy", name: "Privy", title: "sms-activate, smshub, 365sms"},
			{value: "Probo", name: "Probo", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "ProDoctorov", name: "ProDoctorov", title: "onlinesim, sms-acktiwator"},
			{value: "Profee", name: "Profee", title: "sms-activate, smshub, 365sms"},
			{value: "Profi.ru", name: "Profi.ru", title: "sms-activate, smshub, 365sms, sms-reg, onlinesim, vak-sms"},
			{value: "Prom.ua", name: "Prom.ua", title: "sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "ProtonMail", name: "ProtonMail", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "PUBG", name: "PUBG", title: "5sim, onlinesim"},
			{value: "Publi24", name: "Publi24", title: "sms-activate, smshub, 365sms"},
			{value: "punjab citizen", name: "punjab citizen", title: "sms-activate, smshub, 365sms"},
			{value: "PurePlatfrom", name: "PurePlatfrom", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Pyro Music", name: "Pyro Music", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Q12 Trivia", name: "Q12 Trivia", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "QIP", name: "QIP", title: "onlinesim, sms-acktiwator"},
			{value: "Qiwi", name: "Qiwi", title: "smshub, 5sim, cheapsms, 365sms, smspva, sms-acktiwator, vak-sms, give-sms"},
			{value: "Qoo10", name: "Qoo10", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Qrooto", name: "Qrooto", title: "onlinesim, sms-acktiwator"},
			{value: "Quack", name: "Quack", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "quikr", name: "quikr", title: "5sim, sms-man"},
			{value: "Quipp", name: "Quipp", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Qunar", name: "Qunar", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "QwikCilver", name: "QwikCilver", title: "sms-activate, smshub, 365sms"},
			{value: "RabotnikiUA", name: "RabotnikiUA", title: "onlinesim, sms-acktiwator"},
			{value: "Radium", name: "Radium", title: "sms-activate, smshub, 365sms"},
			{value: "Raiffeisen", name: "Raiffeisen", title: "sms-reg, vak-sms"},
			{value: "Raketa", name: "Raketa", title: "smspva, onlinesim, sms-acktiwator"},
			{value: "Rambler", name: "Rambler", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "rapido", name: "rapido", title: "5sim, onlinesim"},
			{value: "Rappi", name: "Rappi", title: "sms-activate, smshub, 365sms"},
			{value: "Razer", name: "Razer", title: "sms-activate, smshub, 365sms"},
			{value: "Rbt", name: "Rbt", title: "sms-activate, smshub, 365sms"},
			{value: "Rebtel", name: "Rebtel", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "RecargaPay", name: "RecargaPay", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "RedBook", name: "RedBook", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "redbubble", name: "redbubble", title: "5sim, onlinesim"},
			{value: "redBus", name: "redBus", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Rediffmail", name: "Rediffmail", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Redigame", name: "Redigame", title: "sms-activate, smshub, 365sms"},
			{value: "reg.ru", name: "reg.ru", title: "sms-activate, smshub, 365sms, sms-reg, onlinesim, vak-sms"},
			{value: "Remotasks", name: "Remotasks", title: "sms-activate, smshub, 365sms"},
			{value: "RESO", name: "RESO", title: "cheapsms, sms-reg, onlinesim"},
			{value: "Revolut", name: "Revolut", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "ROBINHOOD", name: "ROBINHOOD", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "RoboForex", name: "RoboForex", title: "sms-reg, onlinesim"},
			{value: "RockeTreach", name: "RockeTreach", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms"},
			{value: "roomster", name: "roomster", title: "sms-activate, smshub, 365sms, smspva"},
			{value: "Roposo", name: "Roposo", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "RosaKhutor", name: "RosaKhutor", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "rosbank", name: "rosbank", title: "onlinesim, vak-sms"},
			{value: "Rosneft", name: "Rosneft", title: "cheapsms, onlinesim, vak-sms"},
			{value: "Rostelecom", name: "Rostelecom", title: "sms-reg, onlinesim"},
			{value: "Royal Canin", name: "Royal Canin", title: "sms-activate, smshub, 365sms, smspva, onlinesim"},
			{value: "RoyalWin", name: "RoyalWin", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Rozetka", name: "Rozetka", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "RRSA", name: "RRSA", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Rummy", name: "Rummy", title: "5sim, onlinesim"},
			{value: "RummyCircle", name: "RummyCircle", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "RummyCulture", name: "RummyCulture", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "RummyGold", name: "RummyGold", title: "5sim, onlinesim"},
			{value: "RummyLoot", name: "RummyLoot", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "RummyModern", name: "RummyModern", title: "5sim, onlinesim"},
			{value: "RummyOla", name: "RummyOla", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "RummyTime", name: "RummyTime", title: "5sim, onlinesim"},
			{value: "RummyWealth", name: "RummyWealth", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Rush", name: "Rush", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Ruten", name: "Ruten", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "RuTube", name: "RuTube", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "RUVDS", name: "RUVDS", title: "onlinesim, vak-sms"},
			{value: "Ryde", name: "Ryde", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Salampay", name: "Salampay", title: "cheapsms, sms-reg"},
			{value: "Samokat", name: "Samokat", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "SamsungShop", name: "SamsungShop", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Santander", name: "Santander", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "SberApteka", name: "SberApteka", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "SberMarket", name: "SberMarket", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, sms-acktiwator, vak-sms, give-sms"},
			{value: "SberMegaMarket", name: "SberMegaMarket", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, vak-sms, give-sms"},
			{value: "SBI Card", name: "SBI Card", title: "sms-activate, smshub, 365sms"},
			{value: "Schibsted", name: "Schibsted", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Seagm", name: "Seagm", title: "smspva, onlinesim, sms-acktiwator"},
			{value: "SEEDS", name: "SEEDS", title: "sms-activate, smshub, 365sms"},
			{value: "Segari", name: "Segari", title: "sms-activate, smshub, 365sms"},
			{value: "Selectel", name: "Selectel", title: "onlinesim, vak-sms"},
			{value: "Selfcontrol", name: "Selfcontrol", title: "sms-reg, onlinesim"},
			{value: "SellMonitor", name: "SellMonitor", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "sendinblue", name: "sendinblue", title: "5sim, onlinesim"},
			{value: "SEOsprint", name: "SEOsprint", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "Servify", name: "Servify", title: "sms-activate, smshub, 365sms"},
			{value: "Setel", name: "Setel", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Seznam", name: "Seznam", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Shafa", name: "Shafa", title: "onlinesim, sms-acktiwator"},
			{value: "ShareParty", name: "ShareParty", title: "sms-activate, smshub, 365sms"},
			{value: "SheerID", name: "SheerID", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Shein", name: "Shein", title: "sms-activate, smshub, 365sms"},
			{value: "ShellBox", name: "ShellBox", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Shopee", name: "Shopee", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Shpock", name: "Shpock", title: "sms-activate, smshub, 365sms, sms-reg, onlinesim"},
			{value: "Signal", name: "Signal", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, smspva, onlinesim, vak-sms, give-sms"},
			{value: "sikka", name: "sikka", title: "5sim, onlinesim"},
			{value: "Singcity", name: "Singcity", title: "sms-activate, smshub, 365sms"},
			{value: "Siply", name: "Siply", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Sipnet", name: "Sipnet", title: "onlinesim, sms-acktiwator"},
			{value: "Sisal", name: "Sisal", title: "smspva, onlinesim"},
			{value: "Sizeer", name: "Sizeer", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "SKCAPITAL", name: "SKCAPITAL", title: "sms-activate, smshub, 365sms"},
			{value: "Skout", name: "Skout", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Skrill", name: "Skrill", title: "smspva, onlinesim"},
			{value: "Skroutz", name: "Skroutz", title: "sms-activate, smshub, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Skype", name: "Skype", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "SkyTV", name: "SkyTV", title: "sms-activate, smshub, 365sms"},
			{value: "Smart", name: "Smart", title: "sms-activate, smshub, 365sms, onlinesim, sms-acktiwator"},
			{value: "Smartfren", name: "Smartfren", title: "sms-activate, smshub, 365sms"},
			{value: "SmartyPig", name: "SmartyPig", title: "sms-activate, smshub, 365sms"},
			{value: "Smiles", name: "Smiles", title: "sms-activate, smshub, 365sms"},
			{value: "SMO71", name: "SMO71", title: "sms-activate, smshub, 365sms"},
			{value: "Snapchat", name: "Snapchat", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "SnappFood", name: "SnappFood", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "SneakersnStuff", name: "SneakersnStuff", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "Socios", name: "Socios", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "SOKOLOV", name: "SOKOLOV", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms"},
			{value: "Sony", name: "Sony", title: "onlinesim, sms-acktiwator"},
			{value: "Sony LIV", name: "Sony LIV", title: "sms-activate, smshub, 365sms"},
			{value: "Sorare", name: "Sorare", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "SoulApp", name: "SoulApp", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Spaces", name: "Spaces", title: "onlinesim, sms-acktiwator"},
			{value: "SpaceWeb", name: "SpaceWeb", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "SPAR", name: "SPAR", title: "5sim, onlinesim"},
			{value: "Spark Driver", name: "Spark Driver", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "SpatenOktoberfest", name: "SpatenOktoberfest", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "SportGully", name: "SportGully", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "SportMaster", name: "SportMaster", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "sportsbuzz11", name: "sportsbuzz11", title: "5sim, onlinesim"},
			{value: "SpotHit", name: "SpotHit", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Spotify", name: "Spotify", title: "sms-activate, smshub, 365sms, sms-reg"},
			{value: "Sprinthost", name: "Sprinthost", title: "onlinesim, sms-acktiwator"},
			{value: "Sravni.ru", name: "Sravni.ru", title: "sms-activate, smshub, 5sim, 365sms, sms-reg"},
			{value: "SSOid.net", name: "SSOid.net", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Starbucks", name: "Starbucks", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Steam", name: "Steam", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "steemit", name: "steemit", title: "5sim, cheapsms, onlinesim, sms-acktiwator, vak-sms"},
			{value: "SticPay", name: "SticPay", title: "sms-activate, smshub, 365sms"},
			{value: "StockyDodo", name: "StockyDodo", title: "sms-activate, smshub, 365sms"},
			{value: "Stoloto", name: "Stoloto", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Stormgain", name: "Stormgain", title: "sms-activate, smshub, 365sms, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "Strato", name: "Strato", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Stripe", name: "Stripe", title: "sms-activate, smshub, 365sms, vak-sms, give-sms"},
			{value: "Striving in the Lion City", name: "Striving in the Lion City", title: "sms-activate, smshub, 365sms"},
			{value: "Studwork", name: "Studwork", title: "onlinesim, sms-acktiwator"},
			{value: "Subito", name: "Subito", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Sunlight", name: "Sunlight", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator"},
			{value: "Suntec", name: "Suntec", title: "sms-activate, smshub, 365sms"},
			{value: "SuperS", name: "SuperS", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Surveybell", name: "Surveybell", title: "sms-activate, smshub, 365sms"},
			{value: "Surveytime", name: "Surveytime", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Sushkof", name: "Sushkof", title: "onlinesim, vak-sms"},
			{value: "swagbucks", name: "swagbucks", title: "5sim, smspva, onlinesim"},
			{value: "SWEET.TV", name: "SWEET.TV", title: "onlinesim, sms-acktiwator"},
			{value: "Swiggy", name: "Swiggy", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Switips", name: "Switips", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Swvl", name: "Swvl", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "SynotTip", name: "SynotTip", title: "sms-activate, smshub"},
			{value: "tabor.ru", name: "tabor.ru", title: "onlinesim, sms-acktiwator"},
			{value: "Taikang", name: "Taikang", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Taki", name: "Taki", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Taksheel", name: "Taksheel", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "talabat", name: "talabat", title: "5sim, onlinesim"},
			{value: "TamTam", name: "TamTam", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Tango", name: "Tango", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms"},
			{value: "Tanoti", name: "Tanoti", title: "sms-activate, smshub, 365sms"},
			{value: "TanTan", name: "TanTan", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "Tanuki", name: "Tanuki", title: "onlinesim, vak-sms"},
			{value: "Taobao", name: "Taobao", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Taptap Send", name: "Taptap Send", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Tata CLiQ Palette", name: "Tata CLiQ Palette", title: "sms-activate, smshub, 365sms"},
			{value: "Tata Neu", name: "Tata Neu", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Tatneft", name: "Tatneft", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Taxify", name: "Taxify", title: "onlinesim, sms-acktiwator"},
			{value: "TaxiMaxim", name: "TaxiMaxim", title: "smspva, onlinesim, sms-acktiwator, vak-sms"},
			{value: "TEAMORU", name: "TEAMORU", title: "sms-activate, smshub, 365sms"},
			{value: "TeenpattiRummy3", name: "TeenpattiRummy3", title: "5sim, onlinesim"},
			{value: "TeenPattiStarpro", name: "TeenPattiStarpro", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "Telegram", name: "Telegram", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Telegram 2.0", name: "Telegram 2.0", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Temu", name: "Temu", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Tencent QQ", name: "Tencent QQ", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "TenChat", name: "TenChat", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "teremok", name: "teremok", title: "5sim, onlinesim"},
			{value: "TheFork", name: "TheFork", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Things", name: "Things", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "This Fate", name: "This Fate", title: "sms-activate, smshub, 365sms"},
			{value: "Thisshop", name: "Thisshop", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Threads", name: "Threads", title: "sms-activate, smspva"},
			{value: "Tick", name: "Tick", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Ticketmaster", name: "Ticketmaster", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms"},
			{value: "Tier", name: "Tier", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "tiketcom", name: "tiketcom", title: "sms-activate, smshub, 365sms"},
			{value: "TikTok", name: "TikTok", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Tilda", name: "Tilda", title: "sms-reg, onlinesim, vak-sms"},
			{value: "Tinder", name: "Tinder", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Tinkoff", name: "Tinkoff", title: "cheapsms, vak-sms"},
			{value: "Tiptapp", name: "Tiptapp", title: "sms-activate, smshub, 365sms"},
			{value: "TipTip", name: "TipTip", title: "sms-activate, smshub, 365sms"},
			{value: "Tiv", name: "Tiv", title: "sms-activate, smshub, 365sms"},
			{value: "Tokopedia", name: "Tokopedia", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "TOL Online", name: "TOL Online", title: "onlinesim, sms-acktiwator"},
			{value: "Tomato", name: "Tomato", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "TopDetal", name: "TopDetal", title: "sms-activate, smshub, 365sms"},
			{value: "Tosla", name: "Tosla", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Touchance", name: "Touchance", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "TradeUP", name: "TradeUP", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "TradingView", name: "TradingView", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "Transfergo", name: "Transfergo", title: "sms-activate, smshub, 365sms, sms-reg"},
			{value: "Trembet", name: "Trembet", title: "sms-activate, smshub, 365sms"},
			{value: "Trendyol", name: "Trendyol", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Trip", name: "Trip", title: "sms-activate, smshub, 5sim, 365sms, sms-man, give-sms"},
			{value: "Trovo", name: "Trovo", title: "onlinesim, vak-sms"},
			{value: "Truecaller", name: "Truecaller", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms"},
			{value: "TRUTH SOCIAL", name: "TRUTH SOCIAL", title: "sms-activate, smshub, 365sms, vak-sms"},
			{value: "TurkiyePetrolleri", name: "TurkiyePetrolleri", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Tuul", name: "Tuul", title: "sms-activate, smshub, 365sms"},
			{value: "Twilio", name: "Twilio", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, give-sms"},
			{value: "Twitch", name: "Twitch", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Twitter", name: "Twitter", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "UangMe", name: "UangMe", title: "sms-activate, smshub, 365sms"},
			{value: "Uber", name: "Uber", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Ubisoft", name: "Ubisoft", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms"},
			{value: "Uklon", name: "Uklon", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "Ukrnet", name: "Ukrnet", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "ultra.io", name: "ultra.io", title: "onlinesim, vak-sms"},
			{value: "Ultragaz", name: "Ultragaz", title: "sms-activate, smshub, 365sms"},
			{value: "unacademy", name: "unacademy", title: "5sim, onlinesim"},
			{value: "Uplay", name: "Uplay", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Upwork", name: "Upwork", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator"},
			{value: "Uralairlines", name: "Uralairlines", title: "sms-activate, smshub, 365sms"},
			{value: "urent", name: "urent", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "Uteka", name: "Uteka", title: "sms-activate, smshub, cheapsms, 365sms, onlinesim, give-sms"},
			{value: "Utkonos", name: "Utkonos", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "UU163", name: "UU163", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "UWIN", name: "UWIN", title: "sms-activate, smshub, 365sms, sms-man, give-sms"},
			{value: "Uzum", name: "Uzum", title: "sms-activate, smshub, 365sms, onlinesim, sms-acktiwator"},
			{value: "Venmo", name: "Venmo", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "Venteny", name: "Venteny", title: "sms-activate, smshub, 365sms"},
			{value: "Vercel", name: "Vercel", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "VerifyKit", name: "VerifyKit", title: "sms-activate, smshub, 365sms"},
			{value: "Vernyi", name: "Vernyi", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Verse", name: "Verse", title: "sms-activate, smshub, 5sim, 365sms, smspva, give-sms"},
			{value: "vezet", name: "vezet", title: "5sim, onlinesim"},
			{value: "VFS GLOBAL", name: "VFS GLOBAL", title: "sms-activate, smshub, 365sms"},
			{value: "Viber", name: "Viber", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Vida", name: "Vida", title: "sms-activate, smshub, 365sms"},
			{value: "Vidio", name: "Vidio", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "VIMpay", name: "VIMpay", title: "sms-activate, smshub, 365sms"},
			{value: "Vinted", name: "Vinted", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "vipvending", name: "vipvending", title: "5sim, onlinesim"},
			{value: "Virgo", name: "Virgo", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "VitaExpress", name: "VitaExpress", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Vivo", name: "Vivo", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "VK", name: "VK", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Vkusvill", name: "Vkusvill", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, onlinesim, vak-sms, give-sms"},
			{value: "Vlife", name: "Vlife", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "VODOROBOT", name: "VODOROBOT", title: "onlinesim, vak-sms"},
			{value: "Voggt", name: "Voggt", title: "sms-activate, smshub, 365sms"},
			{value: "Voi", name: "Voi", title: "sms-activate, smshub, 365sms"},
			{value: "Voltz", name: "Voltz", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Vscale", name: "Vscale", title: "onlinesim, sms-acktiwator"},
			{value: "vscric", name: "vscric", title: "5sim, onlinesim"},
			{value: "Vsesmart", name: "Vsesmart", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "Vulkan Vegas", name: "Vulkan Vegas", title: "sms-activate, smshub, 365sms"},
			{value: "Walmart", name: "Walmart", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator"},
			{value: "WashXpress", name: "WashXpress", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "WAUG", name: "WAUG", title: "sms-activate, smshub, 365sms"},
			{value: "Webbankir.com", name: "Webbankir.com", title: "sms-reg, onlinesim"},
			{value: "WEBDE", name: "WEBDE", title: "sms-activate, smshub, 365sms"},
			{value: "WebMoney", name: "WebMoney", title: "cheapsms, sms-reg, smspva, sms-acktiwator, vak-sms"},
			{value: "WEBULL", name: "WEBULL", title: "sms-activate, smshub, 365sms, sms-acktiwator"},
			{value: "WeChat", name: "WeChat", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Weex", name: "Weex", title: "sms-activate, smshub, 365sms"},
			{value: "Weibo", name: "Weibo", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Weidian", name: "Weidian", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "WestStein", name: "WestStein", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Weverse", name: "Weverse", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "WhatsApp", name: "WhatsApp", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, smscode, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "WhatsAround", name: "WhatsAround", title: "onlinesim, sms-acktiwator"},
			{value: "Whoosh", name: "Whoosh", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Wildberries", name: "Wildberries", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, sms-man, sms-reg, onlinesim, vak-sms, give-sms"},
			{value: "willhaben", name: "willhaben", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "WINDS", name: "WINDS", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "Winelab", name: "Winelab", title: "onlinesim, vak-sms"},
			{value: "Wing Money", name: "Wing Money", title: "sms-activate, smshub, 5sim, 365sms, smspva, give-sms"},
			{value: "Wink", name: "Wink", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Winline", name: "Winline", title: "sms-reg, onlinesim"},
			{value: "Winmasters", name: "Winmasters", title: "sms-activate, smshub, 365sms"},
			{value: "winston", name: "winston", title: "5sim, onlinesim"},
			{value: "Winter Loan", name: "Winter Loan", title: "sms-activate, smshub, 365sms"},
			{value: "winzo", name: "winzo", title: "5sim, sms-man, onlinesim"},
			{value: "WinzoGame", name: "WinzoGame", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Wise", name: "Wise", title: "sms-activate, smshub, 365sms, sms-reg, smspva, onlinesim, vak-sms, give-sms"},
			{value: "Wish", name: "Wish", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "wizely", name: "wizely", title: "5sim, onlinesim"},
			{value: "Wmaraci", name: "Wmaraci", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "WOG.ua", name: "WOG.ua", title: "onlinesim, sms-acktiwator"},
			{value: "Wolt", name: "Wolt", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Wondermart", name: "Wondermart", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "WooPlus", name: "WooPlus", title: "sms-activate, smshub, 365sms"},
			{value: "WorldRemit", name: "WorldRemit", title: "sms-activate, smshub, 365sms"},
			{value: "X5ID", name: "X5ID", title: "sms-activate, smshub, cheapsms, 365sms, sms-reg, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "XadrezFeliz", name: "XadrezFeliz", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Xbox", name: "Xbox", title: "sms-activate, smshub, 365sms"},
			{value: "Xiaomi", name: "Xiaomi", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Ximalaya", name: "Ximalaya", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "xworldwallet", name: "xworldwallet", title: "sms-activate, smshub, 365sms"},
			{value: "XXGame", name: "XXGame", title: "sms-activate, smshub, 365sms"},
			{value: "Yaay", name: "Yaay", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "Yahoo", name: "Yahoo", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Yalla", name: "Yalla", title: "sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Yamaguchi", name: "Yamaguchi", title: "onlinesim, vak-sms"},
			{value: "Yami", name: "Yami", title: "sms-activate, smshub"},
			{value: "Yandex", name: "Yandex", title: "sms-activate, smshub, 5sim, getsms, cheapsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms"},
			{value: "Yandex.Eda", name: "Yandex.Eda", title: "onlinesim, sms-acktiwator"},
			{value: "YandexGo", name: "YandexGo", title: "sms-activate, smshub, cheapsms, 365sms, sms-acktiwator, give-sms"},
			{value: "yango", name: "yango", title: "5sim, onlinesim"},
			{value: "YAPPY", name: "YAPPY", title: "sms-activate, smshub, 5sim, getsms, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "Yemeksepeti", name: "Yemeksepeti", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "YikYak", name: "YikYak", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Yonogames", name: "Yonogames", title: "sms-activate, smshub, 5sim, 365sms"},
			{value: "YooMoney", name: "YooMoney", title: "cheapsms, sms-reg, smspva, sms-acktiwator, vak-sms"},
			{value: "Yota", name: "Yota", title: "sms-reg, onlinesim"},
			{value: "YouDo", name: "YouDo", title: "sms-activate, smshub, 5sim, 365sms, sms-reg, onlinesim, sms-acktiwator, vak-sms"},
			{value: "YouGotaGift", name: "YouGotaGift", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "Youla", name: "Youla", title: "sms-activate, smshub, 5sim, getsms, 365sms, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "YouStar", name: "YouStar", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "YoWin", name: "YoWin", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Ys4fun", name: "Ys4fun", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Yubo", name: "Yubo", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, vak-sms, give-sms"},
			{value: "Zach Bryan", name: "Zach Bryan", title: "sms-activate, smshub, 365sms"},
			{value: "Zadarma", name: "Zadarma", title: "sms-reg, onlinesim, sms-acktiwator"},
			{value: "ZaleyCash", name: "ZaleyCash", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Zalo", name: "Zalo", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Zasilkovna", name: "Zasilkovna", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Zaymer", name: "Zaymer", title: "cheapsms, sms-reg, onlinesim"},
			{value: "ZCity", name: "ZCity", title: "sms-activate, smshub, 5sim, 365sms, sms-acktiwator, give-sms"},
			{value: "Zdorov", name: "Zdorov", title: "sms-activate, smshub"},
			{value: "ZdravCity", name: "ZdravCity", title: "sms-activate, smshub, cheapsms, 365sms, sms-man, sms-reg, onlinesim, sms-acktiwator, give-sms"},
			{value: "zebpay", name: "zebpay", title: "5sim, onlinesim"},
			{value: "zenly", name: "zenly", title: "onlinesim, sms-acktiwator"},
			{value: "Zenvia", name: "Zenvia", title: "sms-activate, smshub, 365sms"},
			{value: "Zepto", name: "Zepto", title: "sms-activate, smshub, 5sim, 365sms, onlinesim"},
			{value: "Zhihu", name: "Zhihu", title: "sms-activate, smshub, 365sms, vak-sms, give-sms"},
			{value: "Ziglu", name: "Ziglu", title: "sms-activate, smshub, 5sim, 365sms, give-sms"},
			{value: "Zilch", name: "Zilch", title: "sms-activate, smshub, 365sms, sms-acktiwator, give-sms"},
			{value: "Zoho", name: "Zoho", title: "sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms"},
			{value: "Zolushka", name: "Zolushka", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Zomato", name: "Zomato", title: "sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms"},
			{value: "Zoo Game", name: "Zoo Game", title: "sms-activate, smshub, 365sms"},
			{value: "ZOON.RU", name: "ZOON.RU", title: "onlinesim, vak-sms"},
			{value: "Zupee", name: "Zupee", title: "sms-activate, smshub, 5sim, 365sms, onlinesim, give-sms"},
			{value: "ZUS Coffee", name: "ZUS Coffee", title: "sms-activate, smshub, 365sms"},
			{value: "ZéDelivery", name: "ZéDelivery", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Şikayet var", name: "Şikayet var", title: "sms-activate, smshub, 365sms, sms-man, give-sms"},
			{value: "Автор24", name: "Автор24", title: "365sms, onlinesim"},
			{value: "Аптека Апрель", name: "Аптека Апрель", title: "sms-activate, smshub, 365sms"},
			{value: "Бери заряд", name: "Бери заряд", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "БлинБери", name: "БлинБери", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Велобайк", name: "Велобайк", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Вкусно и Точка", name: "Вкусно и Точка", title: "sms-activate, smshub, cheapsms, 365sms, onlinesim, vak-sms, give-sms"},
			{value: "ВсеИнструменты", name: "ВсеИнструменты", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "Голос", name: "Голос", title: "sms-activate, smshub"},
			{value: "Город", name: "Город", title: "sms-activate, smshub, 365sms"},
			{value: "Джилекс", name: "Джилекс", title: "sms-activate, smshub, 365sms"},
			{value: "Домовой", name: "Домовой", title: "sms-activate, smshub, 365sms"},
			{value: "Едем.рф", name: "Едем.рф", title: "onlinesim, vak-sms"},
			{value: "Золотое Яблоко", name: "Золотое Яблоко", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "Контур", name: "Контур", title: "sms-activate, smshub, 365sms"},
			{value: "Кораблик", name: "Кораблик", title: "sms-activate, smshub, 365sms"},
			{value: "Кузбасс Онлайн", name: "Кузбасс Онлайн", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "КухняНаРайоне", name: "КухняНаРайоне", title: "sms-activate, smshub, 365sms, onlinesim, give-sms"},
			{value: "Лейка", name: "Лейка", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Максавит", name: "Максавит", title: "sms-activate, smshub, 365sms"},
			{value: "МИГРАНТ СЕРВИС", name: "МИГРАНТ СЕРВИС", title: "sms-activate, smshub, 365sms"},
			{value: "МирЗнакомств", name: "МирЗнакомств", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Нефтьмагистраль", name: "Нефтьмагистраль", title: "365sms, onlinesim"},
			{value: "Окей", name: "Окей", title: "sms-activate, smshub, 365sms"},
			{value: "Петрович", name: "Петрович", title: "onlinesim, vak-sms"},
			{value: "Рив Гош", name: "Рив Гош", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "РСА", name: "РСА", title: "sms-activate, smshub, 5sim, cheapsms, 365sms, onlinesim, sms-acktiwator, give-sms"},
			{value: "СhampionСasino", name: "СhampionСasino", title: "sms-activate, smshub, 365sms, give-sms"},
			{value: "Совкомбанк", name: "Совкомбанк", title: "cheapsms, vak-sms"},
			{value: "СушиВёсла", name: "СушиВёсла", title: "sms-activate, smshub, 365sms"},
			{value: "ТОКИО-CITY", name: "ТОКИО-CITY", title: "sms-activate, smshub, 365sms"},
			{value: "Улыбка радуги", name: "Улыбка радуги", title: "365sms, onlinesim, vak-sms"},
			{value: "УлыбкаРадуги", name: "УлыбкаРадуги", title: "sms-activate, smshub"},
			{value: "Халва", name: "Халва", title: "sms-activate, smshub, 365sms"},
			{value: "Шоколадница", name: "Шоколадница", title: "sms-activate, smshub, 365sms, onlinesim, vak-sms"},
			{value: "Штолле", name: "Штолле", title: "sms-activate, smshub, 365sms, onlinesim"},
			{value: "Энергобум", name: "Энергобум", title: "sms-activate, smshub, 365sms"},
			{value: "ЯRUS", name: "ЯRUS", title: "onlinesim, vak-sms"},
			{value: "炙热星河", name: "炙热星河", title: "sms-activate, smshub, 365sms, give-sms"}
		]
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "country",
		description: tr("Country"),
		default_selector: "string",
		disable_int: true,
		value_string: "RU",
		variants: [
			"RU<br/><span style='color:gray' title='sms-activate, smshub, 5sim, getsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Russian Federation") + "</span>",
			"KZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, getsms, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Kazakhstan") + "</span>",
			"UA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Ukraine") + "</span>",
			"PL<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Poland") + "</span>",
			"GB<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("United Kingdom") + "</span>",
			"EE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Estonia") + "</span>",
			"DE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Germany") + "</span>",
			"LT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Lithuania") + "</span>",
			"SE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Sweden") + "</span>",
			"NL<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Netherlands") + "</span>",
			"LV<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Latvia") + "</span>",
			"AT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Austria") + "</span>",
			"CZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Czech Republic") + "</span>",
			"FR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("France") + "</span>",
			"MD<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Moldova") + "</span>",
			"PT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Portugal") + "</span>",
			"GR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Greece") + "</span>",
			"PH<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Philippines") + "</span>",
			"ID<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Indonesia") + "</span>",
			"MY<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Malaysia") + "</span>",
			"KE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Kenya") + "</span>",
			"LA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Lao People's Democratic Republic") + "</span>",
			"RO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Romania") + "</span>",
			"MA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Morocco") + "</span>",
			"TH<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Thailand") + "</span>",
			"ES<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Spain") + "</span>",
			"SI<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Slovenia") + "</span>",
			"FI<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Finland") + "</span>",
			"US<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("United States") + "</span>",
			"US (Virtual)<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-acktiwator, give-sms'>" + tr("United States") + "</span>",
			"VN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, vak-sms, give-sms'>" + tr("Vietnam") + "</span>",
			"KG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Kyrgyzstan") + "</span>",
			"IL<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Israel") + "</span>",
			"NG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Nigeria") + "</span>",
			"RS<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Serbia") + "</span>",
			"ZA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("South Africa") + "</span>",
			"CO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Colombia") + "</span>",
			"MX<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, vak-sms, give-sms'>" + tr("Mexico") + "</span>",
			"BR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Brazil") + "</span>",
			"CY<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Cyprus") + "</span>",
			"BG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, vak-sms, give-sms'>" + tr("Bulgaria") + "</span>",
			"GE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Georgia") + "</span>",
			"CL<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, sms-acktiwator, give-sms'>" + tr("Chile") + "</span>",
			"DK<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, smspva, onlinesim, sms-acktiwator, vak-sms, give-sms'>" + tr("Denmark") + "</span>",
			"CN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-reg, onlinesim, give-sms'>" + tr("China") + "</span>",
			"MM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Myanmar") + "</span>",
			"HK<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, vak-sms, give-sms'>" + tr("Hong Kong") + "</span>",
			"IN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("India") + "</span>",
			"IE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Ireland") + "</span>",
			"KH<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Cambodia") + "</span>",
			"CI<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Cote d'Ivoire") + "</span>",
			"CA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, sms-acktiwator, give-sms'>" + tr("Canada") + "</span>",
			"CA (Virtual)<br/><span style='color:gray' title='onlinesim'>" + tr("Canada") + "</span>",
			"AR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Argentina") + "</span>",
			"UZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Uzbekistan") + "</span>",
			"CM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Cameroon") + "</span>",
			"TD<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Chad") + "</span>",
			"HR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Croatia") + "</span>",
			"BY<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Belarus") + "</span>",
			"TR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Turkey") + "</span>",
			"PK<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, vak-sms, give-sms'>" + tr("Pakistan") + "</span>",
			"PK (Virtual)<br/><span style='color:gray' title='smspva'>" + tr("Pakistan") + "</span>",
			"NZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("New Zealand") + "</span>",
			"GN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Guinea") + "</span>",
			"UG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Uganda") + "</span>",
			"IT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Italy") + "</span>",
			"HN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Honduras") + "</span>",
			"SV<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("El Salvador") + "</span>",
			"DO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Dominican Republic") + "</span>",
			"MR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Mauritania") + "</span>",
			"BJ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Benin") + "</span>",
			"BF<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Burkina Faso") + "</span>",
			"EG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Egypt") + "</span>",
			"EG (Virtual)<br/><span style='color:gray' title='smspva'>" + tr("Egypt") + "</span>",
			"HT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Haiti") + "</span>",
			"GM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Gambia") + "</span>",
			"YE<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Yemen") + "</span>",
			"GH<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Ghana") + "</span>",
			"GH (Virtual)<br/><span style='color:gray' title='smspva'>" + tr("Ghana") + "</span>",
			"IQ<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man, smspva, onlinesim, give-sms'>" + tr("Iraq") + "</span>",
			"SA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Saudi Arabia") + "</span>",
			"TW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Taiwan, Province of China") + "</span>",
			"BD<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, give-sms'>" + tr("Bangladesh") + "</span>",
			"SN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Senegal") + "</span>",
			"LK<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Sri Lanka") + "</span>",
			"PE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Peru") + "</span>",
			"ML<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man, onlinesim, sms-acktiwator, give-sms'>" + tr("Mali") + "</span>",
			"VE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Venezuela") + "</span>",
			"MN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Mongolia") + "</span>",
			"AF<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Afghanistan") + "</span>",
			"AO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Angola") + "</span>",
			"MZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-acktiwator, give-sms'>" + tr("Mozambique") + "</span>",
			"NP<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Nepal") + "</span>",
			"HU<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, give-sms'>" + tr("Hungary") + "</span>",
			"PY<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, give-sms'>" + tr("Paraguay") + "</span>",
			"TN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Tunisia") + "</span>",
			"NI<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Nicaragua") + "</span>",
			"BO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Bolivia, plurinational state of") + "</span>",
			"TG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator'>" + tr("Togo") + "</span>",
			"EC<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Ecuador") + "</span>",
			"BA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, sms-acktiwator'>" + tr("Bosnia and Herzegovina") + "</span>",
			"SL<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Sierra Leone") + "</span>",
			"JO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Jordan") + "</span>",
			"BI<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, sms-acktiwator'>" + tr("Burundi") + "</span>",
			"BW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-acktiwator, give-sms'>" + tr("Botswana") + "</span>",
			"LR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Liberia") + "</span>",
			"SK<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, sms-acktiwator'>" + tr("Slovakia") + "</span>",
			"TJ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Tajikistan") + "</span>",
			"CG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Congo") + "</span>",
			"GA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim, give-sms'>" + tr("Gabon") + "</span>",
			"NO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, sms-acktiwator, give-sms'>" + tr("Norway") + "</span>",
			"MK<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva, onlinesim'>" + tr("Macedonia, The Former Yugoslav Republic Of") + "</span>",
			"TZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Tanzania, United Republic Of") + "</span>",
			"DZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Algeria") + "</span>",
			"ET<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Ethiopia") + "</span>",
			"PG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Papua New Guinea") + "</span>",
			"BE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Belgium") + "</span>",
			"GT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Guatemala") + "</span>",
			"ZW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Zimbabwe") + "</span>",
			"JM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Jamaica") + "</span>",
			"TT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Trinidad and Tobago") + "</span>",
			"PA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Panama") + "</span>",
			"GW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Guinea-Bissau") + "</span>",
			"GY<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Guyana") + "</span>",
			"MW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Malawi") + "</span>",
			"SR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Suriname") + "</span>",
			"RE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Reunion") + "</span>",
			"ZM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Zambia") + "</span>",
			"AM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Armenia") + "</span>",
			"AL<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, smspva'>" + tr("Albania") + "</span>",
			"MU<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Mauritius") + "</span>",
			"BT<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Bhutan") + "</span>",
			"MV<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Maldives") + "</span>",
			"TM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, give-sms'>" + tr("Turkmenistan") + "</span>",
			"CH<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Switzerland") + "</span>",
			"AU<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Australia") + "</span>",
			"SG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man, onlinesim'>" + tr("Singapore") + "</span>",
			"MG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Madagascar") + "</span>",
			"CD<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man, give-sms'>" + tr("Congo, Democratic Republic of the") + "</span>",
			"MO<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Macao") + "</span>",
			"AZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, sms-man, onlinesim'>" + tr("Azerbaijan") + "</span>",
			"IR<br/><span style='color:gray' title='sms-activate, smshub, sms-man, onlinesim, give-sms'>" + tr("Iran, Islamic Republic of") + "</span>",
			"TL<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Timor-Leste") + "</span>",
			"CR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Costa Rica") + "</span>",
			"AE<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man, give-sms'>" + tr("United Arab Emirates") + "</span>",
			"PR<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Puerto Rico") + "</span>",
			"SD<br/><span style='color:gray' title='sms-activate, smshub, sms-man, onlinesim, give-sms'>" + tr("Sudan") + "</span>",
			"KW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Kuwait") + "</span>",
			"LY<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man, give-sms'>" + tr("Libyan Arab Jamahiriya") + "</span>",
			"SZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Eswatini") + "</span>",
			"OM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Oman") + "</span>",
			"BB<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Barbados") + "</span>",
			"BS<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Bahamas") + "</span>",
			"BZ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Belize") + "</span>",
			"DM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, give-sms'>" + tr("Dominica") + "</span>",
			"GD<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Grenada") + "</span>",
			"KM<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Comoros") + "</span>",
			"KN<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Saint Kitts and Nevis") + "</span>",
			"LS<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Lesotho") + "</span>",
			"NA<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Namibia") + "</span>",
			"NE<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Niger") + "</span>",
			"RW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Rwanda") + "</span>",
			"BH<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Bahrain") + "</span>",
			"LB<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man, give-sms'>" + tr("Lebanon") + "</span>",
			"UY<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Uruguay") + "</span>",
			"GP<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Guadeloupe") + "</span>",
			"GF<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("French Guiana") + "</span>",
			"LC<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Saint Lucia") + "</span>",
			"LU<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Luxembourg") + "</span>",
			"VC<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Saint Vincent and the Grenadines") + "</span>",
			"GQ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Equatorial Guinea") + "</span>",
			"AG<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Antigua and Barbuda") + "</span>",
			"AW<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, give-sms'>" + tr("Aruba") + "</span>",
			"NC<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("New Caledonia") + "</span>",
			"CV<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms, sms-man'>" + tr("Cape Verde") + "</span>",
			"SY<br/><span style='color:gray' title='sms-activate, smshub, sms-man, give-sms'>" + tr("Syrian Arab Republic") + "</span>",
			"QA<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man'>" + tr("Qatar") + "</span>",
			"CU<br/><span style='color:gray' title='sms-activate, smshub, sms-man, sms-acktiwator'>" + tr("Cuba") + "</span>",
			"BN<br/><span style='color:gray' title='sms-activate, smshub, 365sms, give-sms'>" + tr("Brunei Darussalam") + "</span>",
			"CF<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man'>" + tr("Central African Republic") + "</span>",
			"IS<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man'>" + tr("Iceland") + "</span>",
			"SO<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man'>" + tr("Somalia") + "</span>",
			"DJ<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Djibouti") + "</span>",
			"KY<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Cayman Islands") + "</span>",
			"ME<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Montenegro") + "</span>",
			"ER<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Eritrea") + "</span>",
			"SS<br/><span style='color:gray' title='sms-activate, smshub, 365sms, sms-man'>" + tr("South Sudan") + "</span>",
			"ST<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Sao Tome and Principe") + "</span>",
			"MS<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Montserrat") + "</span>",
			"AI<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Anguilla") + "</span>",
			"SC<br/><span style='color:gray' title='sms-activate, smshub, 5sim, 365sms'>" + tr("Seychelles") + "</span>",
			"FJ<br/><span style='color:gray' title='sms-activate, smshub, 365sms, give-sms'>" + tr("Fiji") + "</span>",
			"MC<br/><span style='color:gray' title='sms-activate, smshub, 365sms'>" + tr("Monaco") + "</span>",
			"GI<br/><span style='color:gray' title='sms-activate, smshub, smspva'>" + tr("Gibraltar") + "</span>",
			"JP<br/><span style='color:gray' title='5sim, sms-man'>" + tr("Japan") + "</span>",
			"KR<br/><span style='color:gray' title='5sim, give-sms'>" + tr("Korea, Republic of") + "</span>",
			"WS<br/><span style='color:gray' title='5sim'>" + tr("Samoa") + "</span>",
			"SB<br/><span style='color:gray' title='5sim'>" + tr("Solomon Islands") + "</span>",
			"TO<br/><span style='color:gray' title='5sim'>" + tr("Tonga") + "</span>",
			"TC<br/><span style='color:gray' title='5sim'>" + tr("Turks and Caicos Islands") + "</span>",
			"VG<br/><span style='color:gray' title='5sim'>" + tr("Virgin Islands, British") + "</span>",
			"XK<br/><span style='color:gray' title='smspva'>" + tr("Kosovo") + "</span>",
			"BM<br/><span style='color:gray' title='give-sms'>" + tr("Bermuda") + "</span>"
		],
		help: {
			description: tr("Optional parameter.") + " " + tr("Country of the number."),
			examples: [
				{code: "RU", description: tr("Russian Federation")},
				{code: "UA", description: tr("Ukraine")},
				{code: "US", description: tr("United States")},
				{code: tr("Empty string"), description: tr("Depends on the service used, maybe the last used country or some specific country, you can find out more in the description of the API of the service.")}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#input_constructor').html())({
			id: "operator",
			description: tr("Operator"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Cellular operator of the number, in the form in which it is perceived by the SMS receiving service.") + " " + tr("This parameter is not available for all services."),
				examples: [
					{code: "megafon", description: tr("MegaFon")},
					{code: "kyivstar", description: tr("Kyivstar")},
					{code: "tele2", description: "Tele2"},
					{code: tr("Empty string"), description: tr("Use any operator.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "customSite",
			description: tr("Custom site"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Custom value of the site, in the form in which it is perceived by the SMS receiving service. If this parameter is specified, then it will be used instead of the \"Site\" parameter and sent to the service without preliminary processing."),
				examples: [
					{code: "wa", description: "WhatsApp"},
					{code: "tg", description: "Telegram"},
					{code: "go", description: "Google"},
					{code: tr("Empty string"), description: tr("Use value from \"") + tr("Site") + tr("\" parameter.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "customCountry",
			description: tr("Custom country"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Custom value of the country, in the form in which it is perceived by the SMS receiving service. If this parameter is specified, then it will be used instead of the \"Country\" parameter and sent to the service without preliminary processing."),
				examples: [
					{code: "0", description: tr("Russian Federation")},
					{code: "1", description: tr("Ukraine")},
					{code: "187", description: tr("United States")},
					{code: tr("Empty string"), description: tr("Use value from \"") + tr("Country") + tr("\" parameter.")}
				]
			}
		}) %>
		<%= _.template($('#input_constructor').html())({
			id: "serverUrl",
			description: tr("Server url"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Url of the SMS receiving service server. Use this parameter to specify the url of the server, if the required service is not in the list of available ones, but it works through an API similar to the selected service."),
				examples: [
					{code: "https://sms.org"},
					{code: "http://receive-sms.com"},
					{code: "http://127.0.0.1:8888"},
					{code: tr("Empty string"), description: tr("Use default server url, https://api.sms-activate.org for sms-activate.org, etc")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#variable_constructor').html())({
		id: "Save",
		description: tr("Variable to save the result"),
		default_variable: "SMS_NUMBERS_COUNT",
		help: {
			description:tr("Variable in which, after successful execution of the action, the count of available numbers will be written."),
			examples: [
				{code: 137},
				{code: 549},
				{code: 1596},
				{code: 0, description: tr("The specified service currently does not have numbers with the specified parameters")}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get the count of available numbers on the SMS receiving service.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a number equal to the number of available numbers corresponding to the specified parameters on the SMS receiving service.</div>
	<div class="tr tooltip-paragraph-fold">You can specify your value for the operator, site and country in the corresponding parameters located in the additional settings. Please note that these values must be specified in the form in which the service perceives them, they will be sent as you specified them.</div>
	<div class="tr tooltip-paragraph-fold">If the required service is not in the list of available ones, but it works through an API similar to the selected service, then you can specify its server url in the corresponding parameter located in the additional settings.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %></script><script type="text/template" id="SMS_GetSites"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "service",
		description: tr("Service"),
		default_selector: "string",
		variants: [
			"sms-reg.com",
			{value: "smsak.org", description: tr("Ex sms-acktiwator.ru")},
			"sms-man.ru"
		],
		disable_int: true,
		value_string: "sms-reg.com",
		help: {
			description: tr("SMS receiving service for which need to get a list of sites."),
			examples: [
				{code: "sms-reg.com", description: "https://sms-reg.com"},
				{code: "smsak.org", description: "https://smsak.org"},
				{code: "sms-man.ru", description: "https://sms-man.ru"}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "apiKey",
		description: tr("API key"),
		default_selector: "string",
		disable_int: true,
		value_string: "",
		help: {
			description: tr("API key of the SMS receiving service. The key for the service selected in the \"Service\" parameter. Depending on the service, you can get it in your personal account or in the service settings."),
			examples: [
				{code: "8b1a9953c4611296a827abf8c47804d7"},
				{code: "79916U5718g2266a7bff7fad356c6cb280b3ea"},
				{code: "f4d559ba78aa6c4701c1995ae9977c03"}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#input_constructor').html())({
			id: "serverUrl",
			description: tr("Server url"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Url of the SMS receiving service server. Use this parameter to specify the url of the server, if the required service is not in the list of available ones, but it works through an API similar to the selected service."),
				examples: [
					{code: "https://sms.org"},
					{code: "http://receive-sms.com"},
					{code: "http://127.0.0.1:8888"},
					{code: tr("Empty string"), description: tr("Use default server url, https://api.sms-activate.org for sms-activate.org, etc")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#variable_constructor').html())({
		id: "Save",
		description: tr("Variable to save the result"),
		default_variable: "SMS_SITES_LIST",
		help: {
			description:tr("Variable in which, after successful execution of the action, the list of sites will be written."),
			examples: [
				{code: "[{\"id\":\"aol\",\"name\":\"Aol.com\"},{\"id\":\"gmail\",\"name\":\"Google\"}]"}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get list of sites of the SMS receiving service.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a list consisting of objects containing identifiers and names of sites supported by the specified SMS receiving service. The site identifier is contained in the <code>id</code> property of the object, and the name in the <code>name</code> property.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">Example</span>: <code>[{"id":"aol","name":"Aol.com"},{"id":"gmail","name":"Google"}]</code></div>
	<div class="tr tooltip-paragraph-fold">The resulting list can be processed using actions from the "JSON" module.</div>
	<div class="tr tooltip-paragraph-fold">To get the name of the first site, use the JPath query <span style="color:black">$.[0].name</span> in the "Get value" action from the "JSON" module.</div>
	<div class="tr tooltip-paragraph-fold">To get a list of all site names, use the JPath query <span style="color:black">$.[*].name</span> in the "Get all values" action from the "JSON" module.</div>
	<div class="tr tooltip-paragraph-fold">To get the id of the first site, use the JPath query <span style="color:black">$.[0].id</span> in the "Get value" action from the "JSON" module.</div>
	<div class="tr tooltip-paragraph-fold">To get the id of a site with a name from the [[NAME]] variable, use the JPath query <span style="color:black">$.[?(@.name=="[[NAME]]")].id</span> in the "Get value" action from the "JSON" module.</div>
	<div class="tr tooltip-paragraph-fold">The resulting site id can be used in the "Custom site" parameter of the "Get the count of available numbers" and "Get phone number" actions.</div>
	<div class="tr tooltip-paragraph-fold">If the required service is not in the list of available ones, but it works through an API similar to the selected service, then you can specify its server url in the corresponding parameter located in the additional settings.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %></script><script type="text/template" id="SMS_GetCountries"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({
		id: "service",
		description: tr("Service"),
		default_selector: "string",
		variants: [
			{value: "sms-activate.org", description: tr("Ex sms-activate.ru")},
			{value: "smsak.org", description: tr("Ex sms-acktiwator.ru")},
			"sms-man.ru"
		],
		disable_int: true,
		value_string: "sms-activate.org",
		help: {
			description: tr("SMS receiving service for which need to get a list of countries."),
			examples: [
				{code: "sms-activate.org", description: "https://sms-activate.org"},
				{code: "smsak.org", description: "https://smsak.org"},
				{code: "sms-man.ru", description: "https://sms-man.ru"}
			]
		}
	}) %>
	<%= _.template($('#input_constructor').html())({
		id: "apiKey",
		description: tr("API key"),
		default_selector: "string",
		disable_int: true,
		value_string: "",
		help: {
			description: tr("API key of the SMS receiving service. The key for the service selected in the \"Service\" parameter. Depending on the service, you can get it in your personal account or in the service settings."),
			examples: [
				{code: "8b1a9953c4611296a827abf8c47804d7"},
				{code: "79916U5718g2266a7bff7fad356c6cb280b3ea"},
				{code: "f4d559ba78aa6c4701c1995ae9977c03"}
			]
		}
	}) %>
	<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
		<%= _.template($('#input_constructor').html())({
			id: "serverUrl",
			description: tr("Server url"),
			default_selector: "string",
			disable_int: true,
			value_string: "",
			help: {
				description: tr("Optional parameter.") + " " + tr("Url of the SMS receiving service server. Use this parameter to specify the url of the server, if the required service is not in the list of available ones, but it works through an API similar to the selected service."),
				examples: [
					{code: "https://sms.org"},
					{code: "http://receive-sms.com"},
					{code: "http://127.0.0.1:8888"},
					{code: tr("Empty string"), description: tr("Use default server url, https://api.sms-activate.org for sms-activate.org, etc")}
				]
			}
		}) %>
	<%= _.template($('#block_end').html())() %>
	<%= _.template($('#variable_constructor').html())({
		id: "Save",
		description: tr("Variable to save the result"),
		default_variable: "SMS_COUNTRIES_LIST",
		help: {
			description:tr("Variable in which, after successful execution of the action, the list of countries will be written."),
			examples: [
				{code: "[{\"id\":\"0\",\"name\":\"Россия\",\"name_en\":\"Russia\"},{\"id\":\"1\",\"name\":\"Украина\",\"name_en\":\"Ukraine\"}]"}
			]
		}
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get list of countries of the SMS receiving service.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a list consisting of objects containing identifiers and names of countries supported by the specified SMS receiving service. The country identifier is contained in the <code>id</code> property of the object, the country name in Russian is in the <code>name</code> property, and the country name in English is in the <code>name_en</code> property.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">Example</span>: <code>[{"id":"0","name":"Россия","name_en":"Russia"},{"id":"1","name":"Украина","name_en":"Ukraine"}]</code></div>
	<div class="tr tooltip-paragraph-fold">Some services may not have a country name in English or have a name in English in the <code>name</code> property and have no name in Russian at all.</div>
	<div class="tr tooltip-paragraph-fold">The resulting list can be processed using actions from the "JSON" module.</div>
	<div class="tr tooltip-paragraph-fold">To get the Russian name of the first country, use the JPath query <span style="color:black">$.[0].name</span> in the "Get value" action from the "JSON" module.</div>
	<div class="tr tooltip-paragraph-fold">To get the English name of the first country, use the JPath query <span style="color:black">$.[0].name_en</span> in the "Get value" action from the "JSON" module.</div>
	<div class="tr tooltip-paragraph-fold">To get a list of Russian names of all countries, use the JPath query <span style="color:black">$.[*].name</span> in the "Get all values" action from the "JSON" module.</div>
	<div class="tr tooltip-paragraph-fold">To get a list of English names of all countries, use the JPath query <span style="color:black">$.[*].name_en</span> in the "Get all values" action from the "JSON" module.</div>
	<div class="tr tooltip-paragraph-fold">To get the id of the first country, use the JPath query <span style="color:black">$.[0].id</span> in the "Get value" action from the "JSON" module.</div>
	<div class="tr tooltip-paragraph-fold">To get the id of the country with the Russian name from the [[NAME]] variable, use the JPath query <span style="color:black">$.[?(@.name=="[[NAME]]")].id</span> in the "Get value" action from the "JSON" module.</div>
	<div class="tr tooltip-paragraph-fold">To get the id of the country with the English name from the [[NAME]] variable, use the JPath query <span style="color:black">$.[?(@.name_en=="[[NAME]]")].id</span> in the "Get value" action from the "JSON" module.</div>
	<div class="tr tooltip-paragraph-fold">The resulting country id can be used in the "Custom country" parameter of the "Get the count of available numbers" and "Get phone number" actions.</div>
	<div class="tr tooltip-paragraph-fold">If the required service is not in the list of available ones, but it works through an API similar to the selected service, then you can specify its server url in the corresponding parameter located in the additional settings.</div>
	<div class="tr tooltip-paragraph-last-fold">If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", use_timeout:true, visible:true}) %></script><script type="text/template" id="SMS_Debug"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"enable", description:tr("Enable debug"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true","false"], help: {description: tr("Enable phone verification module debug."), examples:[{code:"true",description:tr("Enable debug")},{code:"false",description:tr("Disable debug")}]}}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Enable or disable phone verification module debug.</div>
	<div class="tr tooltip-paragraph-last-fold">If debug is enabled, all queries and their results will be displayed in the log.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="ExecuteProcess"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"Command", description:tr("Batch script or executable path"), default_selector: "string", disable_int:true, disable_editor:true, disable_string:true, use_textarea:true, size: 8, disable_type_chooser:true,textarea_height:80, help: 
{
	description: tr("This field must contain either path to executable that you want to start or batch script. Batch content may contain any windows utilities like cd, dir, echo, etc and can have multiple lines"), examples:
	[
		{
			code:"c:\\path\\to\\executable.exe",description:tr("Run executable")
		},
		{
			code:"c:\\path\\to\\executable 1.exe<br/>c:\\path\\to\\executable 2.exe<br>",description:tr("Run several executables one by one")
		},
		{
			code:"c:\\path\\to\\executable.exe --argument1 --argument2",description:tr("Run executable with command line parameters")
		},
		{
			code:"where cmd",description:tr("Find cmd.exe location")
		},
		{
			code:"echo \"Message\"",description:tr("Display message, it will be available in PROCESS_STANDART_OUTPUT variable.")
		},
		{
			code:"cd c:\\download<br/>dir<br/>",description:tr("Show content of download folder")
		},
		{
			code:"FOR %%G IN (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) DO (echo %%G)",description:tr("Output all letters to log")
		},
		
	]
}}) %>
  
  <%= _.template($('#input_constructor').html())({id:"WorkingFolder", description:tr("Working folder"), default_selector: "string", disable_int:true, help: 
{
	description: tr("Working folder in which batch will be executed. Leave blank to execute in folder, where BrowserAutomationStudio.exe file is located."), examples:
	[
		{
			code:"c:/dev"
		},
		{
			code:"c:\\dev"
		},
		{
			code:tr("Empty string"),description:tr("Run in BAS folder")
		}
	]
}}) %>

	<%= _.template($('#checkbox').html())({id: "Check", title: tr("Wait while process will finish"), checked: true}) %>

  
  <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Process standart output"), default_variable: "PROCESS_STANDART_OUTPUT", help: 
{
	description: tr("This variable will contain process standart output")
}}) %>
  <%= _.template($('#variable_constructor').html())({id:"SaveError", description:tr("Process error output"), default_variable: "PROCESS_ERROR_OUTPUT", help: 
{
	description: tr("This variable will contain process error output")
}}) %>
</div>

<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Run executable or batch script.</div>
      <div class="tr tooltip-paragraph-fold">'Batch script or executable path' parameter may contain path to executable that you want to run, or batch script.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Batch script can have multiple lines, may use</span> <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('http://www.robvanderwoude.com/batchcommands.php');return false">windows utilities</a> <span class="tr">and start other executables.</span> </div>
      <div class="tr tooltip-paragraph-fold">Working folder by default is path where BAS installed, you may want to change it with 'Working folder' parameter or by running 'cd' command inside batch script.</div>
      <div class="tr tooltip-paragraph-last-fold">Check PROCESS_STANDART_OUTPUT and PROCESS_ERROR_OUTPUT variables to get execution results, you may want to use regular expressions to extract values from them.</div>
      
</div>

<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="UseProfile"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({id:"Path", description:tr("Profile folder path"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("String with profile folder. Slash type is not important. If folder doesn't exist, it will be created. If folder already exists, BAS will use it as profile and restore all data from it like cookies, localstorage, etc"), examples:[{code:"c:/path/to/profile"},{code:"c:\\path\\to\\profile"}]} }) %>
	<%= _.template($('#input_constructor').html())({id:"LoadFPFromFolder", description:tr("Always load fingerprint from profile folder"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true","false"], help: {description: tr("In case if profile folder already exists and has fingerprint data, tells BAS to apply fingerpint used latest for that profile.")}}) %>
	<%= _.template($('#input_constructor').html())({id:"Key", description:tr("FingerprintSwitcher key. Can be empty"), default_selector: "string", disable_int:true,
         variants: ["business<br/><span style='color:gray;font-size:small'>" + tr("Use FingerprintBusiness license.") + "</span><br/><span style='color:gray;font-size:small'>" + tr("It can help to embed fingerprints inside compiled script.") + "</span>"],
          help: 
          {
            description: tr("Fingerprints are obtained from the FingerprintSwitcher service. To use this service, you need to purchase a key. Key verification is required when using profile which has fingerprint data. If you don't change profile folder or it doesn't contain fingerprint data, you can leave this field blank. You can also leave this field blank if the fingerprint was obtained using the free version (without a key). However, if the fingerprint was obtained with the paid version, you must provide a valid key to apply it. To use the free version, simply leave this field blank."), examples:
            [
              {
                code:"pGGeNdza2e0gIw48oa",description:tr("Key example, it is required if fingerprint was obtained with paid version.")
              },
              {
                code:"business",description:tr("Use FingerprintBusiness license. It can help to embed fingerprints inside compiled script. Check following") + " " + `<a href='#' style="color:rgba(157, 153, 108, 1.0)" onclick="BrowserAutomationStudio_OpenUrl('` + tr('https://wiki.bablosoft.com/doku.php?id=fingerprintbusiness') + `');return false">` + tr('link') + `</a>` + " " + tr("for more info.")
              },
              
              {
                code:tr("Empty string"),description:tr("Use a free version. Only if fingerprint was obtained with free version.")
              }
            ]
          } }) %>
	<%= _.template($('#info').html())({color: "gray", description: `<span class="tr">This action works with</span> 
  	<a href="#"  onclick="BrowserAutomationStudio_OpenUrl('https://fp.bablosoft.com'); return false;">
  		<span class="tr">Fingerprint switcher service</span></a>. 
  	<span class="tr">You can get a key there</span>. `}) %>
	<%= _.template($('#input_constructor').html())({id:"LoadProxyFromFolder", description:tr("Always load proxy from profile folder"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true","false"], help: {description: tr("In case if profile folder already exists and has proxy data, tells BAS to apply proxy used latest for that profile.")}}) %>
</div>

<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Tells browser to use specified folder as a place to store cookies, cache, localstorage, etc.</div>
	<div class="tr tooltip-paragraph-fold">Current action is deprecated. Instead it is recommended to use <a href="#!/browsersettings">Browser Settings</a> with "Profile folder path" param. With the help of it, you can change all settings that require a browser restart at once.</div>
	<div class="tr tooltip-paragraph-fold">If specified folder doesn't exist it will be created.</div>
	<div class="tr tooltip-paragraph-fold">If specified folder already exists, than browser will load all data from it.</div> 
	<div class="tr tooltip-paragraph-fold">Switching profile requires browser restart, so this action may restart browser in case if it exists. Restarting browser will also reset all browser settings.</div>
	<div class="tr tooltip-paragraph-last-fold">You can implement autologin with this action, first you need to specify some folder and do login with browser, then you may restart and specify same folder again. Browser will load all data from previous session and you don't need to login second time.</div>
</div>

<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="StopUsingProfile"><div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">By default BAS browser stores all profile data in temporary folder. This action will switch to new temporary profile.</div>
	<div class="tr tooltip-paragraph-fold">Current action is deprecated. Instead it is recommended to use <a href="#!/browsersettings">Browser Settings</a> with "Profile folder path" param set to "temporary" value. With the help of it, you can change all settings that require a browser restart at once.</div>
	<div class="tr tooltip-paragraph-fold">Switching profile requires browser restart, so this action may restart browser in case if it exists. Restarting browser will also reset all browser settings.</div>
	<div class="tr tooltip-paragraph-last-fold">In case if temporary profile is used, new temporary profile will be created.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="SaveProfile"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({id:"Path", description:tr("Profile folder path"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("String with profile folder. Slash type is not important. It is better to use empty or non existing folder here."), examples:[{code:"c:/path/to/profile"},{code:"c:\\path\\to\\profile"}]}}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Copy your current profile to other folder.</div>
	<div class="tr tooltip-paragraph-fold">This action doesn't close browser and doesn't switch profile path to new location.</div> 
	<div class="tr tooltip-paragraph-last-fold">Best place to use this action is thread end, if you want to preserve your cookies and don't login to sites that you visited when running BAS later.</div>
</div>

<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="RemoveLocalProfile"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({id:"Path", description:tr("Profile folder path"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("String with profile folder. Slash type is not important."), examples:[{code:"c:/path/to/profile"},{code:"c:\\path\\to\\profile"},{code:tr("Empty string"), description:tr("Deletes current profile")}]}}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Removes profile.</div>
	<div class="tr tooltip-paragraph-fold">You can delete current profile if you run it with empty profile path. This will stop browser. After deleting current profile, new temporary profile will be used.</div>
	<div class="tr tooltip-paragraph-last-fold">This action won't stop browser, only if you delete current profile.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="GetCurrentProfile"><div class="container-fluid filewrite">
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Profile path"), default_variable: "CURRENT_PROFILE_ID", help: {description: tr("Absolute profile folder path.")}}) %>
    <%= _.template($('#variable_constructor').html())({id:"Save2", description:tr("Has proxy"), default_variable: "HAS_PROXY", help: {description: tr("Boolean value, if current profile has proxy. It can be applied automatically with 'Create or switch to regular profile' action.")}}) %>
    <%= _.template($('#variable_constructor').html())({id:"Save3", description:tr("Has fingerprint"), default_variable: "HAS_FINGERPRINT", help: {description: tr("Boolean value, if current profile has fingerprint. It can be applied automatically with 'Create or switch to regular profile' action.")}}) %>
</div>


<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Return information about current profile.</div>
	<div class="tr tooltip-paragraph-last-fold">This action doesn't create browser, returns immediately and can be used from any place of script.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="RegexpFirst"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Value", description:tr("String To Apply Regexp"), default_selector: "string", disable_int:true, help: 
{
    description: tr("This value is a target for regular expression. Could be any string.")
}}) %>
    <%= _.template($('#input_constructor').html())({id:"Regexp", description:tr("Regular Expression"), default_selector: "string", disable_int:true

,variants: [

"\\d+<br/><span style='color:gray;font-size:small'>" + tr("Any digit sequence") + "</span>",
"\\w+<br/><span style='color:gray;font-size:small'>" + tr("Any word character sequence") + "</span>",
"\\s+<br/><span style='color:gray;font-size:small'>" + tr("Any whitespace character sequence (includes tabs and line breaks)") + "</span>",
".+<br/><span style='color:gray;font-size:small'>" + tr("Any number of any characters except line break") + "</span>",
"[\\S\\s]+<br/><span style='color:gray;font-size:small'>" + tr("Any number of any characters including line break") + "</span>",
"[a-z]+<br/><span style='color:gray;font-size:small'>" + tr("Any lowercase character sequence") + "</span>",
"[0-9]+<br/><span style='color:gray;font-size:small'>" + tr("Any non digit sequence") + "</span>",

"[^0-9]+<br/><span style='color:gray;font-size:small'>" + tr("Any non digit sequence") + "</span>",

"Your user name is: [^\\s]+<br/><span style='color:gray;font-size:small'>" + tr("'Your user name is: ' string than any number of non whitespace character") + "</span>",
"Your user name is: ([^\\s]+)<br/><span style='color:gray;font-size:small'>" + tr("Save name into GROUP1 variable by using group") + "</span>",
"href=\"([^\"]+)\"<br/><span style='color:gray;font-size:small'>" + tr("Extract link from html a tag") + "</span>"
],

     help: 
{
    description: tr("Regular expression. Can contain groups, all captured groups will be placed into variables. Regular expressions are applied in multiline mode, if you want to match any character including line break use following expression [\\S\\s]+. Dot .+ captures any character except line break."), examples:
    [
        {
            code:"\\d+",description:tr("Any digit sequence")
        },
        {
            code:"\\w+",description:tr("Any word character sequence")
        },
        {
            code:"\\s+",description:tr("Any whitespace character sequence (includes tabs and line breaks)")
        },
        {
            code:".+",description:tr("Any number of any characters except line break")
        },
        {
            code:"[\\S\\s]+",description:tr("Any number of any characters including line break")
        },
        {
            code:"[a-z]+",description:tr("Any lowercase character sequence")
        },
        {
            code:"[0-9]+",description:tr("Any digit sequence")
        },
        {
            code:"[^0-9]+",description:tr("Any non digit sequence")
        },
        {
            code:"Your user name is: [^\\s]+",description:tr("'Your user name is: ' string than any number of non whitespace character")
        },
        {
            code:"Your user name is: ([^\\s]+)",description:tr("Save name into GROUP1 variable by using group")
        },
        {
            code:"href=\"([^\"]+)\"",description:tr("Extract link from html a tag")
        }
    ]
}}) %>
    <%= _.template($('#variable_constructor').html())({id:"Result", description:tr("Captured groups"), default_variable: "GROUP1,GROUP2,GROUP3", append_mode:true, help: 
{
    description: tr("List of variable names separated by comma. Each variable will contain one captured group. To set group in regular expression, use brackets. By default first group will be placed into GROUP1 variable, second - into GROUP2 and third into GROUP3")
}}) %>
    
    <%= _.template($('#variable_constructor').html())({id:"GroupsAsList", description:tr("List of captured groups"), default_variable: "LIST_WITH_GROUPS", help: {description: tr("List of all captured groups. Results will be written into that list. The first element of the list will contain all the text extracted by the regular expression.")} }) %>

    <%= _.template($('#variable_constructor').html())({id:"ResultAll", description:tr("All string that matches regexp"), default_variable: "ALL_MATCH", help: 
{
    description: tr("All text captured by regular expression.")
}}) %>
    
</div>


    <div class="tooltipinternal">
          <div class="tr tooltip-paragraph-first-fold">Execute regular expression, get first match and captured groups.</div>
          <div class="tooltip-paragraph-fold"><span class="tr">Regular expression is convenient mechanism to process strings. It helps to search for string parts, split string, etc</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://regexone.com/');return false">tutorial</a>, <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://www.rexegg.com/regex-quickstart.html');return false">manual</a> ). </div>
          <div class="tr tooltip-paragraph-fold">You could think of regexp as some kind of mask or template, which string must match. Literally regular expression could say: 'Search in a text to find a word character sequence followed by @ symbol followed by any word character or dot character.', in regular expression language it would be \w+@[a-zA-Z\.]+ and it is very simple regexp to search for mailbox in text.</div>

          <div class="tr tooltip-paragraph-fold">Variable specified in 'Entire match' parameter will be filled with whole matching text.</div>
          <div class="tooltip-paragraph-fold"><span class="tr">If you want to capture only part of entire match, then you should use groups. Groups are created by adding brackets into regular expression. For example, if you want to process following string</span> <span style="color:black">Your user name is: test</span> <span class="tr">and capture string</span> <span style="color:black">test</span>, <span class="tr">you can use following regular expression</span> <span style="color:black">Your user name is: ([^\s]+)</span> </div>
          <div class="tooltip-paragraph-fold">
            <span class="tr">Several groups may be captured. If line is</span> 
            <span style="color:black">-John 100-</span> 
            <span class="tr">and regexp is</span> 
            <span style="color:black">(\w+) (\w+)</span>, 
            <span class="tr">than variable</span>
            <span style="color:green">ALL_MATCH</span> 
            <span class="tr">will be equal to</span> 
            <span style="color:black">John 100</span>, 
            <span style="color:green">GROUP1</span> 
            <span class="tr">will be equal to</span> 
            <span style="color:black">John</span> 
            <span class="tr">and</span> 
            <span style="color:green">GROUP2</span> 
            <span class="tr">will be equal to</span>
            <span style="color:black">100</span>.
          </div>

          <div class="tr tooltip-paragraph-fold">Additionally, this action will save all captured groups into list, it can be processed later with List module.</div>

          <div class="tr tooltip-paragraph-fold">Processing html is much easier and faster with 'Xpath' module.</div>
          <div class="tr tooltip-paragraph-fold">This action searches only for the first string, that matches regexp, for example it could search for first number in text. If you want to find several strings that matches regexp, i.e. all numbers, you should use 'Exctract all data' action.</div>
          <div class="tooltip-paragraph-last-fold"><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://bablosoft.github.io/RegexpConstructor/'); return false;"><span class="tr">Regular Expression Constructor</span></a> <span class="tr">can help you to create regexp.</span></div>
    </div>


    
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="RegexpScan"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Value", description:tr("String To Apply Regexp"), default_selector: "string", disable_int:true, help: 
{
    description: tr("This value is a target for regular expression. Could be any string.")
}}) %>
    <%= _.template($('#input_constructor').html())({id:"Regexp", description:tr("Regular Expression"), default_selector: "string", disable_int:true,variants: [

"\\d+<br/><span style='color:gray;font-size:small'>" + tr("Any digit sequence") + "</span>",
"\\w+<br/><span style='color:gray;font-size:small'>" + tr("Any word character sequence") + "</span>",
"\\s+<br/><span style='color:gray;font-size:small'>" + tr("Any whitespace character sequence (includes tabs and line breaks)") + "</span>",
".+<br/><span style='color:gray;font-size:small'>" + tr("Any number of any characters except line break") + "</span>",
"[\\S\\s]+<br/><span style='color:gray;font-size:small'>" + tr("Any number of any characters including line break") + "</span>",
"[a-z]+<br/><span style='color:gray;font-size:small'>" + tr("Any lowercase character sequence") + "</span>",
"[0-9]+<br/><span style='color:gray;font-size:small'>" + tr("Any non digit sequence") + "</span>",

"[^0-9]+<br/><span style='color:gray;font-size:small'>" + tr("Any non digit sequence") + "</span>",

"Your user name is: [^\\s]+<br/><span style='color:gray;font-size:small'>" + tr("'Your user name is: ' string than any number of non whitespace character") + "</span>",
"Your user name is: ([^\\s]+)<br/><span style='color:gray;font-size:small'>" + tr("Save name into GROUP1 variable by using group") + "</span>",
"href=\"([^\"]+)\"<br/><span style='color:gray;font-size:small'>" + tr("Extract link from html a tag") + "</span>"
],

     help: 
{
    description: tr("Regular expression. Regular expressions are applied in multiline mode, if you want to match any character including line break use following expression [\\S\\s]+. Dot .+ captures any character except line break."), examples:
    [
        {
            code:"\\d+",description:tr("Any digit sequence")
        },
        {
            code:"\\w+",description:tr("Any word character sequence")
        },
        {
            code:"\\s+",description:tr("Any whitespace character sequence (includes tabs and line breaks)")
        },
        {
            code:".+",description:tr("Any number of any characters except line break")
        },
        {
            code:"[\\S\\s]+",description:tr("Any number of any characters including line break")
        },
        {
            code:"[a-z]+",description:tr("Any lowercase character sequence")
        },
        {
            code:"[0-9]+",description:tr("Any digit sequence")
        },
        {
            code:"[^0-9]+",description:tr("Any non digit sequence")
        },
        {
            code:"Your user name is: [^\\s]+",description:tr("'Your user name is: ' string than any number of non whitespace character")
        },
        {
            code:"Your user name is: ([^\\s]+)",description:tr("Save name into GROUP1 variable by using group")
        },
        {
            code:"href=\"([^\"]+)\"",description:tr("Extract link from html a tag")
        }
    ]
}}) %>
    <%= _.template($('#variable_constructor').html())({id:"Result", description:tr("Match list"), default_variable: "SCAN_RESULT_LIST", help: 
{
    description: tr("This variable will contain list with all matches. If group with name 'result' is present in regular expression, then list will have content of 'result' groups instead of whole matches. See task description for examples.")
}}) %>
    
</div>
    <div class="tooltipinternal">
          <div class="tr tooltip-paragraph-first-fold">Execute regular expression, save all matches into variable with list type.</div>
          <div class="tooltip-paragraph-fold"><span class="tr">Regular expression is convenient mechanism to process strings. It helps to search for string parts, split string, etc</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://regexone.com/');return false">tutorial</a>, <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://www.rexegg.com/regex-quickstart.html');return false">manual</a> ). </div>
          <div class="tr tooltip-paragraph-fold">You could think of regexp as some kind of mask or template, which string must match. Literally regular expression could say: 'Search in a text to find a word character sequence followed by @ symbol followed by any word character or dot character.', in regular expression language it would be \w+@[a-zA-Z\.]+ and it is very simple regexp to search for mailbox.</div>

          <div class="tr tooltip-paragraph-fold">Variable specified in 'Match list' parameter will be filled with a list, which contains every found match.</div>
          <div class="tooltip-paragraph-fold"><span class="tr">For example, if string is</span> <span style="color:black">abc 123 xyz 456</span> <span class="tr">and regexp is</span> <span style="color:black">\d+</span> <span class="tr">then it will extract all numbers found in a text, and resulting list will be</span> <span style="color:black">["123", "456"]</span></div>

              <div class="tooltip-paragraph-fold"><span class="tr">Each result list item will contain whole match, if you want to capture only part, put it in the group with name</span> <span style="color:black">result</span> <span class="tr">For example</span>, <span style="color:black">(?P&lt;result&gt;\d+)</span>.</div>

        <div class="tooltip-paragraph-fold">
            <span class="tr">If line is</span> 
            <span style="color:black">-John 100-, -Jack 200-</span> 
            <span class="tr">and regexp is</span> 
            <span style="color:black">(\w+) (?P&lt;result&gt;\d+)</span>, 
            <span class="tr">than result will contain list with 2 numbers</span>.
            <span class="tr">If regexp is</span> 
            <span style="color:black">(?P&lt;result&gt;\w+) (\d+)</span>, 
            <span class="tr">than result will contain list with 2 names</span>.
        </div>

          <div class="tr tooltip-paragraph-fold">Processing html is much easier and faster with 'Xpath' module.</div>
          <div class="tr tooltip-paragraph-fold">This action searches for all results, that matches regexp, for example it could search for all numbers in text. If you want to find only first string that matches regexp, i.e. first number, you should use 'First match' action.</div>
          <div class="tooltip-paragraph-last-fold"><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://bablosoft.github.io/RegexpConstructor/'); return false;"><span class="tr">Regular Expression Constructor</span></a> <span class="tr">can help you to create regexp.</span></div>
    </div>

<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="RegexpMatch"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Value", description:tr("String To Apply Regexp"), default_selector: "string", disable_int:true, help: 
{
    description: tr("This value is a target for regular expression. Could be any string.")
}}) %>
    <%= _.template($('#input_constructor').html())({id:"Regexp", description:tr("Regular Expression"), default_selector: "string", disable_int:true,variants: [

"\\d+<br/><span style='color:gray;font-size:small'>" + tr("Any digit sequence") + "</span>",
"\\w+<br/><span style='color:gray;font-size:small'>" + tr("Any word character sequence") + "</span>",
"\\s+<br/><span style='color:gray;font-size:small'>" + tr("Any whitespace character sequence (includes tabs and line breaks)") + "</span>",
".+<br/><span style='color:gray;font-size:small'>" + tr("Any number of any characters except line break") + "</span>",
"[\\S\\s]+<br/><span style='color:gray;font-size:small'>" + tr("Any number of any characters including line break") + "</span>",
"[a-z]+<br/><span style='color:gray;font-size:small'>" + tr("Any lowercase character sequence") + "</span>",
"[0-9]+<br/><span style='color:gray;font-size:small'>" + tr("Any non digit sequence") + "</span>",

"[^0-9]+<br/><span style='color:gray;font-size:small'>" + tr("Any non digit sequence") + "</span>",

"Your user name is: [^\\s]+<br/><span style='color:gray;font-size:small'>" + tr("'Your user name is: ' string than any number of non whitespace character") + "</span>",
"Your user name is: ([^\\s]+)<br/><span style='color:gray;font-size:small'>" + tr("Save name into GROUP1 variable by using group") + "</span>",
"href=\"([^\"]+)\"<br/><span style='color:gray;font-size:small'>" + tr("Extract link from html a tag") + "</span>"
],

     help: 
{
    description: tr("Regular expression. Regular expressions are applied in multiline mode, if you want to match any character including line break use following expression [\\S\\s]+. Dot .+ captures any character except line break."), examples:
    [
        {
            code:"\\d+",description:tr("Any digit sequence")
        },
        {
            code:"\\w+",description:tr("Any word character sequence")
        },
        {
            code:"\\s+",description:tr("Any whitespace character sequence (includes tabs and line breaks)")
        },
        {
            code:".+",description:tr("Any number of any characters except line break")
        },
        {
            code:"[\\S\\s]+",description:tr("Any number of any characters including line break")
        },
        {
            code:"[a-z]+",description:tr("Any lowercase character sequence")
        },
        {
            code:"[0-9]+",description:tr("Any digit sequence")
        },
        {
            code:"[^0-9]+",description:tr("Any non digit sequence")
        },
        {
            code:"Your user name is: [^\\s]+",description:tr("'Your user name is: ' string than any number of non whitespace character")
        },
        {
            code:"Your user name is: ([^\\s]+)",description:tr("Save name into GROUP1 variable by using group")
        },
        {
            code:"href=\"([^\"]+)\"",description:tr("Extract link from html a tag")
        }
    ]
}}) %>
    <%= _.template($('#variable_constructor').html())({id:"Result", description:tr("If string matches"), default_variable: "STRING_MATCHES", help: 
{
	description: tr("This variable will have true or false value depending if string matches regular expression.")
}}) %>
</div>
<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Test if string matches regular expression, return result into variable.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Regular expression is convenient mechanism to process strings. It helps to search for string parts, split string, etc</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://regexone.com/');return false">tutorial</a>, <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://www.rexegg.com/regex-quickstart.html');return false">manual</a> ). </div>
      <div class="tr tooltip-paragraph-fold">You could think of regexp as some kind of mask or template, which string must match. Literally regular expression could say: 'Search in a text to find a word character sequence followed by @ symbol followed by any word character or dot character.', in regular expression language it would be \w+@[a-zA-Z\.]+ and it is very simple regexp to search for mailbox.</div>

      <div class="tr tooltip-paragraph-fold">Variable specified in 'If string matches' parameter will have true or false value depending if string matches regular expression.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">For example, if string is</span> <span style="color:black">test string</span> <span class="tr">and regexp is</span> <span style="color:black">[a-z]</span> <span class="tr">then this action will return true, because string contains lowercase character, but regexp </span> <span style="color:black">[A-Z]</span> <span class="tr">will return false, because string doesn't contain any uppercase character</span>.</div>


      <div class="tr tooltip-paragraph-fold">Processing html is much easier and faster with 'Xpath' module.</div>
      <div class="tooltip-paragraph-last-fold"><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://bablosoft.github.io/RegexpConstructor/'); return false;"><span class="tr">Regular Expression Constructor</span></a> <span class="tr">can help you to create regexp.</span></div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="RegexpSplit"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Value", description:tr("String To Apply Regexp"), default_selector: "string", disable_int:true, help: 
{
    description: tr("This value is a target for regular expression. Could be any string.")
}}) %>
    <%= _.template($('#input_constructor').html())({id:"Regexp", description:tr("Separator Regular Expression"), default_selector: "string", disable_int:true,variants: [

"\\d+<br/><span style='color:gray;font-size:small'>" + tr("Any digit sequence") + "</span>",
"\\w+<br/><span style='color:gray;font-size:small'>" + tr("Any word character sequence") + "</span>",
"\\s+<br/><span style='color:gray;font-size:small'>" + tr("Any whitespace character sequence (includes tabs and line breaks)") + "</span>",
".+<br/><span style='color:gray;font-size:small'>" + tr("Any number of any characters except line break") + "</span>",
"[\\S\\s]+<br/><span style='color:gray;font-size:small'>" + tr("Any number of any characters including line break") + "</span>",
"[a-z]+<br/><span style='color:gray;font-size:small'>" + tr("Any lowercase character sequence") + "</span>",
"[0-9]+<br/><span style='color:gray;font-size:small'>" + tr("Any non digit sequence") + "</span>",

"[^0-9]+<br/><span style='color:gray;font-size:small'>" + tr("Any non digit sequence") + "</span>",

"Your user name is: [^\\s]+<br/><span style='color:gray;font-size:small'>" + tr("'Your user name is: ' string than any number of non whitespace character") + "</span>",
"Your user name is: ([^\\s]+)<br/><span style='color:gray;font-size:small'>" + tr("Save name into GROUP1 variable by using group") + "</span>",
"href=\"([^\"]+)\"<br/><span style='color:gray;font-size:small'>" + tr("Extract link from html a tag") + "</span>"
],

     help: 
{
    description: tr("Regular expression. Regular expressions are applied in multiline mode, if you want to match any character including line break use following expression [\\S\\s]+. Dot .+ captures any character except line break."), examples:
    [
        {
            code:"\\d+",description:tr("Any digit sequence")
        },
        {
            code:"\\w+",description:tr("Any word character sequence")
        },
        {
            code:"\\s+",description:tr("Any whitespace character sequence (includes tabs and line breaks)")
        },
        {
            code:".+",description:tr("Any number of any characters except line break")
        },
        {
            code:"[\\S\\s]+",description:tr("Any number of any characters including line break")
        },
        {
            code:"[a-z]+",description:tr("Any lowercase character sequence")
        },
        {
            code:"[0-9]+",description:tr("Any digit sequence")
        },
        {
            code:"[^0-9]+",description:tr("Any non digit sequence")
        },
        {
            code:"Your user name is: [^\\s]+",description:tr("'Your user name is: ' string than any number of non whitespace character")
        },
        {
            code:"Your user name is: ([^\\s]+)",description:tr("Save name into GROUP1 variable by using group")
        },
        {
            code:"href=\"([^\"]+)\"",description:tr("Extract link from html a tag")
        }
    ]
}}) %>
    <%= _.template($('#variable_constructor').html())({id:"Result", description:tr("String parts"), default_variable: "LIST_FROM_STRING", help: 
{
    description: tr("This variable will contain list with all string parts. See task description for examples.")
}}) %>
    
</div>

<div class="tooltipinternal">
          <div class="tr tooltip-paragraph-first-fold">Split text with regular expression.</div>
          <div class="tooltip-paragraph-fold"><span class="tr">Regular expression is convenient mechanism to process strings. It helps to search for string parts, split string, etc</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://regexone.com/');return false">tutorial</a>, <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://www.rexegg.com/regex-quickstart.html');return false">manual</a> ). </div>
          <div class="tr tooltip-paragraph-fold">You could think of regexp as some kind of mask or template, which string must match. Literally regular expression could say: 'Search in a text to find a word character sequence followed by @ symbol followed by any word character or dot character.', in regular expression language it would be \w+@[a-zA-Z\.]+ and it is very simple regexp to search for mailbox.</div>
		  
		  <div class="tooltip-paragraph-fold">
		  	<span class="tr">This action uses regexp to split string. For example, if string is</span>
		  	<span style="color:black">word1,word2;word3|word4</span>
		  	<span class="tr">and regexp is</span>
		  	<span style="color:black">[,;|]</span>
            <span class="tr">than result will contain all words ["word1", "word2", "word3", "word4"]</span>.
		  </div>

		  <div class="tr tooltip-paragraph-fold">Previous example splits string by one of following symbols: , or ; or |</div>
		  <div class="tr tooltip-paragraph-fold">Regular expression for splitting may be more complex and contain more symbols. This mechanism is more powerfull than splitting with static string.</div>

          
          <div class="tr tooltip-paragraph-fold">Variable specified in 'String parts' parameter will be filled with a list, which contains every string part of splitted string.</div>


          <div class="tr tooltip-paragraph-fold">Processing html is much easier and faster with 'Xpath' module.</div>


          <div class="tooltip-paragraph-last-fold"><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://bablosoft.github.io/RegexpConstructor/'); return false;"><span class="tr">Regular Expression Constructor</span></a> <span class="tr">can help you to create regexp.</span></div>
    </div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="RegexpReplace"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Value", description:tr("String To Apply Regexp"), default_selector: "string", disable_int:true, help: 
{
    description: tr("This value is a target for regular expression. Could be any string.")
}}) %>
    <%= _.template($('#input_constructor').html())({id:"Regexp", description:tr("Regular Expression"), default_selector: "string", disable_int:true,variants: [

"\\d+<br/><span style='color:gray;font-size:small'>" + tr("Any digit sequence") + "</span>",
"\\w+<br/><span style='color:gray;font-size:small'>" + tr("Any word character sequence") + "</span>",
"\\s+<br/><span style='color:gray;font-size:small'>" + tr("Any whitespace character sequence (includes tabs and line breaks)") + "</span>",
".+<br/><span style='color:gray;font-size:small'>" + tr("Any number of any characters except line break") + "</span>",
"[\\S\\s]+<br/><span style='color:gray;font-size:small'>" + tr("Any number of any characters including line break") + "</span>",
"[a-z]+<br/><span style='color:gray;font-size:small'>" + tr("Any lowercase character sequence") + "</span>",
"[0-9]+<br/><span style='color:gray;font-size:small'>" + tr("Any non digit sequence") + "</span>",

"[^0-9]+<br/><span style='color:gray;font-size:small'>" + tr("Any non digit sequence") + "</span>",

"Your user name is: [^\\s]+<br/><span style='color:gray;font-size:small'>" + tr("'Your user name is: ' string than any number of non whitespace character") + "</span>",
"Your user name is: ([^\\s]+)<br/><span style='color:gray;font-size:small'>" + tr("Save name into GROUP1 variable by using group") + "</span>",
"href=\"([^\"]+)\"<br/><span style='color:gray;font-size:small'>" + tr("Extract link from html a tag") + "</span>"
],

     help: 
{
    description: tr("Regular expression. Can contain groups. Regular expressions are applied in multiline mode, if you want to match any character including line break use following expression [\\S\\s]+. Dot .+ captures any character except line break."), examples:
    [
        {
            code:"\\d+",description:tr("Any digit sequence")
        },
        {
            code:"\\w+",description:tr("Any word character sequence")
        },
        {
            code:"\\s+",description:tr("Any whitespace character sequence (includes tabs and line breaks)")
        },
        {
            code:".+",description:tr("Any number of any characters except line break")
        },
        {
            code:"[\\S\\s]+",description:tr("Any number of any characters including line break")
        },
        {
            code:"[a-z]+",description:tr("Any lowercase character sequence")
        },
        {
            code:"[0-9]+",description:tr("Any digit sequence")
        },
        {
            code:"[^0-9]+",description:tr("Any non digit sequence")
        },
        {
            code:"Your user name is: [^\\s]+",description:tr("'Your user name is: ' string than any number of non whitespace character")
        },
        {
            code:"Your user name is: ([^\\s]+)",description:tr("Save name into GROUP1 variable by using group")
        },
        {
            code:"href=\"([^\"]+)\"",description:tr("Extract link from html a tag")
        }
    ]
}}) %>
    <%= _.template($('#input_constructor').html())({id:"ReplaceWith", description:tr("Replace with"), default_selector: "string", disable_int:true, help: 
{
	description: tr("This parameter is a string. It works like this - regexp is applied to target string, all matches are replaced with this string. It also can contain special strings: \\1, \\2, \\3, etc. \\1 will be replaced with first group for current match, \\2 will be raplced with second group and so on. See task description for example.")
}}) %>
    <%= _.template($('#variable_constructor').html())({id:"Result", description:tr("Result"), default_variable: "REPLACE_RESULT_STRING", help: 
{
	description: tr("This variable will hold resulting string after replacement.")
}}) %>
</div>
<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Execute regular expression, replace all matches with target string.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Regular expression is convenient mechanism to process strings. It helps to search for string parts, split string, etc</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://regexone.com/');return false">tutorial</a>, <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://www.rexegg.com/regex-quickstart.html');return false">manual</a> ). </div>
      <div class="tr tooltip-paragraph-fold">You could think of regexp as some kind of mask or template, which string must match. Literally regular expression could say: 'Search in a text to find a word character sequence followed by @ symbol followed by any word character or dot character.', in regular expression language it would be \w+@[a-zA-Z\.]+ and it is very simple regexp to search for mailbox.</div>

      <div class="tr tooltip-paragraph-fold">This action works like this - regexp is applied to target string, all matches are replaced with string from 'Replace with' parameter.</div>

      <div class="tooltip-paragraph-fold">
        <span class="tr">For example, if line is</span> 
        <span style="color:black">Random text login1@yahoo.com login2@outlook.com</span> 
        <span class="tr">and regexp is</span> 
        <span style="color:black">@[^\.]*\.[\s]*</span>
        <span class="tr">(this will match @ with mail domain)</span>
        <span class="tr">and replacement string is</span>
        <span style="color:black">@gmail.com</span>,  
        <span class="tr">then result will be</span>
        <span style="color:black">Random text login1@gmail.com login2@gmail.com</span>
      </div>

      <div class="tr tooltip-paragraph-fold">Variable specified in 'Result' parameter will have a string with result.</div>

      <div class="tr tooltip-paragraph-fold">Replacement string may contain parts of match by using special special strings: \1, \2, \3, etc. \1 will be replaced with first group for current match, \2 will be replaced with second group and so on.</div>

      <div class="tooltip-paragraph-fold">
        <span class="tr">Another example, if line is</span> 
        <span style="color:black">word1 test:111 word2 word3 test:222</span> 
        <span class="tr">and regexp is</span> 
        <span style="color:black">test:(\d+)</span>
        <span class="tr">(note that regular expression has one group)</span>
        <span class="tr">and replacement string is</span>
        <span style="color:black">\1</span>,  
        <span class="tr">then result will be</span>
        <span style="color:black">word1 111 word2 word3 222</span>
        <span class="tr">(\1 is replaced with first group)</span>.

      </div>


      <div class="tr tooltip-paragraph-fold">Processing html is much easier and faster with 'Xpath' module.</div>
      <div class="tooltip-paragraph-last-fold"><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://bablosoft.github.io/RegexpConstructor/'); return false;"><span class="tr">Regular Expression Constructor</span></a> <span class="tr">can help you to create regexp.</span></div>
</div>

<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="CreateResource"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Name", description:tr("Resource name"), default_selector: "string", disable_int:true, disable_expression:true, help: 
{
	description: tr("Resource name is used to identify it. Could be any string.")
}}) %>
    <%= _.template($('#input_constructor').html())({id:"SuccessNumber", description:tr("Success Usage"), default_selector: "int", disable_string:true, value_number:1, help: 
{
	description: tr("Maximum number of success usages of current resource. Usage of resource is considered successful if thread, which used it is ended with success. For example, if resource holds proxies and script creates accounts, then this parameter indicates how many accounts may be registered for with one proxy.")
}}) %>
    <%= _.template($('#input_constructor').html())({id:"FailNumber", description:tr("Fail Usage"), default_selector: "int", disable_string:true, value_number:1, help: 
{
	description: tr("Maximum number of fail usages of current resource. Usage of resource is considered as fail if thread, which used it is ended with failure. For example, if resource holds proxies and script creates accounts, then this parameter indicates how many bad retries is allowed for one proxy.")
}}) %>
	<%= _.template($('#input_constructor').html())({id:"SimultaneousUsage", description:tr("Simultaneous Usage"), default_selector: "int", disable_string:true, value_number:1, help: 
{
	description: tr("Maximum simultaneous usages. For example, if resource holds proxies, then this parameter indicates how many times single proxy may be used simultaneously.")
}}) %>
	<%= _.template($('#input_constructor').html())({id:"Interval", description:tr("Interval Between Usage"), default_selector: "int", disable_string:true, value_number:5000, help: 
{
	description: tr("Interval between usage in milliseconds."), examples:
	[
		{
			code:"0",description:tr("After resource item is released, it may be acquired again instantly.")
		},
		{
			code:"5000",description:tr("There should be at least 5 seconds gap between usages of every resource item.")
		}
	]
}}) %>

	<%= _.template($('#checkbox').html())({id: "Check", title: tr("Greedy Usage Algorithm")}) %>
	<%= _.template($('#checkbox').html())({id: "Check2", title: tr("Wait For Resource")}) %>

</div>
<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Create new resource.</div>
      <div class="tr tooltip-paragraph-fold">Each resource holds container for data, for example, lines from file. Unlike lists, resource system helps to distribute data across threads and also handles thread concurrency for that data.</div>
      <div class="tr tooltip-paragraph-fold">Usually resources are created from user interface (with '+ Create New Resource' button), but also may be created with this action.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">It is strongly recommended not to use this action in code which runs in several threads, because each thread will create a new resource and that is probably not your intention. Use it in OnApplicationStart function instead. This function is executed only once for whole script lifetime before any other function and thus is the best place to create resource</span> (
			<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=onapplicationstartcreateresource.png');return false">screen</a> ).

      </div>
      <div class="tr tooltip-paragraph-fold">After resource is created, you probably want to fill it with data, do it with 'Add Element' action.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">After custom resource is created and filled with data it can be used as any other resource in any field and in any thread</span>  (
			<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=onapplicationstartuseresource.png');return false">screen</a> ).
			</div>
		<div class="tr tooltip-paragraph-fold">Typical example of using this action would be creation of resource(in OnApplicationStart), which takes data from custom place(for example, from rare database engine) or in custom format or both.</div>
      <div class="tr tooltip-paragraph-fold">'Wait For Resource' is very important setting, it determines behaviour in case, when resource data list is empty. If prameter is set, then action that acquires resource will wait until data will be added, otherwise action will fail instantly.</div>
      <div class="tr tooltip-paragraph-last-fold">When 'Greedy Usage Algorithm' is set, resource system will try to acquire same line again and again until that line will exhaust all success or fail usages, only after that next line will be used.</div>
      
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true, name: tr("Create Resource")}) %>
</script><script type="text/template" id="DeleteCurrentElement"><div class="container-fluid">
    <%= _.template($('#resource_constructor').html())({id:"ResourceName", description:tr("Resource name"), help: 
{
	description: tr("Resource name, for which last acquired item will be deleted.")
}}) %>
    <%= _.template($('#checkbox').html())({id: "Check", checked: true, title: tr("Delete from file/database instantly")}) %>

</div>

<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Delete resource. If resource type is 'LinesFromFile', current line will be deleted from file, if type is 'Database', current record will be deleted from database, etc.</div>
      <div class="tr tooltip-paragraph-fold">Current line is line which was acquired last by current thread. For example, if you have resource 'Proxy' and that proxy appears banned on target site, then you can use this action with resource name 'Proxy'. Doing that will delete proxy from file and will never use that proxy again during whole script run.</div>
      <div class="tr tooltip-paragraph-fold">By default lines from file deletion is postponed, the reaseon for this is hard drive usage optimisation. But if you check 'Delete from file/database instantly', file will be cleared instantly.</div>
      <div class="tooltip-paragraph-last-fold"><span class="tr">Normally you don't need to call that action manually, resources may be cleared automatically, if 'Read and delete lines after use' setting is selected during resource creation.</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=deleteresourceafteruse.png');return false">screen</a> ). <span class="tr">Resource will be cleared automatically if successful or fail number of usage will exceed. For example, if 'Use each file one time' is set, resource item will be deleted automatically after single usage</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=singleusageres.png');return false">screen</a> ). </div>
      
</div>


<%= _.template($('#back').html())({action:"executeandadd", visible:true, name: tr("Delete Current Element")}) %>
</script><script type="text/template" id="ResourceAddElement"><div class="container-fluid">
    <%= _.template($('#resource_constructor').html())({id:"ResourceName", description:tr("Resource name"), help: 
{
	description: tr("Resource name in which new item will be inserted.")
}}) %>
    <%= _.template($('#input_constructor').html())({id:"Data", description:tr("Data"), default_selector: "string", disable_int:true, help: 
{
	description: tr("New item value, could be any string.")
}}) %>

    <%= _.template($('#checkbox').html())({id: "Check", title: tr("Add to file/database instantly"), checked: true}) %>
    <%= _.template($('#checkbox').html())({id: "Check2", title: tr("Only write to file/database")}) %>

    
</div>
<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Add a new item into resource. For example, add new line into file, or new record into database.</div>
      <div class="tr tooltip-paragraph-fold">Each resource holds container for data, for example, lines from file. Unlike lists, resource system helps to distribute data across threads and also handles thread concurrency for that data.</div>
      <div class="tr tooltip-paragraph-fold">Usually resources are created from user interface (with '+ Create New Resource' button), but also may be created with 'Create resource' action.</div>
      <div class="tr tooltip-paragraph-fold">With this action, you can add data into any type of resource. This action doesn't have affect on some resource types, like 'FixedString' or 'FixedInteger'. Normally it is used to add lines into file.</div>
      <div class="tr tooltip-paragraph-fold">By default lines from file adding is postponed, the reason for this is hard drive usage optimisation. But if you check 'Add to file/database instantly', file will be updated instantly.</div>
      <div class="tr tooltip-paragraph-fold">If 'Only write to file/database' is selected, then container with list of data inside resources won't be updated, only actual resource source will be change, like file or database.</div>
      <div class="tooltip-paragraph-last-fold"><span class="tr">If resource is created in writeonly mode, this action can add data inside it. In that case, it would write string from 'Data' parameter into file selected by user during 'Select resources' stage on script start</span> ( 
<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=adddatatofile.png');return false">add data to file</a>, <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=writeonlymode.png');return false">write only mode</a>, <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=resourceselection.png');return false">resource selection</a>).
      </div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true, name: tr("Add Element")}) %>
</script><script type="text/template" id="GetResouceLocation"><div class="container-fluid">
    <%= _.template($('#resource_constructor').html())({id:"ResourceName", description:tr("Resource name"), help: 
{
	description: tr("Resource name for which location will be obtained.")
}}) %>
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "RESOURCE_LOCATION", help: 
{
	description: tr("String which will hold resource location. Resource location is filename for 'LinesFromFile' resource, url for 'LinesFromUrl' and directory location for 'FilesFromDirectory' resource type.")
}}) %>
    
</div>

<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get resource loaction. Resource location is filename for LinesFromFile resource, url for LinesFromUrl and directory location for FilesFromDirectory resource type.</div>
      <div class="tr tooltip-paragraph-fold">Use that action to obtain path to file/folder selected by user.</div>
      <div class="tr tooltip-paragraph-fold">That file or folder can be manipulated later with 'Filesystem' module.</div>
      <div class="tooltip-paragraph-last-fold"><span class="tr">Typical example of using this action would be to delete file on script startup. To do that call this action in 'OnApplicationStart' function and send result into 'Remove File/Folder' action</span>
 ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=deletefilefromresource.png');return false">screen</a> ).
		
      </div>
</div>


<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="ResourceToArray"><div class="container-fluid">
    <%= _.template($('#resource_constructor').html())({id:"ResourceName", description:tr("Resource name"), help: 
{
	description: tr("Resource name, which will be copied to list")
}}) %>
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("List To Save"), default_variable: "RESOURCE_AS_LIST", help: 
{
	description: tr("This variable will contain list with all data from selected resource."), examples:
	[
		{
			code:"[\"line1\",\"line2\",\"line3\"]"
		}
	]
}}) %>
    
</div>

<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Copy resource data into list.</div>
      <div class="tr tooltip-paragraph-fold">Result has a list type, so it can be manipulated with 'List' module or with javascript.</div>
      <div class="tr tooltip-paragraph-fold">It is very important to understand, that changing resulting list won't affect resource itself.</div>
      <div class="tooltip-paragraph-last-fold"><span class="tr">Typical example of usage would be to copy resource into list and to iterate over each list element</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=iterateresource.png');return false">screen</a> ).</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="ArrayToResource"><div class="container-fluid">
    <%= _.template($('#resource_constructor').html())({id:"ResourceName", description:tr("Resource name"), help: 
{
	description: tr("Resource name which data will be replaced with data from list.")
}}) %>
    
    <%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable with list"), default_variable: "", help: 
{
  description: tr("This list will be converted to resource"), examples:
  [
    {
      code:"[]",description:tr("Take data from empty list i.e. clear resource.")
    },
    {
      code:"[\"line1\",\"line2\",\"line3\"]",description:tr("Set new resource data")
    }
  ]
}}) %>

   
</div>
<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Replace resource data with data from list.</div>
      <div class="tr tooltip-paragraph-fold">All previous data will be lost and all resource item state(successes and failures) will be lost.</div>
      <div class="tr tooltip-paragraph-fold">Using action with empty list will clear resource.</div>
      <div class="tr tooltip-paragraph-fold">Each resource holds container for data, for example, lines from file. Unlike lists, resource system helps to distribute data across threads and also handles thread concurrency for that data.</div>
      <div class="tr tooltip-paragraph-fold">Usually resources are created from user interface (with '+ Create New Resource' button), but also may be created with 'Create resource' action.</div>
      <div class="tr tooltip-paragraph-last-fold">This action doesn't have affect on some resource types, like 'FixedString' or 'FixedInteger'.</div>

      
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true, name: tr("Add Element")}) %>
</script><script type="text/template" id="ResourceReload"><div class="container-fluid">
    <%= _.template($('#resource_constructor').html())({id:"ResourceName", description:tr("Resource name"), help: 
{
	description: tr("Resource name, which will be reloaded")
}}) %>
</div>

<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Reload lines from file or rows from database.</div>
      <div class="tr tooltip-paragraph-fold">Resource data will be completely recreated. All data about resource items state(successes and failures) will be lost. If some resource items was deleted, then this information will be lost too.</div>
      <div class="tr tooltip-paragraph-last-fold">This action loads heavily cpu and hard drive, so it is not recomended to use it multithreaded mode.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true, name: tr("Delete Current Element")}) %>
</script><script type="text/template" id="ResourceLength"><div class="container-fluid">
    <%= _.template($('#resource_constructor').html())({id:"ResourceName", description:tr("Resource name"), help: 
{
	description: tr("Resource name to count items")
}}) %>
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "RESOURCE_LENGTH", help: 
{
	description: tr("This variable will contain number of items in selected resource")
}}) %>
    
</div>

<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Get number of items in resource.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="getthreadnumber"><div class="container-fluid">
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save thread index"), default_variable: "THREAD_INDEX"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the number of the current working thread.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="script_stats_success_number"><div class="container-fluid">
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "SUCCESS_NUMBER"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the number of successful executions of the current script.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="script_stats_fail_number"><div class="container-fluid">
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "FAIL_NUMBER"}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get the number of unsuccessful executions of the current script.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="script_stats_is_record"><div class="container-fluid">
    <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "IS_RECORD", help: {description: tr("This variable will be <code>true</code> or <code>false</code> depending on whether the script is executed in record mode."), examples:[{code:"true",description:tr("The script is executed in record mode.")},{code:"false",description:tr("The script is executed in run mode.")}]} }) %>
</div>
<div class="tooltipinternal">

    <div class="tr tooltip-paragraph-first-fold">Check if the script is executed in record mode.</div>
    <div class="tooltip-paragraph-last-fold"><span class="tr">When launching a script, you can select either record mode or run mode.</span> (<a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?t=1738149645&w=499&h=155&tok=3d0cd4&media=browserautomationstudio_2025-01-29_13-07-12.png');return false">screen</a>).</div>
    <div class="tooltip-paragraph-last-fold tr">Compiled scripts are always executed in run mode.</div>
    <div class="tr tooltip-paragraph-last-fold">This action will return <code>true</code> or <code>false</code> depending on whether the script is executed in record mode. This result may be used with <a href="#!/if">If</a> action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="smtp_set_settings"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({id:"Host", description:tr("SMTP Server Host"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#input_constructor').html())({id:"Port", description:tr("Port"), default_selector: "int", disable_string:true, value_number: 465, variants: ["465","587","25"]}) %>
	<%= _.template($('#input_constructor').html())({id:"Username", description:tr("Username. Can be blank"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#input_constructor').html())({id:"Password", description:tr("Password. Can be blank"), default_selector: "string", disable_int:true}) %>
  
  <%= _.template($('#combobox').html())({id: "Select", title: tr("Encryption"), items: [
    {value: "ssl", "name": "ssl", selected: true},
    {value: "tls", "name": "tls"},
    {value: "starttls", "name": "starttls"},
    {value: "none", "name": "none"},
  ]
  }) %>
	
</div>
<div class="tooltipinternal">
   <div class="tr tooltip-paragraph-first-fold">Configure SMTP server access required to send email.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="smtp_set_proxy"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({id:"ProxyText", description:tr("Proxy String"), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"ProxyType", description:tr("Proxy Type"), default_selector: "string", disable_int:true, value_string: "http", variants: ["http","socks5","auto"]}) %>
    <%= _.template($('#input_constructor').html())({id:"ProxyLogin", description:tr("Proxy Login. Can be blank."), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"ProxyPassword", description:tr("Proxy password. Can be blank."), default_selector: "string", disable_int:true}) %>
</div>
<div class="tooltipinternal">
   <div class="tr tooltip-paragraph-first-fold">By default SMTP client works without proxy, this action sets proxy for SMTP client.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="smtp_send_mail"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({id:"MailFrom", description:tr("Mail From. Can be blank."), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#input_constructor').html())({id:"MailTo", description:tr("Mail To"), default_selector: "string", disable_int:true}) %>
	<%= _.template($('#input_constructor').html())({id:"CC", description:tr("CC. Can be blank."), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"Subject", description:tr("Mail Subject. Can be blank."), default_selector: "string", disable_int:true}) %>
    <%= _.template($('#input_constructor').html())({id:"MailBody", description:tr("Mail Body. Can be blank."), default_selector: "string", disable_int:true, disable_editor:true, disable_string:true, use_textarea:true, size: 8, disable_type_chooser:true,textarea_height:80}) %>

	<%= _.template($('#checkbox').html())({id: "Check", title: tr("Send as HTML")}) %>

	<%= _.template($('#input_constructor').html())({id:"Attachments", description:tr("Attachments. Can be blank."), default_selector: "string", disable_int:true}) %>
</div>
<div class="tooltipinternal">
   <div class="tr tooltip-paragraph-first-fold">Send an email message using the SMTP client. It must be configured with "SMTP settings" action preliminarily.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="smtp_enable_debug"><div class="container-fluid">
   <%= _.template($('#input_constructor').html())({id:"EnableDebug", description:tr("Enable debug"), default_selector: "string", disable_int:true, value_string: "enable", variants: ["enable","disable"]}) %>
</div>
<div class="tooltipinternal">
   <div class="tr tooltip-paragraph-first-fold">Enable debugging mode for sending emails.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="is_string"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"data", description: tr("Data"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The data that need to check out whether they is a string."),examples:[{code:tr("Just sample text"), description: tr("String")},{code:tr("Empty string"), description:tr("String")},{code:123, description: tr("Not string")},{code:"null", description: tr("Not string")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "IS_STRING", help: {description: tr("This variable will be true or false depending on whether the specified data is a string."), examples:[{code:"true",description:tr("The data is a string.")},{code:"false",description:tr("The data is not a string.")}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Check if the specified data is a string.</div>
	<div class="tr tooltip-paragraph-fold">This action will return true or false depending on whether the specified data is a string. This result may be used with "If" action.</div>
	<div class="tr tooltip-paragraph-last-fold">For example, if <code>"Test text"</code> is specified, then the action will return true, and if <code>123</code> or <code>true</code> is specified, then the action will return false.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="is_not_empty_string"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"data", description: tr("Data"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The data that need to check out whether they is not empty string."),examples:[{code:tr("Just sample text"), description: tr("Not empty string")},{code:'""', description: tr("Empty string")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "IS_NOT_EMPTY", help: {description: tr("This variable will be true or false depending on whether the specified data is not an empty string."), examples:[{code:"true",description:tr("Not empty string") + "."},{code:"false",description:tr("Empty string or not string.")}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Check if the specified data is not an empty string.</div>
	<div class="tr tooltip-paragraph-fold">This action will return true or false depending on whether the specified data is not an empty string. This result may be used with "If" action.</div>
	<div class="tr tooltip-paragraph-last-fold">For example, if <code>"Test text"</code> is specified, then the action will return true, and if <code>""</code> or <code>123</code> is specified, then the action will return false.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="to_string"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"data", description: tr("Data"), default_selector: "string", value_string: "", help: {description: tr("The data to be converted to a string."),examples:[{code:123,description:tr("Numbеr")},{code:true,description:tr("Boolean")},{code:"{\"text\":\"Test text\",\"num\":123}",description:tr("Object")},{code:new Date(),description:tr("Date")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "RESULT_STRING", help: {description: tr("Variable in which, after successful execution of the action, the string representation of the specified data will be written."),examples:[{code:"123"},{code:"true"},{code:"{\"text\":\"Test text\",\"num\":123}"},{code:new Date()}]}}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Convert the specified data to a string.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a string representation of the specified data.</div>
	<div class="tr tooltip-paragraph-fold">This action works with any type of data.</div>
	<div class="tr tooltip-paragraph-last-fold">For example, if <code>123</code> is specified, then the action will return <code>"123"</code>, and if <code>true</code> is specified, then the action will return <code>"true"</code>.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="to_number"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", value_string: "", help: {description: tr("The string to convert to a number."),examples:[{code:"123"},{code:"100,000"},{code:"1,456.578"}]} }) %>
<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
<%= _.template($('#input_constructor').html())({id:"decimals", description:tr("Number of decimal places"), default_selector: "int", disable_string:true, value_number: "", min_number:-1, max_number:20, help: {description: tr("Optional parameter.") + " " + tr("The number of decimal places to which the number will be rounded."),examples:[{code:4, description:156.6439},{code:2, description:21.78},{code:0, description:tr("Round to whole number")},{code:-1, description:tr("Do not round the number")},{code:tr("Empty string"), description:tr("Do not round the number")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"dec_point", description: tr("Decimal separator"), default_selector: "string", value_string: ".", help: {description: tr("Optional parameter.") + " " + tr("Separator between integer and decimal parts of a number."),examples:[{code:'"."', description:156.6439},{code:'","', description:"156,6439"},{code:tr("Empty string"), description:tr('"." - 156.6439')}]} }) %>
<%= _.template($('#input_constructor').html())({id:"thousands_sep", description: tr("Thousandth separator"), default_selector: "string", value_string: ",", help: {description: tr("Optional parameter.") + " " + tr("Separator between thousandths."),examples:[{code:'" "', description:"1 000 000.01"},{code:'","', description:"1,000,000.01"},{code:tr("Empty string"), description:tr('"," - 1,000,000.01')}]} }) %>
<%= _.template($('#block_end').html())() %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "RESULT_NUMBER", help: {description: tr("Variable in which, after successful execution of the action, the numeric representation of the specified string will be written."),examples:[{code:123},{code:100000},{code:1456.578}]}}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Convert the specified string to a number.</div>
	<div class="tr tooltip-paragraph-fold">This action will return the numeric representation of the specified string.</div>
	<div class="tr tooltip-paragraph-fold">For example, if <code>"123"</code> is specified, then the action will return <code>123</code>, and if <code>"123.45"</code> is specified, then the action will return <code>123.45</code>.</div>
	<div class="tr tooltip-paragraph-fold">The final number can be rounded off by specifying the "Number of decimal places" parameter located in the additional settings.</div>
	<div class="tr tooltip-paragraph-fold">This action can convert numbers in a non-standard format for this, you need to specify the "Decimal separator" and "Thousandth separator" parameters located in the additional settings.</div>
	<div class="tr tooltip-paragraph-last-fold">For example, the string <code>"1 967 567.3245"</code> will be converted to the number <code>1967567.3245</code> if a comma is specified in the "Decimal separator" parameter, and a space is specified in the "Thousandth separator" parameter.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="number_format"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"number", description: tr("Numbеr"), default_selector: "int", disable_string:true, value_number: "", min_number:-999999, max_number:999999, help: {description: tr("The number to format and convert to a string."),examples:[{code:123},{code:100000},{code:1456.578}]} }) %>
<%= _.template($('#input_constructor').html())({id:"decimals", description:tr("Number of decimal places") + ". " + tr("Can be blank"), default_selector: "int", disable_string:true, value_number: "", min_number:-1, max_number:20, help: {description: tr("Optional parameter.") + " " + tr("The number of decimal places to which the number will be rounded."),examples:[{code:4, description:156.6439},{code:2, description:21.78},{code:0, description:tr("Round to whole number")},{code:-1, description:tr("Do not round the number")},{code:tr("Empty string"), description:tr("Do not round the number")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"digits", description:tr("Minimum number of characters in the number") + ". " + tr("Can be blank"), default_selector: "int", disable_string:true, value_number: "", min_number:0, max_number:999999, help: {description: tr("Optional parameter.") + " " + tr("The minimum number of characters in a number. If the number of characters is less than the specified number, then zeros will be added to the place of missing characters before the number."),examples:[{code:4, description:"0321"},{code:2, description:"01"},{code:0, description:tr("Don't change the number of characters")},{code:tr("Empty string"), description:tr("Don't change the number of characters")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"dec_point", description: tr("Decimal separator") + ". " + tr("Can be blank"), default_selector: "string", value_string: ".", help: {description: tr("Optional parameter.") + " " + tr("Separator between integer and decimal parts of a number."),examples:[{code:'"."', description:156.6439},{code:'","', description:"156,6439"},{code:tr("Empty string"), description:tr('"." - 156.6439')}]} }) %>
<%= _.template($('#input_constructor').html())({id:"thousands_sep", description: tr("Thousandth separator") + ". " + tr("Can be blank"), default_selector: "string", value_string: ",", help: {description: tr("Optional parameter.") + " " + tr("Separator between thousandths."),examples:[{code:'" "', description:"1 000 000.01"},{code:'","', description:"1,000,000.01"},{code:tr("Empty string"), description:tr('"," - 1,000,000.01')}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "FORMATTED_NUMBER", help: {description: tr("Variable in which, after successful execution of the action, the formatted string representation of the specified number will be written."),examples:[{code:"123"},{code:"100,000"},{code:"1,456.578"}]}}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Format and convert the specified number to a string.</div>
	<div class="tr tooltip-paragraph-fold">This action can bring the number into a more readable form, for example, for further output to the log.</div>
	<div class="tr tooltip-paragraph-fold">Before formatting, the number can be rounded by specifying the "Number of decimal places" parameter.</div>
	<div class="tr tooltip-paragraph-fold">This action will return the formatted string representation of the specified number.</div>
	<div class="tr tooltip-paragraph-last-fold">For example, the number <code>1967567.3245</code> will be converted to the string <code>"1 967 567.3245"</code> if a comma is specified in the "Decimal separator" parameter, and a space is specified in the "Thousandth separator" parameter.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="count_substrings"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string from which to get the number of substrings."),examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"substring", description: tr("Substring"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Contiguous sequence of characters within a string."),examples:[{code:tr("sample")},{code:"text"},{code:"str"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "SUBSTRINGS_COUNT", help: {description: tr("Variable in which, after successful execution of the action, the number of substrings in the string will be written."), examples:[{code:5},{code:2},{code:0,description:tr("The substring is missing from the string.")}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get the number of substrings in the string.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a number equal to the number of substrings in the string.</div>
	<div class="tr tooltip-paragraph-last-fold">For example, if the string <code>"test text"</code> is specified and the substring <code>"te"</code> is specified, then the action will return 2, and if the string is <code>"Just example string"</code> and the substring <code>"example"</code>, then the action will return 1.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="get_substring"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string from which to get the substring."),examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"from", description:tr("From index") + ". " + tr("Can be blank"), default_selector: "int", disable_string:true, value_number: "", min_number:-999999, max_number:999999, help: {description: tr("The index of the character at which to start getting the substring.") + " " + tr("If negative, indicates an offset from the end of the string."),examples:[{code:1, description:tr("From the second character")},{code:0, description:tr("From the first character")},{code:-1, description:tr("From the last character")},{code:tr("Empty string"), description:tr("From the beginning of the string")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"to", description:tr("To index") + ". " + tr("Can be blank"), default_selector: "int", disable_string:true, value_number: "", min_number:-999999, max_number:999999, help: {description: tr("The index of the character at which the retrieval of the substring ends.") + " " + tr("If negative, indicates an offset from the end of the string."),examples:[{code:1, description:tr("To the second character")},{code:0, description:tr("To the first character")},{code:-1, description:tr("To the last character")},{code:tr("Empty string"), description:tr("To the end of the string")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "SUBSTRING", help: {description: tr("Variable in which, after successful execution of the action, the substring will be written."),examples:[{code:tr("sample")},{code:"text"},{code:"str"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get a substring from the string.</div>
	<div class="tr tooltip-paragraph-fold">This action will return the received substring.</div>
	<div class="tr tooltip-paragraph-fold">For example, to get the substring <code>"example"</code> from the string <code>"Just example string"</code>, you need to specify 5 in the "From index" parameter and specify 12 in the "To index" parameter.</div>
	<div class="tr tooltip-paragraph-fold">If the "From index" and "To index" parameters are not specified, the entire string will be received.</div>
	<div class="tr tooltip-paragraph-fold">If the "From index" parameter is specified and the "To index" parameter is not specified, all characters from the specified to the end of the string will be received.</div>
	<div class="tr tooltip-paragraph-fold">If the "From index" parameter is not specified and the "To index" parameter is specified, all characters from the first to the specified one will be received.</div>
	<div class="tr tooltip-paragraph-fold">If both parameters "From Index" and "To Index" are specified, all characters from specified to specified will be received.</div>
	<div class="tr tooltip-paragraph-last-fold">If the index is a negative number, then it is interpreted as the number of characters from the end of the string.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="get_substring_between"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string from which to get the substring."),examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"left", description: tr("Left substring") + ". " + tr("Can be blank"), default_selector: "string", value_string: "", help: {description: tr("The substring to the left of the substring to get."),examples:[{code:"("},{code:"&lt;a&gt;"},{code:"&lt;p&gt;"},{code:"&lt;span&gt;"},{code:tr("Empty string"), description:tr("From the beginning of the string")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"right", description: tr("Right substring") + ". " + tr("Can be blank"), default_selector: "string", value_string: "", help: {description: tr("The substring to the right of the substring to get."),examples:[{code:")"},{code:"&lt;/a&gt;"},{code:"&lt;/p&gt;"},{code:"&lt;/span&gt;"},{code:tr("Empty string"), description:tr("To the end of the string")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "SUBSTRING", help: {description: tr("Variable in which, after successful execution of the action, the substring will be written."),examples:[{code:tr("sample")},{code:"text"},{code:"str"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get a substring between two substrings.</div>
	<div class="tr tooltip-paragraph-fold">This action will return the received substring.</div>
	<div class="tr tooltip-paragraph-fold">For example, to get the substring <code>"Text title"</code> from the string <code>"&lt;h1&gt;Text title&lt;/h1&gt;"</code>, you need to specify <code>"&lt;h1&gt;"</code> in the "Left substring" parameter and specify <code>"&lt;/h1&gt;"</code> in the "Right substring" parameter.</div>
	<div class="tr tooltip-paragraph-fold">If the "Left substring" and "Right substring" parameters are not specified, the entire string will be received.</div>
	<div class="tr tooltip-paragraph-fold">If the "Left substring" parameter is specified and the "Right substring" parameter is not specified, all characters from the specified substring to the end of the string will be received.</div>
	<div class="tr tooltip-paragraph-fold">If the "Left substring" parameter is not specified and the "Right substring" parameter is specified, all characters from the first to the specified substring will be received.</div>
	<div class="tr tooltip-paragraph-last-fold">If both parameters "Left substring" and "Right substring" are specified, all characters from the specified substring to the specified substring will be received.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="remove_string_part"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string from which want to remove a part and/or add a new one."),examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"from", description:tr("From index") + ". " + tr("Can be blank"), default_selector: "int", disable_string:true, value_number: "", min_number:-999999, max_number:999999, help: {description: tr("The character index at which to start modifying the string.") + " " + tr("If negative, indicates an offset from the end of the string."),examples:[{code:1, description:tr("From the second character")},{code:0, description:tr("From the first character")},{code:-1, description:tr("From the last character")},{code:tr("Empty string"), description:tr("From the beginning of the string")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"count", description:tr("Number of characters to remove"), default_selector: "int", disable_string:true, value_number: 0, min_number:0, max_number:999999, help: {description: tr("The number of characters to be removed."),examples:[{code:4},{code:2},{code:0, description:tr("Don't remove characters")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"substring", description: tr("Insertable substring") + ". " + tr("Can be blank"), default_selector: "string", value_string: "", help: {description: tr("Optional parameter.") + " " + tr("The substring to be inserted instead of the removed part."),examples:[{code:tr("sample")},{code:"text"},{code:"str"},{code:tr("Empty string"), description:tr("Don't insert a substring")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "RESULT_STRING", help: {description: tr("Variable in which, after successful execution of the action, the final string will be written."), examples:[{code:tr("sample text")},{code:"New text"},{code:"Test string"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Remove part of the string and/or insert a new one.</div>
	<div class="tr tooltip-paragraph-fold">This action can either delete part of the string, or insert a new part, or all at the same time.</div>
	<div class="tr tooltip-paragraph-fold">This action will return the string resulting from all the manipulations.</div>
	<div class="tr tooltip-paragraph-fold">To only remove, you need to specify a value greater than zero in the "Number of characters to remove" parameter, and do not specify the "Insertable substring" parameter.</div>
	<div class="tr tooltip-paragraph-fold">For example, if is specified the string <code>"Test text"</code>, index is 0 and the number of characters is 5, then the action will return <code>"text"</code>.</div>
	<div class="tr tooltip-paragraph-fold">To insert only, you need to specify the "Insertable substring" parameter, and specify zero in the "Number of characters to remove" parameter.</div>
	<div class="tr tooltip-paragraph-fold">For example, if is specified the string <code>"Just string"</code>, index 5, number of characters 0 and substring <code>"example "</code>, then the action will return <code>"Just example string"</code>.</div>
	<div class="tr tooltip-paragraph-fold">To delete and insert, you need to specify a value greater than zero in the "Number of characters to remove" parameter, and specify the "Insertable substring" parameter.</div>
	<div class="tr tooltip-paragraph-fold">For example, if is specified the string <code>"Test not text"</code>, index 5, number of characters 3 and substring <code>"new"</code>, then the action will return <code>"Test new text"</code>.</div>
	<div class="tr tooltip-paragraph-last-fold">If you only need to insert a substring, then you can use the "Insert at" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="to_lower_case"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string to be converted to lowercase."),examples:[{code:tr("Just sample text")},{code:"Test Text"},{code:"STRING"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "LOWERCASE_STRING", help: {description: tr("Variable in which, after successful execution of the action, the converted string will be written."), examples:[{code:tr("just sample text")},{code:"test text"},{code:"string"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Convert all letters of the string to lowercase.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a string in which all letters will be lowercase, and the rest of the characters will remain unchanged.</div>
	<div class="tr tooltip-paragraph-fold">For example, the string <code>"TEST"</code> will be converted to the string <code>"test"</code>, and the string <code>"Example String"</code> will be converted to the string <code>"example string"</code>.</div>
	<div class="tr tooltip-paragraph-last-fold">If you need to convert the first letter to uppercase, and the rest to lowercase, then use the action "Capitalize word".</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="to_upper_case"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string to be converted to uppercase."),examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "UPPERCASE_STRING", help: {description: tr("Variable in which, after successful execution of the action, the converted string will be written."), examples:[{code:tr("JUST SAMPLE TEXT")},{code:"TEST TEXT"},{code:"STRING"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Convert all letters of the string to uppercase.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a string in which all letters will be uppercase, and the rest of the characters will remain unchanged.</div>
	<div class="tr tooltip-paragraph-fold">For example, the string <code>"test"</code> will be converted to the string <code>"TEST"</code>, and the string <code>"example string"</code> will be converted to the string <code>"EXAMPLE STRING"</code>.</div>
	<div class="tr tooltip-paragraph-last-fold">If you need to convert the first letter to uppercase, and the rest to lowercase, then use the action "Capitalize word".</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="string_contains"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string in which to check the contains of the substring."),examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"substring", description: tr("Substring"), default_selector: "string", value_string: "", help: {description: tr("Substring, the contains of which is necessary to check."),examples:[{code:tr("sample")},{code:"text"},{code:"str"}]} }) %>
<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
<%= _.template($('#input_constructor').html())({id:"from", description:tr("From index"), default_selector: "int", disable_string:true, value_number: "", min_number:0, max_number:999999, help: {description: tr("Optional parameter.") + " " + tr("The character index at which to start the search."),examples:[{code:1, description:tr("From the second character")},{code:0, description:tr("From the first character")},{code:tr("Empty string"), description:tr("From the beginning of the string")}]} }) %>
<%= _.template($('#block_end').html())() %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "STRING_CONTAINS", help: {description: tr("This variable will be true or false depending on whether the string contains a substring."), examples:[{code:"true",description:tr("The string contains a substring.")},{code:"false",description:tr("The string does not contain a substring.")}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Check if a string contains a substring.</div>
	<div class="tr tooltip-paragraph-fold">This action will return true or false depending on whether the string contains a substring. This result may be used with "If" action.</div>
	<div class="tr tooltip-paragraph-last-fold">For example, if the string is <code>"Test text"</code> and the substring <code>"text"</code>, then the action will return true, and if the string is <code>"Just example string"</code> and substring <code>"test"</code>, then the action will return false.</div>
	<div class="tr tooltip-paragraph-fold">By default, the search is performed from the beginning of the string, but this can be changed by specifying the index from which to start the search in the "From index" parameter located in the additional settings.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="string_length"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string from which to get the number of characters."),examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "STRING_LENGTH", help: {description: tr("Variable in which, after successful execution of the action, the number of characters contained in the string will be written."), examples:[{code:5},{code:2},{code:0,description:tr("Empty string")}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get the number of characters from a string.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a number equal to the number of characters in the string.</div>
	<div class="tr tooltip-paragraph-last-fold">For example, if the string <code>"Test text"</code> is specified, then the action will return 9, and if the string <code>"Just example string"</code> is specified, then the action will return 22.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="capitalize_words"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string in which to convert words."),examples:[{code:tr("just sample text")},{code:"test text"},{code:"string"}]} }) %>

<%= _.template($('#checkbox').html())({id: "Check", title: tr("Capitalize all words")}) %>
<%= _.template($('#checkbox').html())({id: "Check2", title: tr("All other letters in lowercase")}) %>


<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "RESULT_STRING", help: {description: tr("Variable in which, after successful execution of the action, the converted string will be written."), examples:[{code:tr("Just sample text")},{code:"Test Text"},{code:"String"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Convert the first letter of a word to uppercase.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a string in which the first letter will be uppercase and the rest will remain unchanged.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"test text"</code> is specified, then the action will return <code>"Test text"</code>, and if the string <code>"just example string"</code> is specified, then the action will return <code>"Just example string"</code>.</div>
	<div class="tr tooltip-paragraph-fold">If the "Capitalize all words" parameter is enabled, the first letters in all words will be uppercase.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"test text"</code> is specified, then the action will return <code>"Test Text"</code>, and if the string <code>"just example string"</code> is specified, then the action will return <code>"Just Example String"</code>.</div>
	<div class="tr tooltip-paragraph-fold">If the "All other letters in lowercase" parameter is enabled, then all letters that were not converted to uppercase will be converted to lowercase.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"TEST TEXT"</code> is specified, then the action will return <code>"Test text"</code>, and if the string <code>"JUST EXAMPLE STRING"</code> is specified, then the action will return <code>"Just example string"</code>.</div>
	<div class="tr tooltip-paragraph-fold">If both "Capitalize all words" and "All other letters in lowercase" are both enabled, the first letters in all words will be uppercase and all other lowercase.</div>
	<div class="tr tooltip-paragraph-last-fold">For example, if the string <code>"TEST TEXT"</code> is specified, then the action will return <code>"Test Text"</code>, and if the string <code>"JUST EXAMPLE STRING"</code> is specified, then the action will return <code>"Just Example String"</code>.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="count_words"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string from which to get the word count."),examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "WORDS_COUNT", help: {description: tr("Variable in which, after successful execution of the action, the number of words contained in the string will be written."), examples:[{code:5},{code:2},{code:0,description: tr("The string does not contain the words")}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Get the number of words from a string.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a number equal to the number of words in the string.</div>
	<div class="tr tooltip-paragraph-last-fold">For example, if the string <code>"Test text"</code> is specified, then the action will return 2, and if the string <code>"Just example string"</code> is specified, then the action will return 3.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="split_to_words"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string containing a sentence to be split into words."),examples:[{code:tr("Just sample text")},{code:tr("Test text")},{code:"string"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "WORDS_LIST", help: {description: tr("Variable in which, after successful execution of the action, the list of words will be written."), examples:[{code:tr("[\"Just\", \"sample\", \"text\"]")},{code:tr("[\"Test\", \"text\"]")},{code:"[\"string\"]"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Split a string into words.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a list containing the words obtained from the string.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"Test text"</code> is specified, then the action will return <code>["Test","text"]</code>, and if the string <code>"Just example string."</code> is specified, then the action will return <code>["Just","example","string"]</code>.</div>
	<div class="tr tooltip-paragraph-fold">This action ignores any characters other than letters and numbers.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"Delicious 100% juice."</code> is specified, then the action will return <code>["Delicious", "100", "juice"]</code>.</div>
	<div class="tr tooltip-paragraph-last-fold">The resulting list can be processed using actions from the "List" module.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="split_to_sentences"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string containing text to be split into sentences."),examples:[{code:tr("Just sample text. Test text, string")},{code:"Test text! Test text! Test text!"},{code:"string"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "SENTENCES_LIST", help: {description: tr("Variable in which, after successful execution of the action, the list of sentences will be written."), examples:[{code:tr("[\"Just sample text.\", \"Test text, string\"]")},{code:"[\"Test text!\", \"Test text!\", \"Test text!\"]"},{code:"[\"string\"]"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Split the string into sentences.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a list containing the sentences obtained from the string.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"Just sample text. Test text, string"</code> is specified, then the action will return <code>["Just sample text.", "Test text, string"]</code>, and if the string <code>"Test text! Test text! Test text!"</code> is specified, then the action will return <code>["Test text!", "Test text!", "Test text!"]</code>.</div>
	<div class="tr tooltip-paragraph-last-fold">The resulting list can be processed using actions from the "List" module.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="split_to_lines"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string containing text to be split into lines."),examples:[{code:tr("Just<br>sample<br>text")},{code:"<br>Test:text"},{code:"<br>string"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"separator", description: tr("Separator"), default_selector: "expression", value_string: "/\\r?\\n/", variants: [{value:"&#034;\\n&#034;",type:"expression",description:tr("Line break, split multiline text")},{value:"&#034;\\r\\n&#034;",type:"expression",description:tr("Carriage return and line break, split multiline text")},{value:"/\\r?\\n/",type:"expression",description:tr("Line break with or without carriage return, split multiline text")}], disable_int:true, help: {description: tr("Optional parameter.") + " " + tr("String or regular expression used as the delimiter for the original string.") + " " + tr("If the separator does not occur in the original string, then the resulting list will contain one element, the original string."),examples:[{code:":",description:"[\"Test\", \"text\"]"},{code:'"\\n"',description:tr("[\"Just\", \"sample\", \"text\"]")},{code:tr("Empty string"), description: tr("Split the original string character by character, each character will be a separate item in the list.")}]} }) %>

<%= _.template($('#checkbox').html())({id: "Check", title: tr("Remove empty lines"), checked: true}) %>

<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
<%= _.template($('#input_constructor').html())({id:"limit", description:tr("Limit"), default_selector: "int", disable_string:true, value_number: "", min_number:0, max_number:999999, help: {description: tr("Optional parameter.") + " " + tr("An integer specifying the maximum number of items in the resulting list. The string will still be split completely, but the final list will be truncated so that its length does not exceed the specified limit."),examples:[{code:10, description:tr("The resulting list can contain a maximum of 10 items.")},{code:tr("Empty string"), description:tr("Don't limit the number of items on the resulting list.")}]} }) %>
<%= _.template($('#block_end').html())() %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "LINES_LIST", help: {description: tr("Variable in which, after successful execution of the action, the list of strings will be written."), examples:[{code:tr("[\"Just\", \"sample\", \"text\"]")},{code:"[\"Test\", \"text\"]"},{code:"[\"string\"]"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Split string into lines.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a list containing the lines obtained from the original string as a result of splitting at the specified separator.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the specified string is <code>"Test:text"</code> and the separator is <code>":"</code>, then the action will return <code>["Test","text"]</code>.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the specified string is <br><code>"Just<br>example<br>string."</code> and the separator is <code>"\n"</code>, then the action will return <code>["Just","example","string"]</code>.</div>
	<div class="tr tooltip-paragraph-fold">If the separator does not occur in the original string, then the resulting list will contain one element, the original string.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the specified string is <code>"string"</code> and the separator is <code>";"</code>, then the action will return <code>["string"]</code>.</div>
	<div class="tr tooltip-paragraph-fold">If separator is not specified, the string will be split character by character, each character will be a separate item of the list.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the specified string is <code>"string"</code> and the separator is not specified, then the action will return <code>["s","t","r","i","n","g"]</code>.</div>
	<div class="tr tooltip-paragraph-fold">If the "Remove empty lines" parameter is activated, then all empty lines will be removed from the resulting list.</div>
	<div class="tr tooltip-paragraph-last-fold">The resulting list can be processed using actions from the "List" module.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="find_substring"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string in which to find the substring."),examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"substring", description: tr("Substring"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The substring to find in the string."),examples:[{code:tr("sample")},{code:"text"},{code:"str"}]} }) %>
<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
<%= _.template($('#input_constructor').html())({id:"from", description:tr("From index"), default_selector: "int", disable_string:true, value_number: "", min_number:0, max_number:999999, help: {description: tr("Optional parameter.") + " " + tr("The character index at which to start the search."),examples:[{code:1, description:tr("From the second character")},{code:0, description:tr("From the first character")},{code:tr("Empty string"), description:tr("From the beginning of the string")}]} }) %>
<%= _.template($('#block_end').html())() %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "SUBSTRING_INDEX", help: {description: tr("Variable in which, after successful execution of the action, the index of the beginning of the substring will be written."), examples:[{code:0},{code:3},{code:5},{code:-1,description: tr("String does not contain the specified substring")}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Find a substring in a string.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a number equal to the index of the beginning of the first substring found, or -1 if the substring was not found.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"Test text"</code> is specified and the substring <code>"text"</code> is specified, then the action will return 5, and if the string is <code>"Just example string"</code> and the substring <code>"test"</code>, then the action will return -1.</div>
	<div class="tr tooltip-paragraph-last-fold">By default, the search is performed from the beginning of the string, but this can be changed by specifying the index from which to start the search in the "From index" parameter located in the additional settings.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="starts_with"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string to check."),examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"substring", description: tr("Substring"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The substring that the string should start with."),examples:[{code:tr("sample")},{code:"text"},{code:"str"}]} }) %>
<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
<%= _.template($('#input_constructor').html())({id:"from", description:tr("From index"), default_selector: "int", disable_string:true, value_number: "", min_number:0, max_number:999999, help: {description: tr("Optional parameter.") + " " + tr("The character index at which to start the search."),examples:[{code:1, description:tr("From the second character")},{code:0, description:tr("From the first character")},{code:tr("Empty string"), description:tr("From the beginning of the string")}]} }) %>
<%= _.template($('#block_end').html())() %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "IS_STARTS_WITH", help: {description: tr("This variable will be true or false depending on whether the string starts with the specified substring."), examples:[{code:"true",description:tr("The string starts with a substring.")},{code:"false",description:tr("The string does not start with a substring.")}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Check if the string starts with the specified substring.</div>
	<div class="tr tooltip-paragraph-fold">This action will return true or false, depending on whether the string begins with the specified substring. This result may be used with "If" action.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string is <code>"Test text"</code> and the substring <code>"Test"</code>, then the action will return true, and if the string is <code>"Just example string"</code> and substring <code>"example"</code>, then the action will return false.</div>
	<div class="tr tooltip-paragraph-last-fold">By default, the search is performed from the beginning of the string, but this can be changed by specifying the index from which to start the search in the "From index" parameter located in the additional settings.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="ends_with"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string to check."),examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"substring", description: tr("Substring"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The substring that the string must end with."),examples:[{code:tr("sample")},{code:"text"},{code:"str"}]} }) %>
<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
<%= _.template($('#input_constructor').html())({id:"lenght", description:tr("Length"), default_selector: "int", disable_string:true, value_number: "", min_number:0, max_number:999999, help: {description: tr("Optional parameter.") + " " + tr("The length to which the string will be truncated when searching for a substring allows searching within the string."),examples:[{code:10},{code:5},{code:tr("Empty string"), description:tr("String length")}]} }) %>
<%= _.template($('#block_end').html())() %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "IS_ENDS_WITH", help: {description: tr("This variable will be true or false depending on whether the string ends with the specified substring."), examples:[{code:"true",description:tr("The string ends with a substring.")},{code:"false",description:tr("The string does not end with a substring.")}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Check if a string ends with a specified substring.</div>
	<div class="tr tooltip-paragraph-fold">This action will return true or false depending on whether the string ends with the specified substring. This result may be used with "If" action.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string is <code>"Test text"</code> and the substring <code>"text"</code>, then the action will return true, and if the string is <code>"Just example string"</code> and substring <code>"example"</code>, then the action will return false.</div>
	<div class="tr tooltip-paragraph-last-fold">By default, the search is performed from the end of the string, but this can be changed by specifying the index from which to start the search in the "Length" parameter located in the additional settings.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="insert_substring"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string to insert the substring into."),examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"index", description:tr("Index") + ". " + tr("Can be blank"), default_selector: "int", disable_string:true, value_number: "", min_number:-999999, max_number:999999, help: {description: tr("The character index after which the substring will be inserted.") + " " + tr("If negative, indicates an offset from the end of the string."),examples:[{code:1, description:tr("After the second character")},{code:0, description:tr("After the first character")},{code:-1, description:tr("After the last character")},{code:tr("Empty string"), description:tr("To the beginning of the string")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"substring", description: tr("Insertable substring"), default_selector: "string", value_string: "", help: {description: tr("The substring to insert."),examples:[{code:tr("not")},{code:"good"},{code:"New"},{code:tr("Empty string"), description:tr("Don't insert a substring")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "RESULT_STRING", help: {description: tr("Variable in which, after successful execution of the action, the final string will be written."), examples:[{code:tr("Just not sample text")},{code:"Test good text"},{code:"New string"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Insert a substring into a string.</div>
	<div class="tr tooltip-paragraph-fold">This action will return the string resulting from the substring insertion.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"Just string"</code> is specified, the substring <code>"example "</code> and index 5, then the action will return <code>"Just example string"</code>.</div>
	<div class="tr tooltip-paragraph-fold">If the index is a negative number, then it is interpreted as the number of characters from the end of the string.</div>
	<div class="tr tooltip-paragraph-last-fold">If you need to not only insert a substring, but also delete part of the original string, then use the "Remove string part" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="base64"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({id:"Value", description:tr("Data"), default_selector: "string", disable_int:true, help: {description: tr("Depending on mode data parameter is base64 encoded string which needs to be decoded, or ordinary string which needs to be encoded."), examples:[{code:"any text",description:tr("Arbitrary string. Works with encode mode")},{code:"YW55IHN0cmluZw==",description:tr("Base64 string. Works with decode mode")},{code:"[[FILE_CONTENT]]",description:tr("Variable which holds file read result. Works with decode mode")}]}}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "BASE64_ENCODING_RESULT", help: {description: tr("Variable name with result. It will be base64 encoded string in encode mode and decode result as string in decode mode.")}}) %>

	<%= _.template($('#combobox').html())({id: "Select", title: tr("Encode or decode"), items: [
			{value: "encode", "name": "encode", selected: true},
			{value: "decode", "name": "decode"}
		]
	}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Encodes or decodes base64 string.</div>
	<div class="tr tooltip-paragraph-fold">BAS stores binary data as base64 strings. It could be binary files, pictures, video, etc. Base64 encoding represent binary data in ascii string.</div>
	<div class="tr tooltip-paragraph-fold">Most of the times you don't need to convert base64 data to string, some actions accept base64 data as input parameters, for example: "Write File", "Start working with image". Moreover, if you try to decode binary data encoded as base64 string, result string may be damaged, so it is better to use base64 data without decoding.</div>
	<div class="tr tooltip-paragraph-last-fold">This action can work with in two modes: encode and decode. Modes can be switched with "Encode or decode" parameter. Depending on mode data parameter is base64 encoded string which needs to be decoded, or ordinary string which needs to be encoded.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="template"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({id:"Template", description:tr("Template"), default_selector: "expression", disable_int:true, disable_editor:true, disable_string:true, use_textarea:true, size: 8, disable_type_chooser:true,textarea_height:80, help: {description: tr("Variable value"), examples:[{code:"any string",description:tr("Any string will work")},{code:"[[LOGIN]]:[[PASSWORD]]",description:tr("Concat 2 variables")},{code:"{Hi|Hello}, John!",description:tr("Spintax")},{code:"&lt;EMaleName&gt;",description:tr("Will be replaced with male name")},{code:"{a{1|2|3}|}",description:tr("a1, a2, a3 or nothing")}]}}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save Result"), default_variable: "TEMPLATE_RESULT", help: {description: tr("The name of the variable to be created or modified.")}}) %>
  <%= _.template($('#checkbox').html())({id: "Check2", title: tr("Expand spintax."), checked: true}) %>
  <%= _.template($('#checkbox').html())({id: "Check3", title: tr("Expand variables and resources."), checked: true}) %>
  <%= _.template($('#checkbox').html())({id: "Check", title: tr("Additional processing. Use this option if you want to load template from file or variable.")}) %>


</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Create new variable or update existing with multiline text. Can expand resources, variables, spintax, may be used to load template from file or dynamically generate it. This action suites best if you want to generate post text.</div>
  <div class="tr tooltip-paragraph-fold">This action gets text from "Template" multiline textbox and saves it to variable defined in "Variable To Save Result". Thats it, unless text doesn't contain special values. Here are list of them:</div>
  <div class="tr tooltip-paragraph-fold">Variables [[VARIABLE]] will be expanded to variable value.</div>
  <div class="tr tooltip-paragraph-fold">Resources {{resource}} also will be expanded to resource value.</div>
  <div class="tr tooltip-paragraph-fold">Spintax {value1|value2} will be expanded to value1 or value2.</div>
  <div class="tr tooltip-paragraph-fold">&lt;AnyLetter&gt; - will be converted to any letter.</div>
  <div class="tr tooltip-paragraph-fold">&lt;AnyDigit&gt; - will be converted to any digit.</div>
  <div class="tr tooltip-paragraph-fold">&lt;ELowVow&gt; - same as {a|e|i|o|u}</div>
  <div class="tr tooltip-paragraph-fold">&lt;EUpVow&gt; - same as {a|e|i|o|u}</div>
  <div class="tr tooltip-paragraph-fold">&lt;ELowCons&gt; - same as {b|c|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z}</div>
  <div class="tr tooltip-paragraph-fold">&lt;EUpCons&gt; - same as {B|C|D|F|G|H|J|K|L|M|N|P|Q|R|S|T|V|W|X|Y|Z}</div>
  <div class="tr tooltip-paragraph-fold">&lt;EUp&gt; - same as {&lt;EUpVow&gt;|&lt;EUpCons&gt;}</div>
  <div class="tr tooltip-paragraph-fold">&lt;ELow&gt; - same as {&lt;ELowVow&gt;|&lt;ELowCons&gt;}</div>
  <div class="tr tooltip-paragraph-fold">&lt;EFemName&gt; - english female names starting from capital letter.</div>
  <div class="tr tooltip-paragraph-fold">&lt;EFemNameLow&gt; - english female names.</div>
  <div class="tr tooltip-paragraph-fold">&lt;EMaleName&gt; - english male names starting from capital letter.</div>
  <div class="tr tooltip-paragraph-fold">&lt;EMaleNameLow&gt; - english male names.</div>
  <div class="tr tooltip-paragraph-fold">&lt;ESurname&gt; - english surnames starting from capital letter.</div>
  <div class="tr tooltip-paragraph-fold">&lt;ESurnameLow&gt; - english surnames.</div>
  <div class="tr tooltip-paragraph-last-fold">If "Additional processing" is checked, than this action will process dynamic templates, i.e template will be taken from variable. Consider following example: you have file with content "{Hello|Hi}, &lt;EMaleName&gt;{!|}" and want to expand it with BAS. At first you have to load file to variable [[FILE_CONTENT]]. If you put [[FILE_CONTENT]] to template action and don't set "Additional processing" flag, that result will be the same as original file content. But if you set this flag, BAS will expand [[FILE_CONTENT]] first and then expend result again, finally you will get something like this "Hello, John!".</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="replacestring"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({id:"Value", description:tr("Original String"), default_selector: "string", disable_int:true, help: {description: tr("The string in which the replacement will be made")}}) %>
	<%= _.template($('#input_constructor').html())({id:"ReplaceFrom", description:tr("Replace From"), default_selector: "string", disable_int:true, help: {description: tr("The string to be searched for")}}) %>
	<%= _.template($('#input_constructor').html())({id:"ReplaceTo", description:tr("Replace To"), default_selector: "string", disable_int:true, help: {description: tr("New value")}}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save Result"), default_variable: "REPLACE_RESULT", help: {description: tr("Variable, which will hold copy of the original string with the replacement")}}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Searches a string defined with "Original String" for a specified value defined with "Replace From", and returns a new string where the specified values are replaced to value defined with "Replace To" parameter.</div>
	<div class="tr tooltip-paragraph-fold">This action replaces all occurrences.</div>
	<div class="tr tooltip-paragraph-last-fold">If you want to replace with regexp, use "Replace text with regexp" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="randomstring"><div class="container-fluid randomstring">
	<%= _.template($('#input_constructor').html())({id:"AllowedChars", description:tr("Allowed Chars"), default_selector: "string", disable_int:true, value_string: "abcdefghijklmnopqrstuvwxyz0123456789"}) %>
	<%= _.template($('#input_constructor').html())({id:"Length", description:tr("Result String Length"), default_selector: "int", disable_string:true, value_number:10, min_number:1, max_number:999999}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save Result"), default_variable: "RANDOM_STRING"}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Generate a random string with a given length and allowed characters.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="new_line"><div class="container-fluid">
<%= _.template($('#combobox').html())({id: "Select", title: tr(""), items: [
  {value: "CarriageReturn", selected: true, "name": tr("Carriage return and line break (\\r\\n)")},
  {value: "EOL", "name": tr("Only line break (\\n)")}
]
}) %>

<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "LINE_BREAK", help: {description: tr("Variable in which, after successful execution of the action, a string containing a line break will be written."), examples:[{code:"\\r\\n",description:tr("Carriage return and line break")},{code:"\\n",description:tr("Line break")}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Create a string containing a line break symbol.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a string containing a line break. You can read more about line breaks in <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/Newline');return false">Wiki</a>.</div>
	<div class="tr tooltip-paragraph-fold">If the parameter "Carriage return" is activated, then a carriage return will be added before the line break.</div>
	<div class="tr tooltip-paragraph-last-fold">The result of this action can be used to split the text into multiple lines.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="join_strings"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string1", description:tr("String") + " 1. " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string to be joined with other strings."),examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"},{code:tr("Empty string"), description: tr("The parameters \"String 2\", \"String 3\", \"List of strings\" will be used")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"string2", description:tr("String") + " 2. " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string to be joined with other strings."),examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"},{code:tr("Empty string"), description: tr("The parameters \"String 1\", \"String 3\", \"List of strings\" will be used")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"string3", description:tr("String") + " 3. " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string to be joined with other strings."),examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"},{code:tr("Empty string"), description: tr("The parameters \"String 1\", \"String 2\", \"List of strings\" will be used")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"strings_list", description:tr("List of strings") + ". " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("List of strings to be joined.") + " " + tr("As a list, you can use a string consisting of strings, separated by commas."),examples:[{code:"Just sample text,Test text,string"},{code:"Just sample text, Test text, string"},{code:"[\"Just sample text\", \"Test text\", \"string\"]"},{code:tr("Empty string"), description: tr("The parameters \"String 1\", \"String 2\", \"String 3\" will be used")}]} }) %>
<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
<%= _.template($('#input_constructor').html())({id:"separator", description: tr("Separator"), default_selector: "string", variants: [{value:"&#034;\\n&#034;",type:"expression",description:tr("Line break, join into multiline text")},{value:"&#034;\\r\\n&#034;",type:"expression",description:tr("Carriage return and line break, join into multiline text")}], disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("Separator to insert between the joined strings."),examples:[{code:'","',description:tr("Just sample text") + ",Test text,string"},{code:'" "',description:tr("Just sample text") + " Test text string"},{code:'", "',description:tr("Just sample text") + ", Test text, string"},{code:tr("Empty string"), description: tr("Join strings without separator")}]} }) %>
<%= _.template($('#block_end').html())() %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "RESULT_STRING", help: {description: tr("Variable in which, after successful execution of the action, the final string will be written."), examples:[{code:"String1String2String3"},{code:"Text test string"},{code:"TestTest"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Join multiple strings into one.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a string composed of all the specified strings.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the parameters "String 1" and "String 2" are specified, the values of which are respectively <code>"Just example"</code> and <code>" string"</code>, then the action will return <code>"Just example string"</code>.</div>
	<div class="tr tooltip-paragraph-fold">Strings from separate fields and a list are added to a general list of strings that will be joined.</div>
	<div class="tr tooltip-paragraph-fold">For example, if a string is specified in the "String 1" field and a list of 4 strings is specified in the "List of strings" field, then 5 strings will be joined.</div>
	<div class="tr tooltip-paragraph-fold">If some of the parameters ("String 1", "String 2", "String 3", "List of strings") are not specified, all parameters will be used except for them.</div>
	<div class="tr tooltip-paragraph-fold">For example, if "List of strings" is not specified, then the list will be formed from the parameters "String 1" and "String 2" and "String 3". If the parameters "String 1", "String 2", "String 3" are empty, then the "List of strings" will be used. If all parameters are specified, then all of them will be used.</div>
	<div class="tr tooltip-paragraph-fold">The order of joining the fields is as follows "String 1", "String 2", "String 3", "List of strings".</div>
	<div class="tr tooltip-paragraph-fold">The list can be created using actions from the "List" module.</div>
	<div class="tr tooltip-paragraph-last-fold">By default, strings are joined without a separator, but this can be changed by specifying the "Separator" parameter located in the additional settings.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="latinize"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string to be latinized."),examples:[{code:"ỆᶍǍᶆṔƚÉ áéíóúýčďěňřšťžů"},{code:"Привет мир!"},{code:"Просто пример текста"}]} }) %>
<%= _.template($('#checkbox').html())({id: "Check", title: tr("Latinize Cyrillic"), checked: true}) %>


<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "LATINIZED_STRING", help: {description: tr("Variable in which, after successful execution of the action, the converted string will be written."), examples:[{code:"ExAmPlE aeiouycdenrstzu"},{code:"Privet mir!"},{code:"Prosto primer teksta"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Convert all letters to Latin.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a string in which all letters will be latinized, and the rest of the characters will remain unchanged.</div>
	<div class="tr tooltip-paragraph-fold">For example, the string <code>"ỆᶍǍᶆṔƚÉ áéíóúýčďěňřšťžů"</code> will be converted to the string <code>"ExAmPlE aeiouycdenrstzu"</code>, and the string <code>"Привет мир!"</code> will be converted to the string <code>"Privet mir!"</code>.</div>
	<div class="tr tooltip-paragraph-last-fold">By default, the Cyrillic is also latinized, but this can be changed by disabling the "Latinize Cyrillic" parameter.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="declination"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"number", description: tr("Numbеr"), default_selector: "string", value_string: "", help: {description: tr("The number by which the declension of the returned word will be determined."),examples:[{code:123},{code:100000},{code:1456.578}]} }) %>
<%= _.template($('#input_constructor').html())({id:"word1", description: tr("Word at") + " 1", default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Word if number is") + " 1.",examples:[{code:tr("minute")},{code:tr("year")},{code:tr("account")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"word2", description: tr("Word at") + " 2", default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Word if number is") + " 2.",examples:[{code:tr("minutes")},{code:tr("years")},{code:tr("accounts")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"word5", description: tr("Word at") + " 5", default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Word if number is") + " 5.",examples:[{code:tr("minutеs")},{code:tr("yeаrs")},{code:tr("аccounts")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "DECLINED_WORD", help: {description: tr("Variable in which, after successful execution of the action, the word corresponding to the specified number will be written."),examples:[{code:tr("minute"),description:tr("at 21")},{code:tr("yeаrs"),description:tr("at 10")},{code:tr("accounts"),description:tr("at 22")}]}}) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Decline a word depending on the specified number.</div>
	<div class="tr tooltip-paragraph-fold">This action will return one of three words matching the declension to the specified number.</div>
	<div class="tr tooltip-paragraph-last-fold">For example, if the words "account", "accounts", "accounts" are specified and the number is 1, then the action will return <code>"account"</code>, and if the number is 22, then the action will return <code>"accounts"</code>.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="parse_csv_string"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("CSV string with want to parse into items."),examples:[{code:"login:password"},{code:"id,name,login"},{code:tr("Just sample text") + ";Test text;string"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"separators", description:tr("List of separators"), default_selector: "string", disable_int:true, value_string: ":;,", help: {description: tr("The list of delimiters by which the string can be split.") + " " + tr("As a list, you can use a string consisting only of the separators."),examples:[{code:":;,"},{code:"[\":\", \";\", \",\"]"},{code:tr("Empty string"), description: "[\":\", \";\", \",\"]"}]} }) %>
<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>

<%= _.template($('#checkbox').html())({id: "Check", title: tr("Convert types")}) %>


<%= _.template($('#block_end').html())() %>
<%= _.template($('#variable_constructor').html())({id:"VariablesList", description:tr("Variables To Save Result"), default_variable: "USERNAME,PASSWORD", append_mode:true, help: {description: tr("List of variables separated by commas. Results will be written into that variables.")} }) %>
<%= _.template($('#variable_constructor').html())({id:"ResultAsList", description:tr("Results as a list of items"), default_variable: "LIST_WITH_ITEMS", help: {description: tr("List of items. Results will be written into that list.")} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Parse CSV string into items.</div>
	<div class="tr tooltip-paragraph-fold">This action will parse the string by the specified separators and save the parsed data by the specified variables.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"email@gmail.com:mypass1"</code> and the variables <code>USERNAME,PASSWORD</code> are specified, then the action will save <code>"email@gmail.com"</code> to the variable <code>[[USERNAME]]</code> and <code>"mypass1"</code> to the variable <code>[[PASSWORD]]</code>.</div>
	<div class="tr tooltip-paragraph-fold">Additionally, this action will save the result as a list of items, it can be processed later with List module.</div>
	<div class="tr tooltip-paragraph-fold">By default, the action returns strings, but this can be changed by enabling the "Convert types" parameter located in the additional settings, then strings will automatically be converted to numbers, true or false, objects, null and undefined.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"test:123:true"</code> is specified, then the string <code>"test"</code> will be saved in the first variable, and the number <code>123</code> in the second variable and in the third variable the boolean value <code>true</code>.</div>
	<div class="tr tooltip-paragraph-fold">If the number of variables is greater than the number of items in the string, then an empty string will be written to the excess variables.</div>
	<div class="tr tooltip-paragraph-last-fold">Use "Parse String" action if you want to get list as a result.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="create_csv_string"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"item1", description:tr("Item") + " 1. " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The item to add to the CSV string."),examples:[{code:tr("Just sample text")},{code:5},{code:true},{code:tr("Empty string"), description: tr("The parameters \"Item 2\", \"Item 3\", \"List of items\" will be used")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"item2", description:tr("Item") + " 2. " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The item to add to the CSV string."),examples:[{code:tr("Just sample text")},{code:5},{code:true},{code:tr("Empty string"), description: tr("The parameters \"Item 1\", \"Item 3\", \"List of items\" will be used")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"item3", description:tr("Item") + " 3. " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The item to add to the CSV string."),examples:[{code:tr("Just sample text")},{code:5},{code:true},{code:tr("Empty string"), description: tr("The parameters \"Item 1\", \"Item 2\", \"List of items\" will be used")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"items_list", description:tr("List of items") + ". " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("List of items to add to the CSV string.") + " " + tr("As a list, you can use a string consisting of strings, separated by commas."),examples:[{code:tr("Just sample text") + ",Test text,string"},{code:tr("Just sample text") + ", Test text, string"},{code:"[\"" + tr("Just sample text") + "\", \"Test text\", \"string\"]"},{code:tr("Empty string"), description: tr("The parameters \"Item 1\", \"Item 2\", \"Item 3\" will be used")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"separator", description: tr("Separator"), default_selector: "string", disable_int:true, value_string: ":", help: {description: tr("Separator to insert between elements of CSV string."),examples:[{code:'","',description:tr("Just sample text") + ",Test text,string"},{code:'" "',description:tr("Just sample text") + " Test text string"},{code:'", "',description:tr("Just sample text") + ", Test text, string"},{code:tr("Empty string"), description: '":"'}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "CSV_STRING", help: {description: tr("Variable in which, after successful execution of the action, the CSV string will be written."), examples:[{code:"login:password"},{code:"id,name,login"},{code:tr("Just sample text") + ";Test text;string"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Create CSV string from multiple items.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a CSV string composed of all the specified items, separated by the specified character.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the parameters "Item 1" and "Item 2" are specified, the values of which are respectively <code>"test"</code> and <code>"text"</code>, and the separator <code>":"</code>, then the action will return <code>"test:text"</code>.</div>
	<div class="tr tooltip-paragraph-fold">Items from separate fields and a list are added to a general list of items that will be joined.</div>
	<div class="tr tooltip-paragraph-fold">For example, if a item is specified in the "Item 1" field and a list of 4 items is specified in the "List of items" field, then 5 items will be joined.</div>
	<div class="tr tooltip-paragraph-fold">If some of the parameters ("Item 1", "Item 2", "Item 3", "List of items") are not specified, all parameters will be used except for them.</div>
	<div class="tr tooltip-paragraph-fold">For example, if "List of items" is not specified, then the list will be formed from the parameters "Item 1" and "Item 2" and "Item 3". If the parameters "Item 1", "Item 2", "Item 3" are empty, then the "List of items" will be used. If all parameters are specified, then all of them will be used.</div>
	<div class="tr tooltip-paragraph-fold">The values of all elements are converted to a string before joining.</div>
	<div class="tr tooltip-paragraph-fold">If the element contains a separator, then it will be enclosed in quotes.</div>
	<div class="tr tooltip-paragraph-fold">The order of joining the fields is as follows "Item 1", "Item 2", "Item 3", "List of items".</div>
	<div class="tr tooltip-paragraph-last-fold">The list can be created using actions from the "List" module.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="trim"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string which needs to be trimmed."),examples:[{code:"\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + tr("Just sample text") + "&nbsp;&nbsp;&nbsp;&nbsp;\""},{code:"\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test text&nbsp;&nbsp;&nbsp;\""},{code:"\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;\""}]} }) %>

<%= _.template($('#checkbox').html())({id: "Check", title: tr("Trim spaces"), checked: true}) %>
<%= _.template($('#checkbox').html())({id: "Check2", title: tr("Trim line breaks"), checked: true}) %>
<%= _.template($('#checkbox').html())({id: "Check3", title: tr("Trim tabs"), checked: true}) %>

<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
<%= _.template($('#input_constructor').html())({id:"characters", description: tr("Trim characters"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Characters to be trimmed at the edges of the string."),examples:[{code:"_-|,"},{code:"_-"},{code:"%&"}]} }) %>

<%= _.template($('#radio').html())({id: "Check4", name: "side", title: tr("Trim on both sides"), checked: true}) %>
<%= _.template($('#radio').html())({id: "Check5", name: "side", title: tr("Trim left")}) %>
<%= _.template($('#radio').html())({id: "Check6", name: "side", title: tr("Trim right")}) %>


<%= _.template($('#block_end').html())() %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "TRIMMED_STRING", help: {description: tr("Variable in which, after successful execution of the action, the final string will be written."), examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Trim string along the edges.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a string, from the beginning and end of which unnecessary characters such as spaces, line breaks, tabs will be trimmed.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test text&nbsp;&nbsp;&nbsp;"</code> is specified, then the action will return <code>"Test text"</code>, and if the string <code>"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Just example string&nbsp;&nbsp;&nbsp;&nbsp;"</code> is specified, then the action will return <code>"Just example string"</code>.</div>
	<div class="tr tooltip-paragraph-fold">The characters to be trimmed are determined by the "Trim spaces", "Trim line breaks", "Trim tabs" parameters, but you can also specify your own characters in the "Trim characters" parameter located in the additional settings.</div>
	<div class="tr tooltip-paragraph-last-fold">By default, the action trim the string on both sides, but this can be changed using the radio buttons located in the additional settings.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="clean"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string which needs to be cleaned."),examples:[{code:"\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + tr("Just&nbsp;&nbsp;&nbsp;&nbsp;sample&nbsp;&nbsp;text") + "&nbsp;&nbsp;&nbsp;&nbsp;\""},{code:"\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;&nbsp;&nbsp;\""},{code:"\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;\""}]} }) %>

<%= _.template($('#checkbox').html())({id: "Check", title: tr("Replace multiple spaces with single ones"), checked: true}) %>
<%= _.template($('#checkbox').html())({id: "Check2", title: tr("Replace line breaks with space"), checked: true}) %>
<%= _.template($('#checkbox').html())({id: "Check3", title: tr("Remove tabs"), checked: true}) %>

<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
<%= _.template($('#input_constructor').html())({id:"characters_to_delete", description: tr("Remove characters"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Characters which needs to be removed."),examples:[{code:"_-|"},{code:"_-"},{code:"%&"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"characters_to_space", description: tr("Replace characters with space"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Characters which needs to be replaced with a space."),examples:[{code:"_-|"},{code:"_-"},{code:"%&"}]} }) %>
<%= _.template($('#block_end').html())() %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "CLEANED_STRING", help: {description: tr("Variable in which, after successful execution of the action, the final string will be written."), examples:[{code:tr("Just sample text")},{code:"Test text"},{code:"string"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Clean string from unnecessary characters.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a string from which all unnecessary characters will be removed, such as multiple spaces, line breaks, tabs.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test&nbsp;&nbsp;&nbsp;text&nbsp;&nbsp;&nbsp;"</code> is specified, then the action will return <code>"Test text"</code>, and if the string <code>"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Just&nbsp;&nbsp;example&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;"</code> is specified, then the action will return <code>"Just example string"</code>.</div>
	<div class="tr tooltip-paragraph-fold">In addition to deleting tabs, activated by the corresponding parameter, you can specify your own characters that will be deleted in the "Remove characters" parameter located in the additional settings.</div>
	<div class="tr tooltip-paragraph-last-fold">The characters that will be replaced by space are determined by the "Replace multiple spaces with single ones", "Replace line breaks with space" parameters, but you can also specify your own characters in the "Replace characters with space" parameter located in the additional settings.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="extract_emails"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string from which to extract email addresses."),examples:[{code:tr("Suggestions for cooperation you can send to email: cooperation@marketplace.com")},{code:tr("</br>Test text - test@gmail.com. Just example text - example@gmail.com.")},{code:tr("</br>Proposals for advertising, you can send to email: ad@site.com</br>Suggestions for improving the site, you can send to email: feedback@site.com</br>To get help in solving problems with the site, you can write to the email: support@site.com")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "EMAILS_LIST", help: {description: tr("Variable in which, after successful execution of the action, the list of email addresses will be written."), examples:[{code:"[\"cooperation@marketplace.com\"]"},{code:"[\"test@gmail.com\", \"example@gmail.com\"]"},{code:"[\"ad@site.com\", \"feedback@site.com\", \"support@site.com\"]"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Extract all email addresses from string.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a list containing the email addresses obtained from the string.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"Test text - test@gmail.com. Just example text - example@gmail.com."</code> is specified, then the action will return <code>["test@gmail.com", "example@gmail.com"]</code>.</div>
	<div class="tr tooltip-paragraph-last-fold">The resulting list can be processed using actions from the "List" module.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="extract_urls"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string from which to extract links."),examples:[{code:tr("You can buy the product by the link - https://marketplace.biz/section_3/product_213234.php")},{code:tr("</br>Test text http://test.com, string test example.org")},{code:tr("</br>Ad -> http://www.ad.by/info, feedback -> www.feedback.io, support -> https://support.co/new/ticket.php")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "URLS_LIST", help: {description: tr("Variable in which, after successful execution of the action, the list of links will be written."), examples:[{code:"[\"https://marketplace.biz/section_3/product_213234.php\"]"},{code:"[\"http://test.com\", \"example.org\"]"},{code:"[\"http://www.ad.by\", \"www.feedback.io\", \"https://support.co/new/ticket.php\"]"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Extract all links from string.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a list containing the links obtained from the string.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"Test text http://test.com, string test example.org"</code> is specified, then the action will return <code>["http://test.com", "example.org"]</code>.</div>
	<div class="tr tooltip-paragraph-fold">The resulting list can be processed using actions from the "List" module.</div>
	<div class="tr tooltip-paragraph-last-fold">You can parse a link to items using the "Parse URL" action from the "URL" module.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="extract_phone_numbers"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description: tr("String"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("The string from which to extract phone numbers."),examples:[{code:tr("Hello, my number is +1 323 123-4567")},{code:tr("</br>Business enquiries/press: Alexandra +7 900 000-00-00")},{code:tr("</br>PR: Maria +7(900)000-00-01 | Agent 1: Valeria +7(900)000-00-02 | Agent 2: Ekaterina +7(900)00-00-03")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "PHONE_NUMBERS_LIST", help: {description: tr("Variable in which, after successful execution of the action, the list of phone numbers will be written."), examples:[{code:"[\"+1 323 123-4567\"]"},{code:"[\"+7 900 000-00-00\"]"},{code:"[\"+7(900)000-00-01\", \"+7(900)000-00-02\", \"+7(900)00-00-03\"]"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Extract all phone numbers from the string.</div>
	<div class="tr tooltip-paragraph-fold">This action will return a list containing the phone numbers obtained from the string.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"Test text - 89001112233. Just example text - +7 900 999 4455."</code> is specified, then the action will return <code>["89001112233", "+7 900 999 4455"]</code>.</div>
	<div class="tr tooltip-paragraph-last-fold">The resulting list can be processed using actions from the "List" module.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="html_special_characters"><div class="container-fluid base64">
	<%= _.template($('#input_constructor').html())({id:"string", description:tr("String"), default_selector: "string", disable_int:true, help: {description: tr("Depending on mode data parameter is encoded string which needs to be decoded, or ordinary string containing special HTML characters that must be encoded."), examples:[{code:"&lt;div&gt;Blah blah blah&lt;/div&gt;",description:tr("Arbitrary string. Works with encode mode")},{code:"&amp;lt;div&amp;gt;Blah blah blah&amp;lt;/div&amp;gt;",description:tr("Encoded string. Works with decode mode")}]}}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "HTML_ENCODING_RESULT", help: {description: tr("Variable name with result. It will be encoded string in encode mode and decode result as string in decode mode.")}}) %>
	<%= _.template($('#combobox').html())({id: "Select", title: tr("Encode or decode"), items: [
		{value: "encode", "name": "encode", selected: true},
		{value: "decode", "name": "decode"}
		]
	}) %>
	
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Encodes or decodes string containing special HTML characters.</div>
	<div class="tr tooltip-paragraph-fold">This action can work with in two modes: encode and decode. Modes can be switched with "Encode or decode" parameter. Depending on mode data parameter is encoded string which needs to be decoded, or ordinary string containing special HTML characters which needs to be encoded.</div>
	<div class="tr tooltip-paragraph-last-fold">For example, if the string <code>"&lt;div&gt;Blah blah blah&lt;/div&gt;"</code> is specified and encode mode is activated, the action will return <code>"&amp;lt;div&amp;gt;Blah blah blah&amp;lt;/div&amp;gt;"</code>. And if the string <code>"&amp;lt;h1&amp;gt;Text title&amp;lt;/h1&amp;gt;"</code> is specified and decode mode is activated, then the action will return <code>"&lt;h1&gt;Text title&lt;/h1&gt;"</code>.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="SendMessage"><div class="container-fluid">
	<%= _.template($('#input_constructor').html())({id:"Token", description:tr("Bot token"), default_selector: "string", disable_int:true, value_string: ""}) %>
	<%= _.template($('#input_constructor').html())({id:"IdChat", description:tr("Chat id"), default_selector: "string", disable_int:true, value_string: ""}) %>
	<%= _.template($('#input_constructor').html())({id:"Message", description:tr("Message text"), default_selector: "string", disable_int:true, default_variable: ""}) %>

	<%= _.template($('#checkbox').html())({id: "Check", title: tr("Add thread number to the beginning of the message")}) %>
	<%= _.template($('#checkbox').html())({id: "Check1", title: tr("Add time to the beginning of the message [hh:mm:ss]")}) %>

	<%= _.template($('#info').html())({description: `<span class="tr">How to <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://core.telegram.org/bots#3-how-do-i-create-a-bot')">create bot</a> token and <a href="#" onclick="BrowserAutomationStudio_OpenUrl('http://stackoverflow.com/questions/32423837/telegram-bot-how-to-get-a-group-chat-id-ruby-gem-telegram-bot')">get chat id</a></span>`, color: "gray"}) %>

	
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Send message to the specific Telegram chat.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="timezones_set_timezone_and_geolocation_by_ip"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Ip address"), default_selector: "string", disable_int:true, help: 
{
	description: tr("A string which contains ip address. Ipv6 string should be enclosed with square brackets. Timezone and geolocation will be extracted from selected ip and browser settings will be updated accordingly."), examples:
	[
		{
			code:"140.97.75.15",description:tr("Ipv4 example")
		},
		{
			code:"<s>140.97.75.15:8080</s>",description:tr("Not correct, ip string can't contain port.")
		},
		{
			code:"[2a03:2880:f11c:8083:face:b00c:0:25de]",description:tr("Ipv6 example")
		}
	]
}
}) %>
</div>

<div class="container-fluid">
	<%= _.template($('#block_start').html())({id: "Advanced", name: tr("Security settings"), description: tr("Options below will help you to adjust different browser settings to match specified IP, for example: timezone and geolocation. Default settings will work fine.")}) %>


		<%= _.template($('#input_constructor').html())({id:"ChangeTimezone", description:tr("Change timezone"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true","false"], help: {description: tr("Change browser timezone according to specified ip. For example, if ip is located in United Kingdom, then browser timezone offset will be equal to 0(UTC+00:00). You can set timezone to custom value with 'Timezone' module."),examples:[{code:"true",description:tr("Change timezone.")},{code:"false",description:tr("Don't change timezone.")}]}}) %>


		<%= _.template($('#input_constructor').html())({id:"ChangeGeolocation", description:tr("Change geolocation"), default_selector: "string", disable_int:true, value_string: "false", variants: ["true","false"], help: {description: tr("Change browser geolocation according to specified ip. Location will be set to a point which is close to ip longitude/latitude. You can set geolocation to custom value with 'Timezone' module."),examples:[{code:"true",description:tr("A browser request to access your geolocation will be accepted. Browser location will be set to ip location.")},{code:"false",description:tr("Don't change geolocation. A browser request to access your geolocation will be rejected.")}]}}) %>

		<%= _.template($('#input_constructor').html())({id:"ChangeWebrtcIp", description:tr("Change WebRTC ip"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true","false"], help: {description: tr("Replace ip exposed by WebRTC with specified ip. If you want WebRTC to return custom ip, please use 'Browser Settings' action."),examples:[{code:"true",description:tr("Enable WebRTC, replace ip exposed by WebRTC with specified ip.")},{code:"false",description:tr("Don't change WebRTC state.")}]}}) %>

		<%= _.template($('#input_constructor').html())({id:"ChangeBrowserLanguage", description:tr("Change browser language"), default_selector: "string", disable_int:true, value_string: "true", variants: ["true","false"], help: {description: tr("Change browser language according to country of ip. This setting will change 'Accept-Language' header as well as navigator.language and navigator.languages javascript properties. By default language value will be equal to language and country code separated with dash, for example 'de-DE' for Germany. This value is valid, but most browsers uses more complicated strings. If you want to make BAS look like real browser, use FingerprintSwitcher service, it will set language to more natural value, for example for iPhone from Germany it will equal 'de, en;q=0.8, *;q=0.01'. You can also set this value explicitly by using 'Set Header' action"),examples:[{code:"true",description:tr("Change browser language according to country of specified ip.")},{code:"false",description:tr("Don't change browser language, default will be 'en-US,en;q=0.9'.")}]}}) %>

	<%= _.template($('#block_end').html())() %>
</div>

<div class="container-fluid">
	<%= _.template($('#ip_information').html())() %>
</div>
<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Set browser timezone and position the same as timezone and position of selected ip.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Site can obtain information about system timezone and location using internal apis (</span><a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset');return false">example 1</a>, <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API');return false">example 2</a><span class="tr">). This action allows to spoof timezone and location values returned by browser.</span></div>
      <div class="tooltip-paragraph-fold"><span class="tr">Full list of timezones can be found</span> <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/List_of_UTC_time_offsets');return false">here</a>.</div>
      <div class="tr tooltip-paragraph-fold">To obtain ip information internal database or external service is used, check "IP information" section for more details.</div>
      <div class="tr tooltip-paragraph-last-fold">It is recommended to use 'Proxy' action instead of this one, because it will set timezone and geolocation automatically according to current proxy.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>

 </script><script type="text/template" id="timezones_set_timezone"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Timezone UTC offset. Can be blank"), default_selector: "expression", disable_string:true, variants: [

  	"-840<br/><span style='color:gray;font-size:small'>UTC+14:00</span>",
  	"-780<br/><span style='color:gray;font-size:small'>UTC+13:00</span>",
  	"-765<br/><span style='color:gray;font-size:small'>UTC+12:45</span>",
  	"-720<br/><span style='color:gray;font-size:small'>UTC+12:00</span>",
  	"-660<br/><span style='color:gray;font-size:small'>UTC+11:00</span>",
  	"-630<br/><span style='color:gray;font-size:small'>UTC+10:30</span>",
  	"-600<br/><span style='color:gray;font-size:small'>UTC+10:00</span>",
  	"-570<br/><span style='color:gray;font-size:small'>UTC+09:30</span>",
  	"-540<br/><span style='color:gray;font-size:small'>UTC+09:00</span>",
  	"-525<br/><span style='color:gray;font-size:small'>UTC+08:45</span>",
  	"-510<br/><span style='color:gray;font-size:small'>UTC+08:30</span>",
  	"-480<br/><span style='color:gray;font-size:small'>UTC+08:00</span>",
  	"-420<br/><span style='color:gray;font-size:small'>UTC+07:00</span>",
  	"-390<br/><span style='color:gray;font-size:small'>UTC+06:30</span>",
  	"-360<br/><span style='color:gray;font-size:small'>UTC+06:00</span>",
  	"-345<br/><span style='color:gray;font-size:small'>UTC+05:40</span>",
  	"-330<br/><span style='color:gray;font-size:small'>UTC+05:30</span>",
  	"-300<br/><span style='color:gray;font-size:small'>UTC+05:00</span>",
  	"-270<br/><span style='color:gray;font-size:small'>UTC+04:30</span>",
  	"-240<br/><span style='color:gray;font-size:small'>UTC+04:00</span>",
  	"-210<br/><span style='color:gray;font-size:small'>UTC+03:30</span>",
  	"-180<br/><span style='color:gray;font-size:small'>UTC+03:00</span>",
  	"-120<br/><span style='color:gray;font-size:small'>UTC+02:00</span>",
  	"-60<br/><span style='color:gray;font-size:small'>UTC+01:00</span>",
  	"0<br/><span style='color:gray;font-size:small'>UTC+00:00</span>",
  	"60<br/><span style='color:gray;font-size:small'>UTC-01:00</span>",
  	"120<br/><span style='color:gray;font-size:small'>UTC-02:00</span>",
  	"180<br/><span style='color:gray;font-size:small'>UTC-03:00</span>",
  	"210<br/><span style='color:gray;font-size:small'>UTC-03:30</span>",
  	"240<br/><span style='color:gray;font-size:small'>UTC-04:00</span>",
  	"300<br/><span style='color:gray;font-size:small'>UTC-05:00</span>",
  	"360<br/><span style='color:gray;font-size:small'>UTC-06:00</span>",
  	"420<br/><span style='color:gray;font-size:small'>UTC-07:00</span>",
  	"480<br/><span style='color:gray;font-size:small'>UTC-08:00</span>",
  	"540<br/><span style='color:gray;font-size:small'>UTC-09:00</span>",
  	"570<br/><span style='color:gray;font-size:small'>UTC-09:30</span>",
  	"600<br/><span style='color:gray;font-size:small'>UTC-10:00</span>",
  	"660<br/><span style='color:gray;font-size:small'>UTC-11:00</span>",
  	"720<br/><span style='color:gray;font-size:small'>UTC-12:00</span>"], help: 
{
	description: tr("The UTC offset is the difference in minutes from Coordinated Universal Time (UTC) for a particular place and date. Note that this means that the offset is positive if the local timezone is behind UTC and negative if it is ahead. For example, time zone UTC+10:00 (Australian Eastern Standard Time, Vladivostok Time, Chamorro Standard Time) corresponds to -600 offset, because 600 minutes equals to 10 hours."), examples:
	[
		{
			code:tr("Empty string"),description:tr("Don't set timezone UTC offset")
		},
		{
			code:"-60",description:tr("UTC+01:00 - Spain, France, Germany")
		},
		{
			code:"-120",description:tr("UTC+02:00 - Finland, Romania, Ukraine, Greece")
		}
	]
}

 }) %>

<%= _.template($('#input_constructor').html())({id:"TimezoneName", description:tr("Timezone name. Can be blank"), default_selector: "string", disable_int:true, variants: ["Europe/Berlin","America/Santiago"], help: 
{
	description: tr("Timezone name."), examples:
[
  {
	  code:tr("Empty string"),description:tr("Don't set timezone name")
  },
  {
	  code:"Europe/Berlin"
  }
]
}

}) %>
</div>

<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Set browser timezone. Timezone can be changed by "Proxy" action as well.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Site can obtain information about system timezone by using internal '</span><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset');return false">Date</a><span class="tr">' object. This action allows to spoof local time values returned by browser.</span></div>
      <div class="tooltip-paragraph-fold"><span class="tr">Full list of offsets can be found</span> <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/List_of_UTC_time_offsets');return false">here</a>, <span class="tr">list of timezone names can be found</span> <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/List_of_tz_database_time_zones');return false">here</a> .</div>
	  <div class="tr tooltip-paragraph-fold">Leave any field blank if you don't want to change it.</div>

      <div class="tr tooltip-paragraph-last-fold">It is recommended to use 'Proxy' action instead of this one, because it will set timezone automatically according to current proxy.</div>
</div>

<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="timezones_set_geolocation"><div class="container-fluid">
  <%= _.template($('#input_constructor').html())({id:"Latitude", description:tr("Latitude. Can be blank"), default_selector: "expression", disable_int:true, value_string: "", help: 
		{
			description: tr("Exact coordinates, which identifies your position. This value will be returned by browser as a response on location request from site."), examples:
			[
				{
					code:tr("Empty string"),description:tr("Don't set latitude")
				},
				{
					code:"10.433"
				}
			]
		}
 	}) %>
  <%= _.template($('#input_constructor').html())({id:"Longitude", description:tr("Longitude. Can be blank"), default_selector: "expression", disable_int:true, value_string: "", help: 
		{
			description: tr("Exact coordinates, which identifies your position. This value will be returned by browser as a response on location request from site."), examples:
			[
				{
					code:tr("Empty string"),description:tr("Don't set longitude")
				},
				{
					code:"10.433"
				}
			]
		} }) %>
  

   <%= _.template($('#input_constructor').html())({id:"GeolocationObject", description:tr("Geolocation object"), default_selector: "expression", disable_int:true, disable_editor:true, disable_string:true, use_textarea:true, size: 8, disable_type_chooser:true,textarea_height:180, value_string: "{\n   accuracy: 4413,\n   altitude: null,\n   altitudeAccuracy: null,\n   heading: null,\n  speed: null\n}", help: {description: tr("This field contains properties of returned gelocation object. By changing this object, you can tweak, for example, accuracy property, or others. This object should not include latitude and longitude, they are set through separate settings.")}}) %>

</div>

<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Set browser location. Geolocation can be changed by "Proxy" action as well.</div>
      <div class="tooltip-paragraph-fold"><span class="tr">Site can obtain information about your position using </span><a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API');return false">following api</a><span class="tr">. This action allows to spoof position returned by browser.</span></div>
      <div class="tr tooltip-paragraph-fold">Using this action is not necessary to hide your location, because coordintes can be obtained only after user accepts request from site in a special popup window. By default, if you don't use this action, this popup is rejected by BAS.</div>
	  <div class="tr tooltip-paragraph-fold">Leave any field blank if you don't want to change it.</div>
	  <div class="tooltip-paragraph-fold"><span class="tr">Use "Geolocation object" property to tweak resulting object </span><a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://developer.mozilla.org/en-US/docs/Web/API/GeolocationCoordinates');return false">GeolocationCoordinates</a></div>


      <div class="tr tooltip-paragraph-last-fold">It is recommended to use 'Proxy' action instead of this one, because it will set position automatically according to current proxy.</div>
</div>


<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="timezones_ip_info"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"Value", description:tr("Ip address"), default_selector: "string", disable_int:true, help: 
{
	description: tr("A string which contains ip address. Ipv6 string should be enclosed with square brackets."), examples:
	[
		{
			code:"140.97.75.15",description:tr("Ipv4 example")
		},
		{
			code:"<s>140.97.75.15:8080</s>",description:tr("Not correct, ip string can't contain port.")
		},
		{
			code:"[2a03:2880:f11c:8083:face:b00c:0:25de]",description:tr("Ipv6 example")
		}
	]
}}) %>
<%= _.template($('#variable_constructor').html())({id:"SaveValid", description:tr("Is Valid"), default_variable: "IPINFO_VALID", help: 
{
	description: tr("If ip was parsed correctly. This values must always be checked before others."), examples:
	[
		{
			code:"true",description:tr("Ip was parsed correctly")
		},
		{
			code:"false",description:tr("failed to parse ip")
		}
	]
}
}) %>
<%= _.template($('#variable_constructor').html())({id:"SaveCountry", description:tr("Country"), default_variable: "IPINFO_COUNTRY", help: 
{
	description: tr("Country abbreviation"), examples:
	[
		{
			code:"US",description:tr("United States")
		},
		{
			code:"RU",description:tr("Russian Federation")
		}
	]
}}) %>
<%= _.template($('#variable_constructor').html())({id:"SaveCity", description:tr("City"), default_variable: "IPINFO_CITY", help: 
{
	description: tr("Ip city"), examples:
	[
		{
			code:"Boston"
		},
		{
			code:"Moscow"
		}
	]
}}) %>
<%= _.template($('#variable_constructor').html())({id:"SaveLatitude", description:tr("Latitude"), default_variable: "IPINFO_LATITUDE", help: 
		{
			description: tr("Exact coordinate, which identifies ip position."), examples:
			[
				{
					code:"10.433"
				}
			]
		}}) %>
<%= _.template($('#variable_constructor').html())({id:"SaveLongitude", description:tr("Longitude"), default_variable: "IPINFO_LONGITUDE", help: 
		{
			description: tr("Exact coordinate, which identifies ip position."), examples:
			[
				{
					code:"10.433"
				}
			]
		}}) %>
<%= _.template($('#variable_constructor').html())({id:"SaveTimezone", description:tr("Timezone"), default_variable: "IPINFO_TIMEZONE", help: 
		{
			description: tr("Timezone name."), examples:
			[
				{
					code:"Europe/Lisbon"
				},
				{
					code:"Asia/Dubai"
				}
			]
		}}) %>
<%= _.template($('#variable_constructor').html())({id:"SaveOffset", description:tr("Offset"), default_variable: "IPINFO_OFFSET", help: 
{
	description: tr("The UTC offset is the difference in minutes from Coordinated Universal Time (UTC) to the ip local time. Note that this means that the offset is positive if the local timezone is behind UTC and negative if it is ahead. For example, time zone UTC+10:00 (Australian Eastern Standard Time, Vladivostok Time, Chamorro Standard Time) corresponds to -600 offset, because 600 minutes equals to 10 hours."), examples:
	[
		{
			code:"-60",description:tr("UTC+01:00 - Spain, France, Germany")
		},
		{
			code:"-120",description:tr("UTC+02:00 - Finland, Romania, Ukraine, Greece")
		}
	]
}}) %>
<%= _.template($('#variable_constructor').html())({id:"SaveDstOffset", description:tr("Dst Offset"), default_variable: "IPINFO_DST_OFFSET", help: 
{
	description: tr("An offset for daylight saving time.")
}}) %>
</div>






<div class="container-fluid resize">
	<%= _.template($('#ip_information').html())() %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Get information for selected ip, this includes timezone UTC offset and other.</div>
    <div class="tr tooltip-paragraph-last-fold">To obtain ip information internal database or external service is used, check "IP information" section for more details.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="normalize_url"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"url", description: "URL", default_selector: "string", disable_int:true, value_string: "", help: {description: tr("String containing the URL with want to normalize."),examples:[{code:"https://en.wikipedia.org/wiki/URL/"},{code:"</br>//fingerprints.bablosoft.com/#testing/"},{code:"</br>rucaptcha.com/in.php?key=1abc234de56fab7c89012d34e56fa7b8</br>&method=userrecaptcha&version=enterprise&action=verify</br>&min_score=0.3</br>&googlekey=6LfZil0UAAAAAAdm1Dpzsw9q0F11-bmervx9g5fE&pageurl=http://mysite.com/page/"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"default_protocol", description: tr("Default protocol"), variants:["https","http","wss","ws","ftps","ftp","file"], default_selector: "string", disable_int:true, value_string: "http", help: {description: tr("The protocol to be added if the URL does not contain one."),examples:[{code:"http",description:"URL <code style=\"font-size:85%\">testsite.com/</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">http://testsite.com</code>"},{code:"https",description:"URL <code style=\"font-size:85%\">testsite.com</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">https://testsite.com</code>"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"base_url", description: tr("Base URL") + ". " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("The URL used when the main URL is relative."),examples:[{code:"https://en.wikipedia.org"},{code:"https://fingerprints.bablosoft.com"},{code:"https://rucaptcha.com"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"remove_query_parameters", description: tr("Remove query parameters") + ". " + tr("Can be blank"), default_selector: "expression", disable_int:true, value_string: "[/^utm_\w+/i]", help: {description: tr("Optional parameter.") + " " + tr("List of strings or regular expressions.") + " " + tr("Query parameters whose names match any of the specified list items will be removed.") + " " + tr("As a list, you can use a string consisting of the names of the query parameters, separated by commas."),examples:[{code:"[/^utm_\w+/i]"},{code:"[\"foo\", \"ref\"]"},{code:"[\"bar\", \"test\"]"},{code:"foo, bar, top"},{code:"test,ref,bottom"},{code:tr("Empty string"),description:tr("Don't remove query parameters")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"remove_directory_index", description: tr("Remove directory index") + ". " + tr("Can be blank"), default_selector: "expression", disable_int:true, value_string: "[/^index\.[a-z]+$/]", help: {description: tr("Optional parameter.") + " " + tr("List of strings or regular expressions.") + " " + tr("Directory indexes that match any of the specified list items will be removed.") + " " + tr("As a list, you can use a string consisting of directory indexes, separated by commas."),examples:[{code:"[/^index\.[a-z]+$/]"},{code:"[/^default\.[a-z]+$/]"},{code:"[\"index.php\", \"default.php\"]"},{code:"index.html, index.php, default.php"},{code:"index.html,index.php,default.php"},{code:tr("Empty string"),description:tr("Don't remove directory index")}]} }) %>

<%= _.template($('#checkbox').html())({id: "Check", title: tr("Normalize protocol"), checked: true, help: {title:tr("Normalize protocol"),description:tr("If enabled and the URL contains a relative protocol, then the protocol from the \"Default protocol\" parameter will be added to the URL."),examples:[{code:tr("Activated"),description:"URL <code style=\"font-size:85%\">//testsite.com/</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">http://testsite.com</code>"},{code:"<br/>" + tr("Deactivated"),description:"URL <code style=\"font-size:85%\">//testsite.com/</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">//testsite.com</code>"}]}}) %>

<%= _.template($('#radio').html())({id: "Check11", name: "force", title: tr("No forced protocol change"), checked: true}) %>

<%= _.template($('#radio').html())({id: "Check2", name: "force", title: tr("Force http"), help: {title:tr("Force http"),description:tr("If enabled, the https protocol will be replaced with http in the URL."),examples:[{code:tr("Activated"),description:"URL <code style=\"font-size:85%\">https://testsite.com/</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">http://testsite.com</code>"},{code:"<br/>" + tr("Deactivated"),description:"URL <code style=\"font-size:85%\">https://testsite.com/</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">https://testsite.com</code>"}]}}) %>

<%= _.template($('#radio').html())({id: "Check3", name: "force", title: tr("Force https"), help: {title:tr("Force https"),description:tr("If enabled, the http protocol will be replaced with https in the URL."),examples:[{code:tr("Activated"),description:"URL <code style=\"font-size:85%\">http://testsite.com/</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">https://testsite.com</code>"},{code:"<br/>" + tr("Deactivated"),description:"URL <code style=\"font-size:85%\">http://testsite.com/</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">http://testsite.com</code>"}]}}) %>

<%= _.template($('#checkbox').html())({id: "Check4", title: tr("Strip authentication"), checked: true, help: {title:tr("Strip authentication"),description:tr("If enabled, authentication data will be stripped from the URL."),examples:[{code:tr("Activated"),description:"URL <code style=\"font-size:85%\">user:pass@testsite.com/</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">http://testsite.com</code>"},{code:"<br/>" + tr("Deactivated"),description:"URL <code style=\"font-size:85%\">user:pass@testsite.com/</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">http://user:pass@testsite.com</code>"}]}}) %>

<%= _.template($('#checkbox').html())({id: "Check5", title: tr("Strip query"), help: {title:tr("Strip query"),description:tr("If enabled, the query will be stripped from the URL."),examples:[{code:tr("Activated"),description:"URL <code style=\"font-size:85%\">https://testsite.com/api.php?a=one&b=two&c=three</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">https://testsite.com/api.php</code>"},{code:"<br/>" + tr("Deactivated"),description:"URL <code style=\"font-size:85%\">testsite.com/api.php?a=one&b=two&c=three</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">http://testsite.com/api.php?a=one&b=two&c=three</code>"}]}}) %>

<%= _.template($('#checkbox').html())({id: "Check6", title: tr("Strip fragment"), help: {title:tr("Strip fragment"),description:tr("If enabled, the fragment will be stripped from the URL."),examples:[{code:tr("Activated"),description:"URL <code style=\"font-size:85%\">testsite.com/info.html#fragment</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">http://testsite.com/info.html</code>"},{code:"<br/>" + tr("Deactivated"),description:"URL <code style=\"font-size:85%\">testsite.com/info.html#fragment</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">http://testsite.com/info.html#fragment</code>"}]}}) %>

<%= _.template($('#checkbox').html())({id: "Check7", title: tr("Strip protocol"), help: {title:tr("Strip protocol"),description:tr("If enabled, the protocol will be stripped from the URL."),examples:[{code:tr("Activated"),description:"URL <code style=\"font-size:85%\">https://testsite.com/</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">testsite.com</code>"},{code:"<br/>" + tr("Deactivated"),description:"URL <code style=\"font-size:85%\">https://testsite.com/</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">https://testsite.com</code>"}]}}) %>

<%= _.template($('#checkbox').html())({id: "Check8", title: tr("Strip WWW"), checked: true, help: {title:tr("Strip WWW"),description:tr("If enabled, the WWW will be stripped from the URL."),examples:[{code:tr("Activated"),description:"URL <code style=\"font-size:85%\">https://www.testsite.com/</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">https://testsite.com</code>"},{code:"<br/>" + tr("Deactivated"),description:"URL <code style=\"font-size:85%\">https://www.testsite.com/</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">https://www.testsite.com</code>"}]}}) %>

<%= _.template($('#checkbox').html())({id: "Check9", title: tr("Remove trailing slash"), checked: true, help: {title:tr("Remove trailing slash"),description:tr("If enabled, the trailing slash will be removed from the URL."),examples:[{code:tr("Activated"),description:"URL <code style=\"font-size:85%\">testsite.com/info/</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">http://testsite.com/info</code>"},{code:"<br/>" + tr("Deactivated"),description:"URL <code style=\"font-size:85%\">testsite.com/info/</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">http://testsite.com/info/</code>"}]}}) %>

<%= _.template($('#checkbox').html())({id: "Check10", title: tr("Sort query parameters"), checked: true, help: {title:tr("Sort query parameters"),description:tr("If enabled, the query parameters will be sorted alphabetically by name."),examples:[{code:tr("Activated"),description:"URL <code style=\"font-size:85%\">https://testsite.com/api.php?b=two&a=one&c=three</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">https://testsite.com/api.php?a=one&b=two&c=three</code>"},{code:"<br/>" + tr("Deactivated"),description:"URL <code style=\"font-size:85%\">testsite.com/api.php?b=two&a=one&c=three</code> " + tr("will be normalized to") + " <code style=\"font-size:85%\">http://testsite.com/api.php?b=two&a=one&c=three</code>"}]}}) %>

<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "NORMALIZED_URL", help: {description: tr("Variable in which, after successful execution of the action, the final URL will be written."), examples:[{code:"https://en.wikipedia.org/wiki/URL"},{code:"</br>http://fingerprints.bablosoft.com/#testing"},{code:"</br>http://rucaptcha.com/in.php?key=1abc234de56fab7c89012d34e56fa7b8</br>&method=userrecaptcha&version=enterprise&action=verify</br>&min_score=0.3</br>&googlekey=6LfZil0UAAAAAAdm1Dpzsw9q0F11-bmervx9g5fE&pageurl=http://mysite.com/page"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Normalize URL.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">This action will return a string containing the URL, normalized according to the specified parameters.</span> <span class="tr">You can learn more about the URL normalization in <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/URI_normalization');return false">Wiki</a>.</span></div>
	<div class="tr tooltip-paragraph-fold">For example, the URL <code>"www.site.com/api.php?b=two&a=one&c=three"</code> will be normalized to <code>"https://site.com/api.php?a=one&b=two&c=three"</code> if "https" is specified in the "Default protocol" parameter and the "Strip WWW", "Sort query parameters" parameters are enabled.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">The "Normalize Protocol" parameter is responsible for normalizing the relative protocol. You can learn more about the relative protocol in</span> <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/Wikipedia:Protocol-relative_URL');return false">Wiki</a>.</div>
	<div class="tr tooltip-paragraph-fold">You can get a list of links from a string using the "Extract all links" action from the "String" module.</div>
	<div class="tr tooltip-paragraph-fold">You can parse a link to items using the "Parse URL" action.</div>
	<div class="tr tooltip-paragraph-fold">You can generate a link from items using the "Generate URL" action.</div>
	<div class="tr tooltip-paragraph-last-fold">You can change link items using the "Change URL" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="parse_url"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"url", description: tr("URL"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("String containing the URL with want to parse."),examples:[{code:"https://en.wikipedia.org/wiki/URL"},{code:"</br>https://fingerprints.bablosoft.com/#testing"},{code:"</br>https://rucaptcha.com/in.php?key=1abc234de56fab7c89012d34e56fa7b8</br>&method=userrecaptcha&version=enterprise&action=verify</br>&min_score=0.3</br>&googlekey=6LfZil0UAAAAAAdm1Dpzsw9q0F11-bmervx9g5fE&pageurl=http://mysite.com/page/"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"protocol", description:tr("Protocol/Scheme"), default_variable: "PARSED_URL_PROTOCOL", help: {description: tr("This variable will contain the protocol/scheme of the specified URL.") + " " + tr("The scheme of accessing a resource, in most cases, means a network protocol."), examples:[{code:"https"},{code:"http"},{code:"ws"},{code:"ftp"},{code:tr("Empty string"), description: tr("The specified URL does not contain the protocol/scheme")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"username", description:tr("Username"), default_variable: "PARSED_URL_USERNAME", help: {description: tr("This variable will contain the username of the specified URL.") + " " + tr("The username used to access the resource."), examples:[{code:"user1"},{code:"login321"},{code:"myname"},{code:tr("Empty string"), description: tr("The specified URL does not contain a username")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"password", description:tr("Password"), default_variable: "PARSED_URL_PASSWORD", help: {description: tr("This variable will contain the password for the specified user."), examples:[{code:"pass123"},{code:"mypassword111"},{code:"goodpass"},{code:tr("Empty string"), description: tr("The specified URL does not contain a password")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"host", description:tr("Host"), default_variable: "PARSED_URL_HOST", help: {description: tr("This variable will contain the hostname or ip (IPv4 or IPv6) of the specified URL."), examples:[{code:"en.wikipedia.org"},{code:"fingerprints.bablosoft.com"},{code:"rucaptcha.com"},{code:"127.0.0.1"},{code:"[2a00:1450:4025:401::67]"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"port", description:tr("Port"), default_variable: "PARSED_URL_PORT", help: {description: tr("This variable will contain the port of the specified URL."), examples:[{code:80},{code:443},{code:21},{code:tr("Empty string"), description: tr("The specified URL does not contain a port")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"path", description:tr("Path"), default_variable: "PARSED_URL_PATH", help: {description: tr("This variable will contain the path of the specified URL.") + " " + tr("The path specifies information about the location of the resource."), examples:[{code:"/wiki/URL"},{code:"/"},{code:"/in.php"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"query", description:tr("Query"), default_variable: "PARSED_URL_QUERY", help: {description: tr("This variable will contain an object consisting of query parameters and their values obtained from the specified URL.") + " " + tr("The query is the part of the URL that starts with the \"?\" character, parameters are separated by \"&\", and parameter name and value are separated by \"=\"."), examples:[{code:"{\"foo\":\"bar\"}"},{code:"</br>{\"query\":\"string\"}"},{code:"</br>{\"key\":\"1abc234de56fab7c89012d34e56fa7b8\", \"method\":\"userrecaptcha\", \"version\":\"enterprise\", \"action\":\"verify\", \"min_score\":0.3, \"googlekey\":\"6LfZil0UAAAAAAdm1Dpzsw9q0F11-bmervx9g5fE\", \"pageurl\":\"http://mysite.com/page/\"}"},{code:"</br>{ }", description: tr("The specified URL does not contain query parameters")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"hash", description:tr("Fragment"), default_variable: "PARSED_URL_FRAGMENT", help: {description: tr("This variable will contain the fragment of the specified URL.") + " " + tr("Fragment is the part of the URL that starts with the \"#\" character and can indicate a title within a document or the id attribute of an element. Following the link with the fragment, the browser will open the page and move the window to the specified element."), examples:[{code:"info"},{code:"testing"},{code:"solving_recaptcha_enterprise"},{code:tr("Empty string"), description: tr("The specified URL does not contain the fragment")}]} }) %>
<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
<%= _.template($('#input_constructor').html())({id:"base_url", description: tr("Base URL"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("The URL used when the main URL is relative."),examples:[{code:"https://en.wikipedia.org"},{code:"https://fingerprints.bablosoft.com"},{code:"https://rucaptcha.com"}]} }) %>

<%= _.template($('#checkbox').html())({id: "Check", title: tr("Normalize URL before parsing"), checked: true}) %>

<%= _.template($('#checkbox').html())({id: "Check2", title: tr("Complete action with fail if an invalid URL is specified"), checked: true}) %>


<%= _.template($('#block_end').html())() %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Parse the URL string into items.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">This action will save each item of the URL to its own variable.</span> <span class="tr">You can learn more about URL in <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/URL');return false">Wiki</a>.</span></div>
	<div class="tr tooltip-paragraph-fold">The query is saved as an object, where the key is the parameter name and the value is the parameter value.</div>
	<div class="tr tooltip-paragraph-fold">To get the value of the query parameter, use the JPath query <span style="color:black">$.key</span>, where key is the name of the parameter, in the "Get value" action from the "JSON" module.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">Before parsing, you can normalize the URL by activating the corresponding parameter in the additional settings, or use the "Normalize URL" action for flexible normalization.</span> <span class="tr">You can learn more about the URL normalization in <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/URI_normalization');return false">Wiki</a>.</span></div>
	<div class="tr tooltip-paragraph-fold">You can get a list of links from a string using the "Extract all links" action from the "String" module.</div>
	<div class="tr tooltip-paragraph-fold">You can generate a link from items using the "Generate URL" action.</div>
	<div class="tr tooltip-paragraph-fold">You can change link items using the "Change URL" action.</div>
	<div class="tr tooltip-paragraph-last-fold">If an invalid URL is specified, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action, or deactivate the corresponding parameter in the additional settings.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="generate_url"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"protocol", description:tr("Protocol/Scheme") + ". " + tr("Can be blank"), default_selector: "string", variants: ["https","http","wss","ws","ftps","ftp","file"], disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("The scheme of accessing a resource, in most cases, means a network protocol."), examples:[{code:"https"},{code:"http"},{code:"ws"},{code:"ftp"},{code:tr("Empty string"), description: tr("Don't add this item to the final URL")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"username", description:tr("Username") + ". " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("The username used to access the resource."), examples:[{code:"user1"},{code:"login321"},{code:"myname"},{code:tr("Empty string"), description: tr("Don't add this item to the final URL")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"password", description:tr("Password") + ". " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("The password for the specified user."), examples:[{code:"pass123"},{code:"mypassword111"},{code:"goodpass"},{code:tr("Empty string"), description: tr("Don't add this item to the final URL")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"host", description:tr("Host") + ". " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("Hostname or ip (IPv4 or IPv6)."), examples:[{code:"en.wikipedia.org"},{code:"fingerprints.bablosoft.com"},{code:"rucaptcha.com"},{code:"127.0.0.1"},{code:"[2a00:1450:4025:401::67]"},{code:tr("Empty string"), description: tr("Don't add this item to the final URL")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"port", description:tr("Port") + ". " + tr("Can be blank"), default_selector: "string", variants: ["80","443","21","70"], value_string: "", help: {description: tr("Optional parameter.") + " " + tr("Resource port."), examples:[{code:80},{code:443},{code:21},{code:tr("Empty string"), description: tr("Don't add this item to the final URL")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"path", description:tr("Path") + ". " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("The path specifying information about the location of the resource."), examples:[{code:"/wiki/URL"},{code:"/"},{code:"/in.php"},{code:tr("Empty string"), description: tr("Don't add this item to the final URL")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"query", description:tr("Query") + ". " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("Object or query string.") + " " + tr("The query is the part of the URL that starts with the \"?\" character, parameters are separated by \"&\", and parameter name and value are separated by \"=\"."), examples:[{code:"{\"foo\":\"bar\"}"},{code:"</br>{\"query\":\"string\"}"},{code:"</br>sitekey=10000000-ffff-ffff-ffff-000000000001&pageurl=http://mysite.com/register"},{code:"</br>" + tr("Empty string"), description: tr("Don't add this item to the final URL")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"hash", description:tr("Fragment") + ". " + tr("Can be blank"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("Fragment is the part of the URL that starts with the \"#\" character and can indicate a title within a document or the id attribute of an element. Following the link with the fragment, the browser will open the page and move the window to the specified element."), examples:[{code:"info"},{code:"testing"},{code:"solving_recaptcha_enterprise"},{code:tr("Empty string"), description: tr("Don't add this item to the final URL")}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "GENERATED_URL", help: {description: tr("Variable in which, after successful execution of the action, the final URL will be written."), examples:[{code:"https://en.wikipedia.org/wiki/URL"},{code:"</br>http://fingerprints.bablosoft.com/#testing"},{code:"</br>http://rucaptcha.com/in.php?key=1abc234de56fab7c89012d34e56fa7b8</br>&method=userrecaptcha&version=enterprise&action=verify</br>&min_score=0.3</br>&googlekey=6LfZil0UAAAAAAdm1Dpzsw9q0F11-bmervx9g5fE&pageurl=http://mysite.com/page"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Generate URL from specified items.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">This action will return a string containing the final URL.</span> <span class="tr">You can learn more about URL in <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/URL');return false">Wiki</a>.</span></div>
	<div class="tr tooltip-paragraph-fold">Specify values for the items need to be added to the URL, leave empty items that do not need to be added.</div>
	<div class="tr tooltip-paragraph-fold">The query must be specified as an object, where the key is the name of the parameter and the value is the value of the parameter, example: <code>{"foo":"bar"}</code>. Or as a string, in which parameters are separated by "&amp;", and the parameter name and its value are separated by "=", example: <code>"foo=bar"</code>.</div>
	<div class="tr tooltip-paragraph-fold">You can parse a link to items using the "Parse URL" action.</div>
	<div class="tr tooltip-paragraph-last-fold">You can change link items using the "Change URL" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="change_url"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"url", description: tr("URL"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("String containing the URL with want to change."),examples:[{code:"https://en.wikipedia.org/wiki/URL"},{code:"</br>https://fingerprints.bablosoft.com/#testing"},{code:"</br>https://rucaptcha.com/in.php?key=1abc234de56fab7c89012d34e56fa7b8</br>&method=userrecaptcha&version=enterprise&action=verify</br>&min_score=0.3</br>&googlekey=6LfZil0UAAAAAAdm1Dpzsw9q0F11-bmervx9g5fE&pageurl=http://mysite.com/page/"}]} }) %>
<%= _.template($('#input_constructor').html())({id:"protocol", description:tr("Protocol/Scheme") + ". " + tr("Can be blank"), default_selector: "string", variants: ["-BAS-CLEAR-<br/><span style='color:gray;font-size:small'>" + tr("Remove this item from the specified URL") + "</span>","<br/>" + tr("Empty string") + "<br/><span style='color:gray;font-size:small'>" + tr("Do not change this item in the specified URL") + "</span>","https","http","wss","ws","ftps","ftp","file"], disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("The scheme of accessing a resource, in most cases, means a network protocol."), examples:[{code:"https"},{code:"http"},{code:"ws"},{code:"ftp"},{code:tr("Empty string"), description: tr("Do not change this item in the specified URL")},{code:"-BAS-CLEAR-", description: tr("Remove this item from the specified URL")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"username", description:tr("Username") + ". " + tr("Can be blank"), default_selector: "string", variants: ["-BAS-CLEAR-<br/><span style='color:gray;font-size:small'>" + tr("Remove this item from the specified URL") + "</span>","<br/>" + tr("Empty string") + "<br/><span style='color:gray;font-size:small'>" + tr("Do not change this item in the specified URL") + "</span>"], disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("The username used to access the resource."), examples:[{code:"user1"},{code:"login321"},{code:"myname"},{code:tr("Empty string"), description: tr("Do not change this item in the specified URL")},{code:"-BAS-CLEAR-", description: tr("Remove this item from the specified URL")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"password", description:tr("Password") + ". " + tr("Can be blank"), default_selector: "string", variants: ["-BAS-CLEAR-<br/><span style='color:gray;font-size:small'>" + tr("Remove this item from the specified URL") + "</span>","<br/>" + tr("Empty string") + "<br/><span style='color:gray;font-size:small'>" + tr("Do not change this item in the specified URL") + "</span>"], disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("The password for the specified user."), examples:[{code:"pass123"},{code:"mypassword111"},{code:"goodpass"},{code:tr("Empty string"), description: tr("Do not change this item in the specified URL")},{code:"-BAS-CLEAR-", description: tr("Remove this item from the specified URL")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"host", description:tr("Host") + ". " + tr("Can be blank"), default_selector: "string", variants: ["-BAS-CLEAR-<br/><span style='color:gray;font-size:small'>" + tr("Remove this item from the specified URL") + "</span>","<br/>" + tr("Empty string") + "<br/><span style='color:gray;font-size:small'>" + tr("Do not change this item in the specified URL") + "</span>"], disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("Hostname or ip (IPv4 or IPv6)."), examples:[{code:"en.wikipedia.org"},{code:"fingerprints.bablosoft.com"},{code:"rucaptcha.com"},{code:"127.0.0.1"},{code:"[2a00:1450:4025:401::67]"},{code:tr("Empty string"), description: tr("Do not change this item in the specified URL")},{code:"-BAS-CLEAR-", description: tr("Remove this item from the specified URL")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"port", description:tr("Port") + ". " + tr("Can be blank"), default_selector: "string", variants: ["-BAS-CLEAR-<br/><span style='color:gray;font-size:small'>" + tr("Remove this item from the specified URL") + "</span>","<br/>" + tr("Empty string") + "<br/><span style='color:gray;font-size:small'>" + tr("Do not change this item in the specified URL") + "</span>","80","443","21","70"], value_string: "", help: {description: tr("Optional parameter.") + " " + tr("Resource port."), examples:[{code:80},{code:443},{code:21},{code:tr("Empty string"), description: tr("Do not change this item in the specified URL")},{code:"-BAS-CLEAR-", description: tr("Remove this item from the specified URL")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"path", description:tr("Path") + ". " + tr("Can be blank"), default_selector: "string", variants: ["-BAS-CLEAR-<br/><span style='color:gray;font-size:small'>" + tr("Remove this item from the specified URL") + "</span>","<br/>" + tr("Empty string") + "<br/><span style='color:gray;font-size:small'>" + tr("Do not change this item in the specified URL") + "</span>"], disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("The path specifying information about the location of the resource."), examples:[{code:"/wiki/URL"},{code:"/"},{code:"/in.php"},{code:tr("Empty string"), description: tr("Do not change this item in the specified URL")},{code:"-BAS-CLEAR-", description: tr("Remove this item from the specified URL")}]} }) %>
<%= _.template($('#input_constructor').html())({id:"query", description:tr("Query") + ". " + tr("Can be blank"), default_selector: "string", variants: ["-BAS-CLEAR-<br/><span style='color:gray;font-size:small'>" + tr("Remove this item from the specified URL") + "</span>","<br/>" + tr("Empty string") + "<br/><span style='color:gray;font-size:small'>" + tr("Do not change this item in the specified URL") + "</span>"], disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("Object or query string.") + " " + tr("The query is the part of the URL that starts with the \"?\" character, parameters are separated by \"&\", and parameter name and value are separated by \"=\"."), examples:[{code:"{\"foo\":\"bar\"}"},{code:"</br>{\"query\":\"string\"}"},{code:"</br>sitekey=10000000-ffff-ffff-ffff-000000000001&pageurl=http://mysite.com/register"},{code:"</br>" + tr("Empty string"), description: tr("Do not change this item in the specified URL")},{code:"</br>" + "-BAS-CLEAR-", description: tr("Remove this item from the specified URL")},{code:"</br>" + "{\"c\": \"-BAS-CLEAR-\"}", description: tr("Remove the \"c\" item from the query if the \"Clear old query string\" parameter is disabled")}]} }) %>


<%= _.template($('#checkbox').html())({id: "Check3", title: tr("Clear old query string"), checked: true, help: {title:tr("Clear old query string"),description:tr("If enabled, when specifying the \"Query\" parameter, its value will completely replace the old query string. If deactivated, when specifying the \"Query\" parameter, its value will be merged with the value of the old query string."),examples:[{code:tr("Activated"),description:"URL <code style=\"font-size:85%\">\"https://site.com/?a=b&c=d\"</code> " + tr("will be changed to") + " <code style=\"font-size:85%\">\"https://site.com/?f=g\"</code>, " + tr("if the query is") + " <code style=\"font-size:85%\">\"f=g\"</code> " + tr("or") + " <code style=\"font-size:85%\">{\"f\":\"g\"}</code>"},{code:"<br/>" + tr("Deactivated"),description:"URL <code style=\"font-size:85%\">\"https://site.com/?a=b&c=d\"</code> " + tr("will be changed to") + " <code style=\"font-size:85%\">\"https://site.com/?a=b&c=d&f=g\"</code>, " + tr("if the query is") + " <code style=\"font-size:85%\">\"f=g\"</code> " + tr("or") + " <code style=\"font-size:85%\">{\"f\":\"g\"}</code>"}]}}) %>



<%= _.template($('#input_constructor').html())({id:"hash", description:tr("Fragment") + ". " + tr("Can be blank"), default_selector: "string", variants: ["-BAS-CLEAR-<br/><span style='color:gray;font-size:small'>" + tr("Remove this item from the specified URL") + "</span>","<br/>" + tr("Empty string") + "<br/><span style='color:gray;font-size:small'>" + tr("Do not change this item in the specified URL") + "</span>"], disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("Fragment is the part of the URL that starts with the \"#\" character and can indicate a title within a document or the id attribute of an element. Following the link with the fragment, the browser will open the page and move the window to the specified element."), examples:[{code:"info"},{code:"testing"},{code:"solving_recaptcha_enterprise"},{code:tr("Empty string"), description: tr("Do not change this item in the specified URL")},{code:"-BAS-CLEAR-", description: tr("Remove this item from the specified URL")}]} }) %>
<%= _.template($('#block_start').html())({id:"Additional", name: tr("Additional settings"), description: ""}) %>
<%= _.template($('#input_constructor').html())({id:"base_url", description: tr("Base URL"), default_selector: "string", disable_int:true, value_string: "", help: {description: tr("Optional parameter.") + " " + tr("The URL used when the main URL is relative."),examples:[{code:"https://en.wikipedia.org"},{code:"https://fingerprints.bablosoft.com"},{code:"https://rucaptcha.com"}]} }) %>

<%= _.template($('#checkbox').html())({id: "Check", title: tr("Normalize URL before changing"), checked: true}) %>

<%= _.template($('#checkbox').html())({id: "Check2", title: tr("Complete action with fail if an invalid URL is specified"), checked: true}) %>

<%= _.template($('#block_end').html())() %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "CHANGED_URL", help: {description: tr("Variable in which, after successful execution of the action, the final URL will be written."), examples:[{code:"https://en.wikipedia.org/wiki/URL"},{code:"</br>http://fingerprints.bablosoft.com/#testing"},{code:"</br>http://rucaptcha.com/in.php?key=1abc234de56fab7c89012d34e56fa7b8</br>&method=userrecaptcha&version=enterprise&action=verify</br>&min_score=0.3</br>&googlekey=6LfZil0UAAAAAAdm1Dpzsw9q0F11-bmervx9g5fE&pageurl=http://mysite.com/page"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Change the items of the specified URL.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">This action will return a string containing the changed URL.</span> <span class="tr">You can learn more about URL in <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/URL');return false">Wiki</a>.</span></div>
	<div class="tr tooltip-paragraph-fold">Specify new values for the items to be changed in the URL, specify <code>"-BAS-CLEAR-"</code> if the item needs to be removed, leave the field blank if the item does not need to be changed.</div>
	<div class="tr tooltip-paragraph-fold">The query must be specified as an object, where the key is the name of the parameter and the value is the value of the parameter, example: <code>{"foo":"bar"}</code>. Or as a string, in which parameters are separated by "&amp;", and the parameter name and its value are separated by "=", example: <code>"foo=bar"</code>.</div>
	<div class="tr tooltip-paragraph-fold">If the "Clear old query string" parameter is activated, then when the "Query" parameter is specified, its value will completely replace the old query string in the specified URL.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the URL is <code>"https://site.com/?a=b"</code>, the query is <code>{"c":"d"}</code> and the "Clear old query string" parameter is activated, then the action will return <code>"https://site.com/?c=d"</code>.</div>
	<div class="tr tooltip-paragraph-fold">If the "Clear old query string" parameter is disabled, specifying the "Query" parameter will merge its value with the value of the old query string in the specified URL. If an item with the same name is present in both the old and the new query, then only the value from the new query will be added to the final URL. Items present only in the old or only in the new query will be added to the final URL unchanged. Items new query containing <code>"-BAS-CLEAR-"</code> will be removed from the final URL.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the URL is <code>"https://site.com/?a=b&c=d&e=f"</code>, the query is <code>{"a":"i","c":"-BAS-CLEAR-","g":"h"}</code> and the "Clear old query string" parameter is disabled, then the action will return <code>"https://site.com/?a=i&e=f&g=h"</code>.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">Before changing, you can normalize the URL by activating the corresponding parameter in the additional settings, or use the "Normalize URL" action for flexible normalization.</span> <span class="tr">You can learn more about the URL normalization in <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/URI_normalization');return false">Wiki</a>.</span></div>
	<div class="tr tooltip-paragraph-fold">You can parse a link to items using the "Parse URL" action.</div>
	<div class="tr tooltip-paragraph-fold">You can generate a link from items using the "Generate URL" action.</div>
	<div class="tr tooltip-paragraph-last-fold">If an invalid URL is specified, the thread will stop with fail message. If you want to continue thread, use "Ignore errors" action, or deactivate the corresponding parameter in the additional settings.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="parse_ua"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"ua", description: "User-Agent", default_selector: "string", disable_int:true, value_string: "", help: {description: tr("String containing the User-Agent with want to parse."),examples:[{code:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"},{code:"</br>Mozilla/5.0 (Android 11; Mobile; rv:68.0) Gecko/68.0 Firefox/82.0"},{code:"</br>Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1"}]} }) %>

<%= _.template($('#variable_constructor').html())({id:"platform_type", description:tr("Platform type"), default_variable: "PARSED_UA_PLATFORM_TYPE", help: {description: tr("This variable will contain the platform type."), examples:[{code:"desktop"},{code:"mobile"},{code:"tablet"},{code:"tv"},{code:"car"},{code:"bot"}]} }) %>

<%= _.template($('#variable_constructor').html())({id:"browser_name", description:tr("Browser name"), default_variable: "PARSED_UA_BROWSER_NAME", help: {description: tr("This variable will contain the name of the browser."), examples:[{code:"Chrome"},{code:"Firefox"},{code:"Safari"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"browser_version", description:tr("Browser version"), default_variable: "PARSED_UA_BROWSER_VERSION", help: {description: tr("This variable will contain the version of the browser."), examples:[{code:"86.0.4240.198"},{code:"82.0"},{code:"14.0"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"browser_major_version", description:tr("Browser major version"), default_variable: "PARSED_UA_BROWSER_MAJOR_VERSION", help: {description: tr("This variable will contain the major version of the browser."), examples:[{code:86},{code:82},{code:14}]} }) %>

<%= _.template($('#variable_constructor').html())({id:"engine_name", description:tr("Engine name"), default_variable: "PARSED_UA_ENGINE_NAME", help: {description: tr("This variable will contain the name of the browser engine."), examples:[{code:"Blink"},{code:"Gecko"},{code:"WebKit"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"engine_version", description:tr("Engine version"), default_variable: "PARSED_UA_ENGINE_VERSION", help: {description: tr("This variable will contain the version of the browser engine."), examples:[{code:"86.0.4240.198"},{code:"82.0"},{code:"605.1.15"}]} }) %>

<%= _.template($('#variable_constructor').html())({id:"os_name", description:tr("OS name"), default_variable: "PARSED_UA_OS_NAME", help: {description: tr("This variable will contain the name of the operating system."), examples:[{code:tr("Android")},{code:"Windows"},{code:"Mac OS"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"os_version", description:tr("OS version"), default_variable: "PARSED_UA_OS_VERSION", help: {description: tr("This variable will contain the version of the operating system."), examples:[{code:tr("11")},{code:"10"},{code:"11.0.1"}]} }) %>

<%= _.template($('#variable_constructor').html())({id:"device_vendor", description:tr("Device vendor"), default_variable: "PARSED_UA_DEVICE_VENDOR", help: {description: tr("This variable will contain the name of the device vendor."), examples:[{code:"Samsung"},{code:"Asus"},{code:"Apple"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"device_model", description:tr("Device model"), default_variable: "PARSED_UA_DEVICE_MODEL", help: {description: tr("This variable will contain the device model."), examples:[{code:"SM-T865"},{code:"ASU2JS"},{code:"iPhone"}]} }) %>
<%= _.template($('#variable_constructor').html())({id:"device_type", description:tr("Device type"), default_variable: "PARSED_UA_DEVICE_TYPE", help: {description: tr("This variable will contain the device type."), examples:[{code:"tablet"},{code:"desktop"},{code:"mobile"}]} }) %>


<%= _.template($('#variable_constructor').html())({id:"cpu_architecture", description:tr("Processor architecture"), default_variable: "PARSED_UA_CPU_ARCHITECTURE", help: {description: tr("This variable will contain the processor architecture."), examples:[{code:tr("amd64")},{code:"ia[32/64]"},{code:"arm[64]"}]} }) %>
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Parse the User-Agent string into items.</div>
	<div class="tr tooltip-paragraph-fold">This action will save each User-Agent item to its own variable.</div>
	<div class="tr tooltip-paragraph-last-fold">User-agent is a string containing information about the browser used, operating system, device. You can learn more about User-agent from <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/User_agent');return false">Wiki</a>.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="punycode"><div class="container-fluid base64">
	<%= _.template($('#input_constructor').html())({id:"string", description:tr("String"), default_selector: "string", disable_int:true, help: {description: tr("Depending on mode data parameter is encoded punycode string which needs to be decoded, or ordinary string which must be encoded."), examples:[{code:"https://сайт.рф/index.html",description:tr("Arbitrary string. Works with encode mode")},{code:"https://xn--80aswg.xn--p1ai/index.html",description:tr("Encoded string. Works with decode mode")}]}}) %>
	<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "PUNYCODE_ENCODING_RESULT", help: {description: tr("Variable name with result. It will be encoded string in encode mode and decode result as string in decode mode.")}}) %>
	
	<%= _.template($('#combobox').html())({id: "Select", title: tr("Encode or decode"), items: [
		{value: "encode", "name": "encode", selected: true},
		{value: "decode", "name": "decode"},
	]
	}) %>
	
</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Encodes or decodes string to punycode.</div>
	<div class="tooltip-paragraph-fold"><span class="tr">Punycode is a method of converting sequences of Unicode characters to the ASCII character sequence allowed in domain names. You can learn more about Punycode in <a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://en.wikipedia.org/wiki/Punycode');return false">Wiki</a>.</span></div>
	<div class="tr tooltip-paragraph-fold">This action can work with in two modes: encode and decode. Modes can be switched with "Encode or decode" parameter. Depending on mode data parameter is encoded punycode string which needs to be decoded, or ordinary string which needs to be encoded.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"кто.рф"</code> is specified and encode mode is activated, the action will return <code>"xn--j1ail.xn--p1ai"</code>. And if the string <code>"https://xn--80aswg.xn--p1ai/index.html"</code> is specified and decode mode is activated, then the action will return <code>"https://сайт.рф/index.html"</code>.</div>
	<div class="tr tooltip-paragraph-last-fold">This action works with both domains and links.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="url_component"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"string", description:tr("String"), default_selector: "string", disable_int:true, help: {description: tr("Depending on mode data parameter is encoded string which needs to be decoded, or ordinary string containing the Url component which needs to be encoded."), examples:[{code:"?x=test",description:tr("Arbitrary string. Works with encode mode")},{code:"%3Fx%3Dtest",description:tr("Encoded string. Works with decode mode")}]}}) %>
<%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable to save the result"), default_variable: "URL_COMPONENT_ENCODING_RESULT", help: {description: tr("Variable name with result. It will be encoded string in encode mode and decode result as string in decode mode.")}}) %>

<%= _.template($('#combobox').html())({id: "Select", title: tr("Encode or decode"), items: [
  {value: "encode", "name": "encode", selected: true},
  {value: "decode", "name": "decode"}
]
}) %>


</div>
<div class="tooltipinternal">
	<div class="tr tooltip-paragraph-first-fold">Encodes or decodes string containing the Url component.</div>
	<div class="tr tooltip-paragraph-fold">This action can work with in two modes: encode and decode. Modes can be switched with "Encode or decode" parameter. Depending on mode data parameter is encoded string which needs to be decoded, or ordinary string containing the Url component which needs to be encoded.</div>
	<div class="tr tooltip-paragraph-fold">For example, if the string <code>"?x=test"</code> is specified and encode mode is activated, the action will return <code>"%3Fx%3Dtest"</code>. And if the string <code>"%D1%82%D0%B5%D1%81%D1%82"</code> is specified and decode mode is activated, then the action will return <code>"тест"</code>.</div>
	<div class="tr tooltip-paragraph-fold">You can get a list of links from a string using the "Extract all links" action from the "String" module.</div>
	<div class="tr tooltip-paragraph-last-fold">You can parse a link to items using the "Parse URL" action.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="user_notification_play_sound"><div class="container-fluid" >

</div>
<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Play sound notification.</div>
      <div class="tr tooltip-paragraph-last-fold">This action can attract user attention about important events during script execution.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="user_notification_user_input"><div class="container-fluid">
    <%= _.template($('#input_constructor').html())({id:"Label", description:tr("Label which is shown to user"), default_selector: "string", help: 
    {
	    description: tr("A text, which will be displayed to user together with input field. This text should explain what user needs to input.")
    }}) %>
    <%= _.template($('#variable_constructor').html())({id:"Variable", description:tr("Variable to save input"), default_variable: "USER_INPUT", help: 
    {
	    description: tr("Result, which was entered by user in user input field.")
    }}) %>
</div>
<div class="tooltipinternal">
    <div class="tr tooltip-paragraph-first-fold">Show user input field to user, wait until user will enter some value and save that value into variable.</div>
    <div class="tr tooltip-paragraph-fold">This action works like captcha, but instead of image, specified text is shown.</div>
    <div class="tr tooltip-paragraph-fold">This action has no timeout and will last until user won't enter something.</div>
    <div class="tr tooltip-paragraph-fold">User can input either some text, either cancel input. In first case action will return user input into variable, in second case thread will finish with error. You can avoid finishing thread by using 'Ignore Errors' action.</div>
    <div class="tr tooltip-paragraph-last-fold">If you want to get user input before script starts, or craft enhanced user interface, then it is better to user resource system.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="user_notification_web_interface_eval"><div class="container-fluid custom">
      <span data-preserve="true" data-preserve-type="constr" data-preserve-id="Code">
        <div id="Code" data-is-code-editor="true" data-force-string="true" style="height:calc(100vh - 115px);border: none; overflow: hidden; outline: none;border:1px solid #e0e0e0;" />
      </span>
      

      <%= "<s" + "cript>" %>
        window.Code = {Editor: null, InitialValue: ""}

        require(['vs/editor/editor.main'], function() {
          window.Code.Editor = createCodeEditor(document.getElementById('Code'), {
            value: window.Code.InitialValue
          });
        });
      <%= "</" + "script>" %>

      

      <div style="text-align:center;align-items: center; display: flex !important; justify-content: center;">
        <a tabindex="-1" href="#" data-toggle="modal" data-result-target="#Code" class="var" style="margin-right:15px">
          <span style="align-items: center; display: flex !important; justify-content: center;margin-top:5px">
            <svg class="dropdown-icon" width="16" height="16"  viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"  style="margin-right:10px">
              <path d="M7.5 12h1V9.5H11v-1H8.5V6h-1v2.5H5v1h2.5V12z" fill="#337ab7" />
              <path d="M.5 2v12h15V2H.5zm14 11h-13V5h13v8z" fill="#337ab7" />
            </svg>
            <span class="tr">Insert variable</span>
          </span>
        </a>
        <a tabindex="-1" href="#" data-toggle="modal" data-result-target="#Code" class="res">
          <span style="align-items: center; display: flex !important; justify-content: center;margin-top:5px">
            <svg class="dropdown-icon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right:10px">
              <path d="M1.5 1.5v13h13v-13h-13zm12 12h-11v-3h11v3zm0-4h-11v-3h11v3zm-1.5-6a.5.5 0 110 1 .5.5 0 010-1z" fill="#337ab7" />
              <path d="M12 8.5a.5.5 0 100-1 .5.5 0 000 1zM12 12.5a.5.5 0 100-1 .5.5 0 000 1z" fill="#337ab7" />
            </svg>
            <span class="tr">Load from file, user input, database</span>
          </span>
        </a>
      </div>
      <span class="short-description tr">Run javascript code in web interface context.</span>
    </div>



    <%= _.template($('#back').html())({action:"executeandadd", visible:true, modal_code_id:"custom-help-interface-" + (_K || "en")}) %> </script><script type="text/template" id="user_notification_manual_browser_control"><div class="container-fluid" >
	<%= _.template($('#input_constructor').html())({id:"Label", description:tr("Label which is shown to user"), default_selector: "string", help: 
		{
			description: tr("You can attach message when giving control to user in order to make him understand, what is a purpose of manual control and what he need to accomplish. Message can contain custom data like variables or resources."), examples:
			[
				{
					code:tr("Empty string")
				},
				{
					code:tr("Please solve captcha"),description:tr("Ask user to solve captcha")
				},
				{
					code:tr("Please input data for [[ACCOUNT]]"),description:tr("Use variable inside message")
				}
			]
		} 
	}) %>
</div>
<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Give control over the browser to user.</div>
      <div class="tr tooltip-paragraph-fold">This action will temporary establish direct control over browser. Every mouse movement and keyboard event will be sent to browser directly.</div>

      <div class="tooltip-paragraph-fold"><span class="tr">When user will finish controlling browser, he can click on link at a page bottom to hand control over browser back to script</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=browserautomationstudio_2019-02-24_13-56-59.png');return false">screen</a> ).</div>
      <div class="tooltip-paragraph-fold"><span class="tr">This action is meant to be used in run mode, if you want to control browser in record mode, hit following button</span> ( <a href="#" class="tr" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/lib/exe/fetch.php?cache=&media=browserautomationstudio_2019-02-24_14-15-11.png');return false">screen</a> ).
      </div>
      
	  <div class="tr tooltip-paragraph-fold">Developer can attach message when giving control to user in order to make him understand, what is a purpose of manual control and what he need to accomplish. Message can contain custom data like variables or resources.</div>
      <div class="tr tooltip-paragraph-fold">Typical use case would be to control browser in most of the script lifetime, while giving control to user only for a small task, like solving captcha type which is not supported by BAS natively.</div>
      <div class="tr tooltip-paragraph-last-fold">If you want obtain information from user, use 'Ask user input' action or resource system.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="XpathXml"><div class="container-fluid httpclientxpath">
  <%= _.template($('#input_constructor').html())({id:"Text", description:tr("Text To Apply"), default_selector: "string", disable_int:true, help: 
{
	description: tr("Text, target of xpath query. You can put any xml or html here. Not valid or damaged xml is also acceptable.")
}
}) %>
  <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Xpath Query"), default_selector: "string", disable_int:true,
        variants: ["//title<br/><span style='color:gray;font-size:small'>" + tr("Get page title") + "</span>","//a<br/><span style='color:gray;font-size:small'>" + tr("Get all links") + "</span>","//img<br/><span style='color:gray;font-size:small'>" + tr("Find image") + "</span>","//img/@src<br/><span style='color:gray;font-size:small'>" + tr("Find image source") + "</span>","//*[@id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by id") + "</span>","//*[contains(@class,'CLASS')]<br/><span style='color:gray;font-size:small'>" + tr("Find element by class") + "</span>","//*[contains(@class,'CLASS') and @id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by class and id") + "</span>","//div[@id='ID_PARENT']/div[@id='ID_CHILD']<br/><span style='color:gray;font-size:small'>" + tr("Find element which contains parent") + "</span>"],
       help: 
{
  description: tr("Xpath query"), examples:
  [
    {
      code:"//title",description:tr("Get page title.")
    },
    
    {
      code:"//a",description:tr("Get all links.")
    },
    
    {
      code:"//img",description:tr("Find image.")
    },
    
    {
      code:"//img/@src",description:tr("Find image source(image url).")
    }
    ,
    
    {
      code:"//*[@id='ID']",description:tr("Find element by id.")
    },
    
    {
      code:"//*[contains(@class,'CLASS')]",description:tr("Find element by class. Element can have several classes, so need to use contains function.")
    }
    ,
    
    {
      code:"//*[contains(@class,'CLASS') and @id='ID']",description:tr("Find element by class and id.")
    },
    
    {
      code:"//div[@id='ID_PARENT']/div[@id='ID_CHILD']",description:tr("Find element which contains parent.")
    }
  ]
}}) %>
  <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "XPATH_XML", help: 
{
  description: tr("Varibale, which will contain first element xml, which matches xpath query.")
}}) %>

  <%= _.template($('#checkbox').html())({id: "Check", title: tr("Fail on error"), checked: true}) %>

</div>
<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Execute xpath query and find xml of first matching element.</div>
      <div class="tr tooltip-paragraph-fold">This action, unlike 'Xpath Get Text', searches for element xml(html code).</div>
      <div class="tr tooltip-paragraph-fold">If element won't be found, then thread will stop with fail message. If you want to continue thread, use 'Ignore errors' action or uncheck 'Fail on error'.</div>
      <div class="tr tooltip-paragraph-fold">Html to apply query is obtained from 'Text To Apply' setting.</div>
      <div class="tr tooltip-paragraph-last-fold">If you want to apply xpath query to last http response, you need to use 'Http Client' module.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="XpathXmlList"><div class="container-fluid httpclientxpath">
  <%= _.template($('#input_constructor').html())({id:"Text", description:tr("Text To Apply"), default_selector: "string", disable_int:true, help: 
{
	description: tr("Text, target of xpath query. You can put any xml or html here. Not valid or damaged xml is also acceptable.")
}}) %>
  <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Xpath Query"), default_selector: "string", disable_int:true,
        variants: ["//title<br/><span style='color:gray;font-size:small'>" + tr("Get page title") + "</span>","//a<br/><span style='color:gray;font-size:small'>" + tr("Get all links") + "</span>","//img<br/><span style='color:gray;font-size:small'>" + tr("Find image") + "</span>","//img/@src<br/><span style='color:gray;font-size:small'>" + tr("Find image source") + "</span>","//*[@id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by id") + "</span>","//*[contains(@class,'CLASS')]<br/><span style='color:gray;font-size:small'>" + tr("Find element by class") + "</span>","//*[contains(@class,'CLASS') and @id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by class and id") + "</span>","//div[@id='ID_PARENT']/div[@id='ID_CHILD']<br/><span style='color:gray;font-size:small'>" + tr("Find element which contains parent") + "</span>"],
       help: 
{
  description: tr("Xpath query"), examples:
  [
    {
      code:"//title",description:tr("Get page title.")
    },
    
    {
      code:"//a",description:tr("Get all links.")
    },
    
    {
      code:"//img",description:tr("Find image.")
    },
    
    {
      code:"//img/@src",description:tr("Find image source(image url).")
    }
    ,
    
    {
      code:"//*[@id='ID']",description:tr("Find element by id.")
    },
    
    {
      code:"//*[contains(@class,'CLASS')]",description:tr("Find element by class. Element can have several classes, so need to use contains function.")
    }
    ,
    
    {
      code:"//*[contains(@class,'CLASS') and @id='ID']",description:tr("Find element by class and id.")
    },
    
    {
      code:"//div[@id='ID_PARENT']/div[@id='ID_CHILD']",description:tr("Find element which contains parent.")
    }
  ]
}}) %>
  <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "XPATH_XML_LIST", help: 
{
  description: tr("Varibale, which will contain list of all elements xml, which matches xpath query.")
}}) %>
</div>
<div class="tooltipinternal">
  <div class="tr tooltip-paragraph-first-fold">Execute xpath query and find xml of all elements matching query.</div>
  
  <div class="tr tooltip-paragraph-fold">This action, unlike 'Xpath Get Text List', searches for elements xml(html code).</div>
  <div class="tr tooltip-paragraph-fold">Result of this action is list, you can process it with 'List' module.</div>
  <div class="tr tooltip-paragraph-fold">If element won't be found, then list will be empty.</div>
  <div class="tr tooltip-paragraph-fold">Html to apply query is obtained from 'Text To Apply' setting.</div>
  <div class="tr tooltip-paragraph-last-fold">If you want to apply xpath query to last http response, you need to use 'Http Client' module.</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="XpathText"><div class="container-fluid httpclientxpath">
  <%= _.template($('#input_constructor').html())({id:"Text", description:tr("Text To Apply"), default_selector: "string", disable_int:true, help: 
{
	description: tr("Text, target of xpath query. You can put any xml or html here. Not valid or damaged xml is also acceptable.")
}}) %>
  <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Xpath Query"), default_selector: "string", disable_int:true,variants: ["//title<br/><span style='color:gray;font-size:small'>" + tr("Get page title") + "</span>","//a<br/><span style='color:gray;font-size:small'>" + tr("Get all links") + "</span>","//img<br/><span style='color:gray;font-size:small'>" + tr("Find image") + "</span>","//img/@src<br/><span style='color:gray;font-size:small'>" + tr("Find image source") + "</span>","//*[@id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by id") + "</span>","//*[contains(@class,'CLASS')]<br/><span style='color:gray;font-size:small'>" + tr("Find element by class") + "</span>","//*[contains(@class,'CLASS') and @id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by class and id") + "</span>","//div[@id='ID_PARENT']/div[@id='ID_CHILD']<br/><span style='color:gray;font-size:small'>" + tr("Find element which contains parent") + "</span>"], help: 
{
  description: tr("Xpath query"), examples:
  [
    {
      code:"//title",description:tr("Get page title.")
    },
    
    {
      code:"//a",description:tr("Get all links.")
    },
    
    {
      code:"//img",description:tr("Find image.")
    },
    
    {
      code:"//img/@src",description:tr("Find image source(image url).")
    }
    ,
    
    {
      code:"//*[@id='ID']",description:tr("Find element by id.")
    },
    
    {
      code:"//*[contains(@class,'CLASS')]",description:tr("Find element by class. Element can have several classes, so need to use contains function.")
    }
    ,
    
    {
      code:"//*[contains(@class,'CLASS') and @id='ID']",description:tr("Find element by class and id.")
    },
    
    {
      code:"//div[@id='ID_PARENT']/div[@id='ID_CHILD']",description:tr("Find element which contains parent.")
    }
  ]
}}) %>
  <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "XPATH_TEXT", help: 
{
  description: tr("Varibale, which will contain first element text, which matches xpath query.")
}}) %>
  <%= _.template($('#checkbox').html())({id: "Check", title: tr("Fail on error"), checked: true}) %>

  
</div>
<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Execute xpath query and find text of first matching element.</div>
      <div class="tr tooltip-paragraph-fold">Result of this action is text. For example if element has &lt;div&gt;word&lt;/div&gt; markup, then its text is 'word'.</div>
      <div class="tr tooltip-paragraph-fold">If you want to get element markup, use 'Xpath Get Xml'.</div>
      <div class="tr tooltip-paragraph-fold">If element won't be found, then thread will stop with fail message. If you want to continue thread, use 'Ignore errors' action or uncheck 'Fail on error'.</div>
      <div class="tr tooltip-paragraph-fold">Html to apply query is obtained from 'Text To Apply' setting.</div>
  	  <div class="tr tooltip-paragraph-last-fold">If you want to apply xpath query to last http response, you need to use 'Http Client' module.</div>
    </div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="XpathTextList"><div class="container-fluid httpclientxpath">
  <%= _.template($('#input_constructor').html())({id:"Text", description:tr("Text To Apply"), default_selector: "string", disable_int:true, help: 
{
	description: tr("Text, target of xpath query. You can put any xml or html here. Not valid or damaged xml is also acceptable.")
}}) %>
  <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Xpath Query"), default_selector: "string", disable_int:true,variants: ["//title<br/><span style='color:gray;font-size:small'>" + tr("Get page title") + "</span>","//a<br/><span style='color:gray;font-size:small'>" + tr("Get all links") + "</span>","//img<br/><span style='color:gray;font-size:small'>" + tr("Find image") + "</span>","//img/@src<br/><span style='color:gray;font-size:small'>" + tr("Find image source") + "</span>","//*[@id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by id") + "</span>","//*[contains(@class,'CLASS')]<br/><span style='color:gray;font-size:small'>" + tr("Find element by class") + "</span>","//*[contains(@class,'CLASS') and @id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by class and id") + "</span>","//div[@id='ID_PARENT']/div[@id='ID_CHILD']<br/><span style='color:gray;font-size:small'>" + tr("Find element which contains parent") + "</span>"], help: 
{
  description: tr("Xpath query"), examples:
  [
    {
      code:"//title",description:tr("Get page title.")
    },
    
    {
      code:"//a",description:tr("Get all links.")
    },
    
    {
      code:"//img",description:tr("Find image.")
    },
    
    {
      code:"//img/@src",description:tr("Find image source(image url).")
    }
    ,
    
    {
      code:"//*[@id='ID']",description:tr("Find element by id.")
    },
    
    {
      code:"//*[contains(@class,'CLASS')]",description:tr("Find element by class. Element can have several classes, so need to use contains function.")
    }
    ,
    
    {
      code:"//*[contains(@class,'CLASS') and @id='ID']",description:tr("Find element by class and id.")
    },
    
    {
      code:"//div[@id='ID_PARENT']/div[@id='ID_CHILD']",description:tr("Find element which contains parent.")
    }
  ]
}}) %>
  <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "XPATH_TEXT_LIST", help: 
{
  description: tr("Varibale, which will contain list of all elements text, which matches xpath query.")
}}) %>
</div>
<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Execute xpath query and find text of all elements matching query.</div>
      <div class="tr tooltip-paragraph-fold">This action searches for texts. For example if element has &lt;div&gt;word&lt;/div&gt; markup, then its text is 'word'.</div>

      <div class="tr tooltip-paragraph-fold">Result of this action is list, so you can process it with 'List' module.</div>
      <div class="tr tooltip-paragraph-fold">If element won't be found, then list will be empty.</div>
      <div class="tr tooltip-paragraph-fold">Html to apply query is obtained from 'Text To Apply' setting.</div>
  <div class="tr tooltip-paragraph-last-fold">If you want to apply xpath query to last http response, you need to use 'Http Client' module.</div>
    </div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="XpathCount"><div class="container-fluid httpclientxpath">
	  <%= _.template($('#input_constructor').html())({id:"Text", description:tr("Text To Apply"), default_selector: "string", disable_int:true, help: 
{
	description: tr("Text, target of xpath query. You can put any xml or html here. Not valid or damaged xml is also acceptable.")
}}) %>
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Xpath Query"), default_selector: "string", disable_int:true,variants: ["//title<br/><span style='color:gray;font-size:small'>" + tr("Get page title") + "</span>","//a<br/><span style='color:gray;font-size:small'>" + tr("Get all links") + "</span>","//img<br/><span style='color:gray;font-size:small'>" + tr("Find image") + "</span>","//img/@src<br/><span style='color:gray;font-size:small'>" + tr("Find image source") + "</span>","//*[@id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by id") + "</span>","//*[contains(@class,'CLASS')]<br/><span style='color:gray;font-size:small'>" + tr("Find element by class") + "</span>","//*[contains(@class,'CLASS') and @id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by class and id") + "</span>","//div[@id='ID_PARENT']/div[@id='ID_CHILD']<br/><span style='color:gray;font-size:small'>" + tr("Find element which contains parent") + "</span>"], help: 
{
  description: tr("Xpath query"), examples:
  [
    {
      code:"//title",description:tr("Get page title.")
    },
    
    {
      code:"//a",description:tr("Get all links.")
    },
    
    {
      code:"//img",description:tr("Find image.")
    },
    
    {
      code:"//img/@src",description:tr("Find image source(image url).")
    }
    ,
    
    {
      code:"//*[@id='ID']",description:tr("Find element by id.")
    },
    
    {
      code:"//*[contains(@class,'CLASS')]",description:tr("Find element by class. Element can have several classes, so need to use contains function.")
    }
    ,
    
    {
      code:"//*[contains(@class,'CLASS') and @id='ID']",description:tr("Find element by class and id.")
    },
    
    {
      code:"//div[@id='ID_PARENT']/div[@id='ID_CHILD']",description:tr("Find element which contains parent.")
    }
  ]
}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "XPATH_COUNT", help: 
{
  description: tr("This variable will be set to number of elements matching query."), examples:
  [
    {
      code:"0",description:tr("There are no elements which matches query.")
    },
    {
      code:"3",description:tr("There are 3 elements which matches query.")
    }
  ]
}}) %>
</div>
<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Execute xpath query and get number of element which matches.</div>
      <div class="tr tooltip-paragraph-fold">Html to apply query is obtained from 'Text To Apply' setting.</div>
  <div class="tr tooltip-paragraph-last-fold">If you want to apply xpath query to last http response, you need to use 'Http Client' module.</div>
    </div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="XpathExists"><div class="container-fluid httpclientxpath">
	  <%= _.template($('#input_constructor').html())({id:"Text", description:tr("Text To Apply"), default_selector: "string", disable_int:true, help: 
{
	description: tr("Text, target of xpath query. You can put any xml or html here. Not valid or damaged xml is also acceptable.")
}}) %>
      <%= _.template($('#input_constructor').html())({id:"Value", description:tr("Xpath Query"), default_selector: "string", disable_int:true,variants: ["//title<br/><span style='color:gray;font-size:small'>" + tr("Get page title") + "</span>","//a<br/><span style='color:gray;font-size:small'>" + tr("Get all links") + "</span>","//img<br/><span style='color:gray;font-size:small'>" + tr("Find image") + "</span>","//img/@src<br/><span style='color:gray;font-size:small'>" + tr("Find image source") + "</span>","//*[@id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by id") + "</span>","//*[contains(@class,'CLASS')]<br/><span style='color:gray;font-size:small'>" + tr("Find element by class") + "</span>","//*[contains(@class,'CLASS') and @id='ID']<br/><span style='color:gray;font-size:small'>" + tr("Find element by class and id") + "</span>","//div[@id='ID_PARENT']/div[@id='ID_CHILD']<br/><span style='color:gray;font-size:small'>" + tr("Find element which contains parent") + "</span>"], help: 
{
  description: tr("Xpath query"), examples:
  [
    {
      code:"//title",description:tr("Get page title.")
    },
    
    {
      code:"//a",description:tr("Get all links.")
    },
    
    {
      code:"//img",description:tr("Find image.")
    },
    
    {
      code:"//img/@src",description:tr("Find image source(image url).")
    }
    ,
    
    {
      code:"//*[@id='ID']",description:tr("Find element by id.")
    },
    
    {
      code:"//*[contains(@class,'CLASS')]",description:tr("Find element by class. Element can have several classes, so need to use contains function.")
    }
    ,
    
    {
      code:"//*[contains(@class,'CLASS') and @id='ID']",description:tr("Find element by class and id.")
    },
    
    {
      code:"//div[@id='ID_PARENT']/div[@id='ID_CHILD']",description:tr("Find element which contains parent.")
    }
  ]
}}) %>
      <%= _.template($('#variable_constructor').html())({id:"Save", description:tr("Variable To Save"), default_variable: "XPATH_EXISTS", help: 
{
  description: tr("This variable will be to true or false depending if there is element, which matches query."), examples:
  [
    {
      code:"true",description:tr("There is at leaset one element which matches query.")
    },
    {
      code:"false",description:tr("There are no elements which matches query.")
    }
  ]
}}) %>
</div>
<div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Check if there is at least one element matching xpath query.</div>
      <div class="tr tooltip-paragraph-fold">Html to apply query is obtained from 'Text To Apply' setting.</div>
  <div class="tr tooltip-paragraph-last-fold">If you want to apply xpath query to last http response, you need to use 'Http Client' module.</div>
    </div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %></script><script type="text/template" id="BACKPACK_Approve"><div class="container-fluid">
</div>
<div class="tooltipinternal">
<div class="tr tooltip-paragraph-first-fold">Согласиться с дейсвием или запросом</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="BACKPACK_UnlockPassword"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"tevsburp", description:"Вставить пароль", default_selector: "string", disable_expression:true, disable_int:true, value_string: "", help: {description: ""} }) %>
</div>
<div class="tooltipinternal">
<div class="tr tooltip-paragraph-first-fold">Разблакировать кошелёк</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="BACKPACK_AddNetworks"><div class="container-fluid">
</div>
<div class="tooltipinternal">
<div class="tr tooltip-paragraph-first-fold">Добавить сети в BACKPACK</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="BACKPACK_ImportWalletToBACKPACK"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"rwpeahqp", description:"Вставить пароль", default_selector: "string", disable_expression:true, disable_int:true, value_string: "", help: {description: "Пароль для кошелька"} }) %>
<%= _.template($('#input_constructor').html())({id:"fudtlhip", description:"Вставить сид фразу", default_selector: "string", disable_expression:true, disable_int:true, value_string: "", help: {description: "Сид фраза кошелька 12 слов"} }) %>
</div>
<div class="tooltipinternal">
<div class="tr tooltip-paragraph-first-fold">Импортировать кошелёк в BACKPACK</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="RABBY_RABBY_conect"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"jayggiax", description:"NETWORK_NAME", default_selector: "string", disable_expression:true, disable_int:true, value_string: "", help: {description: ""} }) %>
</div>
<div class="tooltipinternal">
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="RABBY_RABBY_get_wallet_adress"><div class="container-fluid">
<%= _.template($('#variable_constructor').html())({id:"Save", description:"Результат", default_variable: "SAVED_TEXT", help: {description: ""}}) %>
</div>
<div class="tooltipinternal">
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="RABBY_RABBY_login"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"ndttjwhy", description:"PASSWORD", default_selector: "string", disable_expression:true, disable_int:true, value_string: "", help: {description: ""} }) %>
<%= _.template($('#input_constructor').html())({id:"aqufuxdq", description:"SEED", default_selector: "string", disable_expression:true, disable_int:true, value_string: "", help: {description: ""} }) %>
</div>
<div class="tooltipinternal">
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script><script type="text/template" id="START_GOOGLEstart"><div class="container-fluid">
<%= _.template($('#input_constructor').html())({id:"labghzdm", description:"Логин GOOGLE", default_selector: "string", disable_expression:true, disable_int:true, value_string: "", help: {description: ""} }) %>
<%= _.template($('#input_constructor').html())({id:"uvkjqfyw", description:"Пароль GOOGLE", default_selector: "string", disable_expression:true, disable_int:true, value_string: "", help: {description: ""} }) %>
<%= _.template($('#input_constructor').html())({id:"wurjeqny", description:"Путь к папке профиля", default_selector: "string", disable_int:true, value_string: "", help: {description: ""} }) %>
<%= _.template($('#input_constructor').html())({id:"gyduixmh", description:"Путь к файлу Отпечатка браузера", default_selector: "string", disable_int:true, value_string: "", help: {description: ""} }) %>
<%= _.template($('#input_constructor').html())({id:"gcuomkvy", description:"Путь к файлу с Расширениями браузера", default_selector: "string", disable_int:true, value_string: "", help: {description: ""} }) %>
</div>
<div class="tooltipinternal">
<div class="tr tooltip-paragraph-first-fold">Запуск папки профеля с установкой разрешений и проверкой запуска аккаунта</div>
</div>
<%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
</script>

  <script type="text/template" id="log">
    <div class="container-fluid log">
      <%= _.template($('#input_constructor').html())({id:"LogText", description:tr("Data to Log"), default_selector: "string", help: {description: tr("Message text. Can contain variables and resources."), examples:[{code:"Script started",description:tr("Output string")},{code:"Account registered [[USERNAME]]:[[PASSWORD]]",description:tr("Message about account creation success")},{code:"Posting message {{post_data}}",description:tr("Output resource")}]}}) %>
    </div>
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Write message to log. This message will be shown to user and should inform him about events occurring during script execution.</div>
      <div class="tr tooltip-paragraph-fold">Log messages is also written to file.</div>
      <div class="tr tooltip-paragraph-fold">BAS will append some information to message: date, thread number, action id. Thats why this action is not good if you want to output raw data, account list for example. Use "Result" action to do that.</div>
      <div class="tr tooltip-paragraph-last-fold">If you want to change message color, use "Execute code" action and api call log_html(html, text).</div>
      <div class="tooltip-paragraph-last-fold"><span class="tr">If you want to output data to file only, use this</span> (<span class="tr-en"><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=how_to_let_user_to_choose_output_file_name');return false">article</a></span><span class="tr-ru"><a href="#" onclick="BrowserAutomationStudio_OpenUrl('https://wiki.bablosoft.com/doku.php?id=ru:how_to_let_user_to_choose_output_file_name');return false">статью</a></span>)</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true, wiki:"how_to_log_data"}) %>
  </script>

  <script type="text/template" id="clearlog">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Clear log window and log file.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>

  <script type="text/template" id="solverfailed">
    <div class="tooltipinternal">
      <div class="tr tooltip-paragraph-first-fold">Use this action if last captcha was solved wrong.</div>
      <div class="tr tooltip-paragraph-fold">It will be reported to service and money won't be removed from the balance.</div>
      <div class="tr tooltip-paragraph-last-fold">If last captcha was solved without service(with software or in manual mode) this action will do nothing.</div>
    </div>
    <%= _.template($('#back').html())({action:"executeandadd", visible:true}) %>
  </script>


  <script type="text/template" id="log_code">
      log(<%= text %>)
  </script>

  <script type="text/template" id="clearlog_code">
      clear_log()
  </script>

  <script type="text/template" id="solverfailed_code">
      solver_failed()
  </script>

  <script type="text/template" id="httpclientproxy_code">
      var hash = proxy_parse(<%= ProxyText %>)
      if(<%= ProxyType %> != "auto" ){
        hash["IsHttp"] = <%= ProxyType %> == "http"
      }
      var login = <%= ProxyLogin %>
      var password = <%= ProxyPassword %>
      if(login.length > 0 && password.length > 0 )
      {
        hash["name"] = login
        hash["password"] = password
      }
      _switch_http_client_main()
      http_client_set_proxy(hash["server"], hash["Port"], hash["IsHttp"], hash["name"], hash["password"])
  </script>
  <script type="text/template" id="httpclientreset_code">
    _switch_http_client_main()
    new_http_client()
  </script>
  <script type="text/template" id="httpclientdownload_code">
    _switch_http_client_main()
    <%= timeout_general() %>
    http_client_download(<%= value %>, <%= file %>)!
  </script>
  <script type="text/template" id="httpclientget_code">
    _switch_http_client_main()
    <% if(follow){ %>
      <%= timeout_general() %>
      http_client_get2(<%= value %>,{method:(<%= method %>),headers:(<%= headers %>)})!
    <% } else {%>
      <%= timeout_general() %>
      http_client_get_no_redirect2(<%= value %>,{method:(<%= method %>),headers:(<%= headers %>)})!
    <% }%>
  </script>
  <script type="text/template" id="httpclientpost_code">
    _switch_http_client_main()
    <% if(follow){ %>
      <%= timeout_general() %>
      <% if(!useconstructor){ %>
        http_client_post(<%= value %>, ["data", <%= postdataraw %>], {"content-type":"custom/" + (<%= contenttyperaw %>), "encoding":(<%= encoding %>), "method":(<%= method %>),headers:(<%= headers %>)})!
      <% } else {%>
        http_client_post(<%= value %>, <%= params %>, {"content-type":(<%= contenttype %>), "encoding":(<%= encoding %>), "method":(<%= method %>),headers:(<%= headers %>)})!
      <% }%>
    <% } else {%>
      <%= timeout_general() %>
      <% if(!useconstructor){ %>
        http_client_post_no_redirect(<%= value %>, ["data", <%= postdataraw %>], {"content-type":"custom/" + (<%= contenttyperaw %>), "encoding":(<%= encoding %>), "method":(<%= method %>),headers:(<%= headers %>)})!
      <% } else {%>
        http_client_post_no_redirect(<%= value %>, <%= params %>, {"content-type":(<%= contenttype %>), "encoding":(<%= encoding %>), "method":(<%= method %>),headers:(<%= headers %>)})!
      <% }%> 
    <% }%>
  </script>
  <script type="text/template" id="parseline_code">
    var csv_parse_result = csv_parse(<%= value %>)
    <% for(var i = 0;i < list.length; i++){ %>
      VAR_<%= list[i] %> = csv_parse_result[<%= i %>]
      if(typeof(VAR_<%= list[i] %>) == 'undefined' || !VAR_<%= list[i] %>)
      {
        VAR_<%= list[i] %> = ""
      }
    <% } %>
    
  </script>

  
  <script type="text/template" id="httpclienturl_code">
    _switch_http_client_main()
    <%= variable %> = http_client_url()
  </script>
  <script type="text/template" id="httpclientcontent_code">
    _switch_http_client_main()
    <%= variable %> = http_client_encoded_content(<%= encoding %>)
  </script>
  <script type="text/template" id="httpclientstatus_code">
    _switch_http_client_main()
    <%= variable %> = http_client_status()
  </script>
  <script type="text/template" id="httpclientgetheader_code">
    _switch_http_client_main()
    <%= variable %> = http_client_header(<%= value %>)
  </script>
  <script type="text/template" id="httpclientsetheader_code">
    _switch_http_client_main()
    http_client_set_header(<%= name %>, <%= value %>)
  </script>
  <script type="text/template" id="httpclientclearheader_code">
    _switch_http_client_main()
    http_client_clear_header()
  </script>
  <script type="text/template" id="httpclientgetcookiesforurl_code">
    _switch_http_client_main()
    <%= variable %> = http_client_get_cookies(<%= value %>)
  </script>
  <script type="text/template" id="httpclientsavecookies_code">
    _switch_http_client_main()  
    <%= variable %> = http_client_save_cookies()
  </script>
  <script type="text/template" id="httpclientrestorecookies_code">
    _switch_http_client_main()
    http_client_restore_cookies(<%= value %>)
  </script>
  <script type="text/template" id="httpclientfailonerror_code">
    _switch_http_client_main()
    http_client_set_fail_on_error(<%= value %> == "fail")
  </script>
  <script type="text/template" id="httpclientiserror_code">
    _switch_http_client_main()
    <%= variable %> = http_client_was_error()
  </script>
  <script type="text/template" id="httpclientgeterrorstring_code">
    _switch_http_client_main()
    <%= variable %> = http_client_error_string()
  </script>
  <script type="text/template" id="httpclientxpathxml_code">
    _switch_http_client_main()
    <%= variable %> = http_client_xpath_xml(<%= value %>,!(<%= fail %>))
  </script>
  <script type="text/template" id="httpclientxpathxmllist_code">
    _switch_http_client_main()
    <%= variable %> = http_client_xpath_xml_list(<%= value %>,true)
  </script>
  <script type="text/template" id="httpclientxpathtext_code">
    _switch_http_client_main()
    <%= variable %> = http_client_xpath_text(<%= value %>,!(<%= fail %>))
  </script>
  <script type="text/template" id="httpclientxpathtextlist_code">
    _switch_http_client_main()
    <%= variable %> = http_client_xpath_text_list(<%= value %>,true)
  </script>
  <script type="text/template" id="httpclientxpathcount_code">
    _switch_http_client_main()
    <%= variable %> = http_client_xpath_count(<%= value %>)
  </script>
  <script type="text/template" id="httpclientxpathexists_code">
    _switch_http_client_main()
    <%= variable %> = http_client_xpath_exist(<%= value %>)
  </script>


  <script type="text/template" id="executefunction_code">
    <% var keys = Object.keys(args) %>
    _call_function(<%= name %>,{<% for(var i = 0;i<keys.length; i++){  %> <%= JSON.stringify(keys[i]) %> : (<%= args[ keys[i] ] %>) <% if(i < keys.length -1){ %>,<% } %> <% } %>})!
    <% if(has_return) { %>
      <%= variable %> = _result_function()
    <% } else { %>
      _result_function()
    <% } %>

  </script>

  <script type="text/template" id="getfunctionparameter_code">
    <%= variable %> = _function_argument(<%= param_name %>)
  </script>

  <script type="text/template" id="recaptchav3_code">
    _recaptchav3(<%= action %>, <%= method %>, <%= rucaptcha %>, <%= serverurl %>, <%= score %>, <%= proxy %> == "true")!
  </script>

  <script type="text/template" id="return_code">
    _function_return(<%= val %>)
  </script>

  <script type="text/template" id="executefunctioninseveralthreads_code">
      _call_section(<%= name %>,<%= thread %>,<%= success %>,<%= fail %>)!
  </script>

  <script type="text/template" id="xml_code">
      /*Browser*/
      <%= waiter %>
      <%= path %>.xml()!
      <%= variable %> = _result()
  </script>
  
  <script type="text/template" id="linkurl_code">
    /*Browser*/
    <%= waiter %>
    <%= path %>.script("_BAS_HIDE(BrowserAutomationStudio_GetLinkUrl)(self)")!
    <%= variable %> = _result()
  </script>

  <script type="text/template" id="coordinates_code">
      /*Browser*/
      <%= waiter %>
      <%= path %>.script("(function(){var rect = _BAS_HIDE(BrowserAutomationStudio_GetBoundingClientRect)(self);return (rect.left + positionx) + '|' + (rect.top + positiony) + '|' + (rect.right - rect.left) + '|' + (rect.bottom - rect.top) + '|' + (rect.left + positionx + scrollx) + '|' + (rect.top + positiony + scrolly)})();")!
      if(_result().length > 0)
      {
        var split = _result().split("|")
        <%= x %> = parseInt(split[0])
        <%= y %> = parseInt(split[1])
        <%= width %> = parseInt(split[2])
        <%= height %> = parseInt(split[3])
        <%= absolute_x %> = parseInt(split[4])
        <%= absolute_y %> = parseInt(split[5])
      }
  </script>


  <script type="text/template" id="restrictpopups_code">
      /*Browser*/
      _restrict_popups()!
  </script>

  <script type="text/template" id="allowpopups_code">
      /*Browser*/
      _allow_popups()!
  </script>

  <script type="text/template" id="restrictdownloads_code">
      /*Browser*/
      _restrict_downloads()!
  </script>

  <script type="text/template" id="allowdownloads_code">
      /*Browser*/
      _allow_downloads()!
  </script>

  <script type="text/template" id="captcha_code">
      /*Browser*/
      solver_properties_clear(<%= method %>)

      BAS_SolveRecaptcha_Serverurl = <%= serverurl %>

      if(BAS_SolveRecaptcha_Serverurl.length > 0 && BAS_SolveRecaptcha_Serverurl.substr(BAS_SolveRecaptcha_Serverurl.length - 1) != "/")
        BAS_SolveRecaptcha_Serverurl += "/"

      if(<%= method %> == "rucaptcha")
      {
        if(BAS_SolveRecaptcha_Serverurl)
          solver_property("rucaptcha","serverurl",BAS_SolveRecaptcha_Serverurl)
        rucaptcha(<%= antigate %>)
      }
      if(<%= method %> == "antigate")
      {
        if(BAS_SolveRecaptcha_Serverurl)
          solver_property("antigate","serverurl",BAS_SolveRecaptcha_Serverurl)
       antigate(<%= antigate %>)
      }
      if(<%= method %> == "dbc")
      {
        if(BAS_SolveRecaptcha_Serverurl)
          solver_property("dbc","serverurl",BAS_SolveRecaptcha_Serverurl)
        dbc(<%= antigate %>)
      }
      if(<%= method %> == "2captcha")
      {
        if(BAS_SolveRecaptcha_Serverurl)
          solver_property("2captcha","serverurl",BAS_SolveRecaptcha_Serverurl)
        twocaptcha(<%= antigate %>)
      }
      if(<%= method %> == "capmonster" || <%= method %> == "capmonsterimage" || <%= method %> == "capmonsteraudio")
      {
        solver_property("capmonster","serverurl",BAS_SolveRecaptcha_Serverurl)
        capmonster(<%= antigate %>)
      }
      if(<%= method %> == "xevil")
      {
        solver_property("xevil","serverurl",((BAS_SolveRecaptcha_Serverurl).length == 0) ? "http://rucaptcha.com/" : (BAS_SolveRecaptcha_Serverurl))
        xevil(<%= antigate %>)
      }


      <%= waiter %>
      <%= path %>.exist()!
      _if(_result() == "1", function(){
        _if_else(<%= method %> == "xevil" || <%= method %> == "capmonster" || <%= method %> == "capmonsterimage" || <%= method %> == "capmonsteraudio" || <%= method %> == "captchasniper", function(){
          <%= path %>.attr("src")!
          <%= variable %> = _result()
          _if(<%= variable %>.length == 0, function(){
            <%= path %>.css("img").attr("src")!
            <%= variable %> = _result()
          })!

          if(<%= variable %>.length == 0)
          {
            fail(tr("Image tag not found. Is this element captcha?"))
          }

          wait_load(<%= variable %>)!

          cache_get_base64(<%= variable %>)!

          if(_result().length == 0)
          {
            fail(tr("Url ") + <%= variable %> + tr(" is not present in cache. Please enable cache before page load with Allow cache action"))
          }

          _if_else(<%= method %> == "captchasniper", function(){
            _switch_http_client_internal()
            http_client_post(BAS_SolveRecaptcha_Serverurl, ["file","base64://" + _result()], {"content-type":("multipart"), "encoding":("UTF-8"), "method":("POST")})!
            {var split = http_client_content().split("|");<%= variable %> = split[split.length-1]}
            _switch_http_client_main()
          }, function(){
              <%= timeout_solver() %>
              solve_base64((<%= method %> == "xevil") ? "xevil" : "capmonster", _result())!
              <%= variable %> = _result()
          })!

        },function(){
          <%= path %>.render_base64()!
          <%= timeout_solver() %>
          solve_base64(<%= method %>, _result())!
          <%= variable %> = _result()

        })!
    })!

      
  </script>

  <script type="text/template" id="screenshot_code">
      /*Browser*/
      <%= waiter %>
      <%= path %>.exist()!
      _if(_result() == "1", function(){
          <%= path %>.render_base64()!
          <%= variable %> = _result()
      })!
  </script>


  <script type="text/template" id="randomint_code">
      <%= variable %> = Math.floor(Math.random() * (parseInt(<%= max %>) - parseInt(<%= min %>) + 1)) + parseInt(<%= min %>)
  </script>



  

  <script type="text/template" id="Checksum_String_code">_call_function(Checksum_String,{"input":(<%= input %>),<% if(base64==true){ %> "inputEncoding":("base64"),<% } %> "algorithm":(<%= algorithm %>),<% if(outputLength!=='""'){ %> "outputLength":(<%= outputLength %>),<% } %> "outputEncoding":(<% if(['"hex encoded"','"base64 encoded"'].indexOf(outputEncoding) > -1){ %><%= outputEncoding.split(' ')[0] + '"' %><% }else{ %><%= outputEncoding %><% } %>), "timeout":(<%= timeout_value() || 60000 %>)})!
<%= variable %> = _result_function();
</script><script type="text/template" id="Checksum_File_code">_call_function(Checksum_File,{"filePath":(<%= filePath %>), "algorithm":(<%= algorithm %>),<% if(outputLength!=='""'){ %> "outputLength":(<%= outputLength %>),<% } %> "outputEncoding":(<% if(['"hex encoded"','"base64 encoded"'].indexOf(outputEncoding) > -1){ %><%= outputEncoding.split(' ')[0] + '"' %><% }else{ %><%= outputEncoding %><% } %>), "timeout":(<%= timeout_value() || 60000 %>)})!
<%= variable %> = _result_function()
</script><script type="text/template" id="Checksum_GetAlgorithmsList_code">_call_function(Checksum_GetAlgorithmsList,{})!
<%= variable %> = _result_function();
</script><script type="text/template" id="clickCaptchaElement_code">/*Browser*/
_call_function(BASCaptchaSolver.solveCoordinatesCaptcha, {
  textInstructions: <%= textInstructions %>,
  taskWaitTimeout: <%= taskWaitTimeout %>,
  taskWaitDelay: <%= taskWaitDelay %>,
  emulateMouse: <%= emulateMouse %>,
  serviceName: <%= serviceName %>,
  serviceUrl: <%= serviceUrl %>,
  serviceKey: <%= serviceKey %>,
  query: <%= query %>,
  waiter: function () {
    <%= waiter %>
  },
  path: function () {
    return (<%= path %>);
  },
})!</script><script type="text/template" id="getclipboard_code"><%= variable %> = _get_clipboard(<%= base64 %>, <%= mime %>)</script><script type="text/template" id="setclipboard_code">_set_clipboard(<%= base64 %>, <%= mime %>, <%= data %>)</script><script type="text/template" id="database_get_group_list_code"><%= variable %> = _db_select_groups(<%= table %>)</script><script type="text/template" id="database_create_group_code"><%= group %> = _db_add_group(<%= name %>, <%= description %>, <%= table %>)
PSet("_bas_table_" + (<%= table %>), "_last_group", <%= group %>)</script><script type="text/template" id="database_delete_group_code">_db_delete_group(<%= group_id %>, <%= delete_data %> == "true", <%= table %>)</script><script type="text/template" id="database_change_group_code">var group = (<%= group %>)
if(group.length == 0)
	group = P("_bas_table_" + (<%= table %>), "_last_group")

_db_change_group(<%= name %>, <%= description %>, group, <%= table %>)
</script><script type="text/template" id="database_copy_group_code">var group_id = (<%= group_id %>)
if(group_id.length == 0)
	group_id = P("_bas_table_" + (<%= table %>), "_last_group")

<%= variable %> = _db_copy_group(group_id, <%= table %>)</script><script type="text/template" id="database_move_record_to_group_code"><%= variable %> = _db_move_record_to_group(<%= group_id %>, <%= record_id %>, <%= move_type %>, <%= table %>)</script><script type="text/template" id="database_insert_record_code">var group = (<%= group %>)
if(group.length == 0)
	group = P("_bas_table_" + (<%= table %>), "_last_group")
<%= variable %> = _db_add_record(group, <%= "[" + params + "]" %>, <%= table %>, <%= add_to_resources %> == "true")</script><script type="text/template" id="database_update_record_code">var record = (<%= record %>)
if(record.length == 0)
{
	if(typeof(LAST_DATABASE_RECORD) != "string" || LAST_DATABASE_RECORD.length == 0)
		fail("No record selected as resource")
	record = LAST_DATABASE_RECORD
}
if(typeof(record) != "string" || record.length == 0)
	fail("Record id is empty")
_db_update_record(record, <%= "[" + params + "]" %>, <%= table %>, <%= update_resources %> == "true")</script><script type="text/template" id="database_update_records_by_criteria_code">_db_update_records_by_criteria(<%= "[" + params + "]" %>, <%= table %>, <%= update_resources %> == "true", <%= filters %>, <%= group_id %>)</script><script type="text/template" id="database_select_one_record_code"><%= variable %> = _db_select_one_record(<%= record_id %>, <%= table %>)</script><script type="text/template" id="database_select_records_code"><%= variable %> = _db_select_records(<%= filters %>, <%= page_number %>,<%= page_size %>,<%= table %>,<%= sorting_type %>,<%= group_id %>,<%= sort_column %>)</script><script type="text/template" id="database_delete_one_record_code">var record = (<%= record_id %>)
if(record.length == 0)
{
	if(typeof(LAST_DATABASE_RECORD) != "string" || LAST_DATABASE_RECORD.length == 0)
		fail("No record selected as resource")
	record = LAST_DATABASE_RECORD
}
if(typeof(record) != "string" || record.length == 0)
	fail("Record id is empty")
_db_delete_one_record(record, <%= delete_resources %> == "true", <%= table %>)</script><script type="text/template" id="database_delete_records_code">_db_delete_records(<%= filters %>, <%= table %>, <%= group_id %>, <%= delete_resources %> == "true")</script><script type="text/template" id="database_count_records_code"><%= variable %> = _db_count_records(<%= filters %>, <%= table %>, <%= group_id %>)</script><script type="text/template" id="stringtodate_code"><%= variable %> = _parse_date(<%= value %>,<%= format %>)</script><script type="text/template" id="datetostring_code"><%= variable %> = _format_date(<%= value %>,<%= format %>)</script><script type="text/template" id="msecondstodate_code"><%= variable %> = _parse_date(<%= value %>,"auto")</script><script type="text/template" id="datetomseconds_code"><%= variable %> = _parse_date(<%= value %>,"auto").getTime()</script><script type="text/template" id="createdate_code"><%= variable %> = new Date(Date.UTC(<%= year %>, <%= month %> - 1, <%= day %>, <%= hour %>, <%= minute %>, <%= second %>, <%= millisecond %>));
<%= variable %>.getTimezoneOffset = function(){return parseInt(<%= timezone %>)}
</script><script type="text/template" id="changedate_code">{
	<%= variable %> = _parse_date(<%= value %>, "auto")
	var offset = <%= variable %>.getTimezoneOffset()
	<%= variable %> = new Date(<%= variable %>.getTime())
	<%= variable %>.getTimezoneOffset = function(){return offset}
}
if(<%= year %> != -1)
	<%= variable %>.setFullYear(<%= year %>);

if(<%= month %> != -1)
	<%= variable %>.setMonth(<%= month %> - 1);

if(<%= day %> != -1)
	<%= variable %>.setDate(<%= day %>);

if(<%= hour %> != -1)
	<%= variable %>.setHours(<%= hour %>);

if(<%= minute %> != -1)
	<%= variable %>.setMinutes(<%= minute %>);

if(<%= second %> != -1)
	<%= variable %>.setSeconds(<%= second %>);

if(<%= millisecond %> != -1)
	<%= variable %>.setMilliseconds(<%= millisecond %>);</script><script type="text/template" id="addsecondstodate_code">{
	<%= variable %> = _parse_date(<%= value %>,"auto")
	var offset = <%= variable %>.getTimezoneOffset()
	<%= variable %> = new Date(<%= variable %>.getTime() + (<%= seconds %>) * 1000 + (<%= minutes %>) * 1000 * 60 + (<%= hours %>) * 1000 * 60 * 60 + (<%= days %>) * 1000 * 60 * 60 * 24 )
	<%= variable %>.getTimezoneOffset = function(){return offset}
}</script><script type="text/template" id="substractdates_code"><%= variable %> = Math.floor((_parse_date(<%= decreasing %>,"auto").getTime() - _parse_date(<%= subtracted %>,"auto").getTime()) / 1000)</script><script type="text/template" id="datenow_code"><%= variable %> = _parse_date(Date.now(),"auto")
<%= variable %>.getTimezoneOffset = function(){return parseInt(native("datetime", "systemtimezone", "")) }</script><script type="text/template" id="changetimezone_code">{
	<%= variable %> = _parse_date(<%= value %>, "auto")
	<%= variable %> = new Date(<%= variable %>.getTime())
	<%= variable %>.getTimezoneOffset = function(){return parseInt(<%= timezone %>)}
}
</script><script type="text/template" id="gettimezone_code"><%= variable %> = _parse_date(<%= value %>,"auto").getTimezoneOffset()</script><script type="text/template" id="dayofmonth_code"><%= variable %> = parseInt(_format_date(<%= value %>,"d"))</script><script type="text/template" id="dayofweek_code"><%= variable %> = parseInt(_format_date(<%= value %>,"N"))</script><script type="text/template" id="dayofyear_code"><%= variable %> = parseInt(_format_date(<%= value %>,"Z"))</script><script type="text/template" id="year_code"><%= variable %> = parseInt(_format_date(<%= value %>,"yyyy"))</script><script type="text/template" id="month_code"><%= variable %> = parseInt(_format_date(<%= value %>,"M"))</script><script type="text/template" id="hour_code"><%= variable %> = parseInt(_format_date(<%= value %>,"h"))</script><script type="text/template" id="minute_code"><%= variable %> = parseInt(_format_date(<%= value %>,"m"))</script><script type="text/template" id="second_code"><%= variable %> = parseInt(_format_date(<%= value %>,"s"))</script><script type="text/template" id="millisecond_code"><%= variable %> = parseInt(_format_date(<%= value %>,"z"))</script><script type="text/template" id="embedded_language_nodejs_code"><% if(variables.length > 0){ %>/*<%= variables %>*/<% } %>
_embedded(<%= name %>, "Node", <%= version %>, <%= variables_string %>, <%= timeout_value()  || 60000 %> )!</script><script type="text/template" id="readfile_code"><%= variable %> = native("filesystem", "readfile", JSON.stringify({value: <%= value %>,base64:<%= base64 %>,from:<%= from %>,to:<%= to %>}))</script><script type="text/template" id="writefile_code">native("filesystem", "writefile", JSON.stringify({path: <%= path %>,value: (<%= value %>).toString()<%= (eol) ? " + \"\\r\\n\"" : "" %>,base64:<%= base64 %>,append:<%= append %>}))</script><script type="text/template" id="fileinfo_code">var json = JSON.parse(native("filesystem", "fileinfo", <%= value %>))
<%= variable_exists %> = json["exists"]
<%= variable_size %> = json["size"]
<%= variable_directory %> = json["directory"]
<%= variable_is_directory %> = json["is_directory"]
<%= variable_last_modified %> = new Date(json["last_modified"] * 1000)
</script><script type="text/template" id="createdir_code">native("filesystem", "createdir", <%= value %>)</script><script type="text/template" id="removefile_code">native("filesystem", "removefile", <%= value %>)</script><script type="text/template" id="movefile_code">native("filesystem", "movefile", JSON.stringify({path: <%= value %>,dest: <%= dest %>}))</script><script type="text/template" id="copyfile_code">native("filesystem", "copyfile", JSON.stringify({path: <%= value %>,dest: <%= dest %>}))</script><script type="text/template" id="search_code">native_async("filesystem", "search", JSON.stringify({folder: <%= folder %>,mask: <%= mask %>,contains:<%= contains %>,include_folders:<%= include_folders %>,include_files:<%= include_files %>,recursive:<%= recursive %>}))!
<%= variable %> = JSON.parse(_result())["d"]</script><script type="text/template" id="file_to_list_code">{
	var d = native("filesystem", "readfile", JSON.stringify({value: <%= value %>,base64:false,from:0,to:0}))
	<%= variable %>	= (d.length == 0) ? [] : d.split(/\r?\n/)
}</script><script type="text/template" id="list_to_file_code">native("filesystem", "writefile", JSON.stringify({path: <%= path %>,value: (<%= save %>).join("\r\n") + ((<%= eol %>) ? "\r\n" : "" ),base64:false,append:<%= append %>}))</script><script type="text/template" id="get_fingerprint_code">_call(BrowserAutomationStudio_GetFingerprint,[{
	tags: (<%= tags %>),
	key: (<%= key %>),
	min_browser_version: (<%= min_browser_version %>),
	max_browser_version: (<%= max_browser_version %>),
	min_width: (<%= min_width %>),
	min_height: (<%= min_height %>),
	max_width: (<%= max_width %>),
	max_height: (<%= max_height %>),
	time_limit: (<%= time_limit %>),
	perfectcanvas_request: (<%= perfectcanvas_request %>),
	perfectcanvas_logs: (<%= perfectcanvas_logs %>),
	enable_custom_server: (<%= enable_custom_server %>),
	dynamic_perfect_canvas: (<%= dynamic_perfect_canvas %>),
	enable_precomputed_fingerprints: (<%= enable_precomputed_fingerprints %>),
	suppress_warnings: (<%= suppress_warnings %>),
}])!

<%= variable %> = _result()
</script><script type="text/template" id="apply_fingerprint_code">/*Browser*/
_call(BrowserAutomationStudio_ApplyFingerprint,[<%= fingerprint %>,<%= canvas %> == "true",<%= webgl %> == "true",<%= audio %> == "true",<%= battery %> == "true",<%= rectangles %> == "true",<%= perfectcanvas %> == "true",<%= sensor %> == "true",<%= font_data %> == "true",<%= device_scale %> == "true", <%= key %>])!
sleep(1000)!</script><script type="text/template" id="performance_fingerprint_code">_call(BrowserAutomationStudio_PerformanceFingerprint,{
	time_deformation_from: (<%= time_deformation_from %>),
	time_deformation_to: (<%= time_deformation_to %>),
	max_measurement_time: (<%= max_measurement_time %>),
	disable_performance_precision: (<%= disable_performance_precision %>) == "true"
})!

</script><script type="text/template" id="override_key_code">FINGERPRINT_OVERRIDE_KEY = <%= key %></script><script type="text/template" id="disable_override_key_code">delete FINGERPRINT_OVERRIDE_KEY</script><script type="text/template" id="asyncfunction_call_code"><%= result_thread_id %> = <%= desired_thread_id %>
if(<%= result_thread_id %> <= 0)
{
    <%= result_thread_id %> = Math.floor(Math.random() * 1000000) + 1;
}

if(typeof(<%= thread_list %>) == "undefined")
{
    <%= thread_list %> = [];
}
if((<%= thread_list %>).indexOf(<%= result_thread_id %>) < 0)
    (<%= thread_list %>).push(<%= result_thread_id %>)

<% var keys = Object.keys(args) %>

_thread_start(<%= result_thread_id %>, <%= desired_thread_id %> == 0, <%= JSON.stringify(name) %>, {<% for(var i = 0;i<keys.length; i++){  %> <%= JSON.stringify(keys[i]) %> : (<%= args[ keys[i] ] %>) <% if(i < keys.length -1){ %>,<% } %> <% } %>}, (<%= close_thread_after_function_ends %>) == "true", <%= max_threads %>, <%= on_iddle %> != "wait")!
</script><script type="text/template" id="asyncfunction_wait_code"><%= timeout_waiter() %>
_thread_wait(<%= thread_id %>)!

</script><script type="text/template" id="asyncfunction_result_code">{
    var thread_data = _thread_get_status(<%= thread_id %>)
    <%= result %> = thread_data.result
    <%= is_running %> = thread_data.is_running
    <%= error %> = thread_data.error
    <%= is_success %> = thread_data.is_success
}
</script><script type="text/template" id="asyncfunction_stop_code">_thread_stop(<%= thread_id %>)

</script><script type="text/template" id="idle_emulation_new_code">/*Browser*/
_Idle.emulate({time: (<%= time %>), accuracy: (<%= accuracy %>), intensity: (<%= intensity %>)<%if(actions){%>, useActions: {<%= actions %>}<%}%><%if(manualSettings){%>, <%= manualSettings %><%}%>})!
</script><script type="text/template" id="idle_emulation_set_general_settings_code">_Idle.setGeneralSettings(<%= generalSettings %>);
</script><script type="text/template" id="idle_emulation_reset_general_settings_code">_Idle.resetGeneralSettings();
</script><script type="text/template" id="idle_emulation_code">/*Browser*/
IDDLE_EMULATION_END = Date.now() + 1000 * (<%= iddle %>)
IDDLE_EMULATION_DISTRIBUTION = <%= distribution %>

_get_browser_screen_settings()!
IDDLE_EMULATION_RESULT = JSON.parse(_result())
IDDLE_CURSOR_POSITION_X = IDDLE_EMULATION_RESULT["CursorX"]
IDDLE_CURSOR_POSITION_Y = IDDLE_EMULATION_RESULT["CursorY"]
IDDLE_CURSOR_POSITION_WIDTH = IDDLE_EMULATION_RESULT["Width"]
IDDLE_CURSOR_POSITION_HEIGHT = IDDLE_EMULATION_RESULT["Height"]
IDDLE_CURSOR_POSITION_WAS_SCROLL = false


_do(function(){
  if(Date.now() >= IDDLE_EMULATION_END)
    _break()

  IDDLE_EMULATION_CURRENT_ITEM = IDDLE_EMULATION_DISTRIBUTION[Math.floor(Math.random()*IDDLE_EMULATION_DISTRIBUTION.length)]

  if(_iterator() == 1 && IDDLE_EMULATION_DISTRIBUTION.indexOf(2)>=0)
    IDDLE_EMULATION_CURRENT_ITEM = 2

  _if(IDDLE_EMULATION_CURRENT_ITEM == 1, function(){
    //scroll
    IDDLE_EMULATION_CURRENT_DIRECTION = (rand(1,2) == 2) ? "<MOUSESCROLLUP>" : "<MOUSESCROLLDOWN>"
    if(!IDDLE_CURSOR_POSITION_WAS_SCROLL)
      IDDLE_EMULATION_CURRENT_DIRECTION = "<MOUSESCROLLDOWN>"

    IDDLE_CURSOR_POSITION_WAS_SCROLL = true
    
    IDDLE_EMULATION_CURRENT_NUMBER = rand(1,5)

    _do(function(){
      if(_iterator() >= IDDLE_EMULATION_CURRENT_NUMBER)
        _break()
      _type(IDDLE_EMULATION_CURRENT_DIRECTION,1000)!
      sleep(rand(300,1000))!
    })!
    
  })!

  _if(IDDLE_EMULATION_CURRENT_ITEM == 2, function(){
    //long move
    page().script("document.documentElement.scrollLeft")!
    IDDLE_CURSOR_POSITION_SCROLL_X = parseInt(_result())

    page().script("document.documentElement.scrollTop")!
    IDDLE_CURSOR_POSITION_SCROLL_Y = parseInt(_result())

    IDDLE_CURSOR_POSITION_X = rand(1,IDDLE_CURSOR_POSITION_WIDTH)
    IDDLE_CURSOR_POSITION_Y = rand(1,IDDLE_CURSOR_POSITION_HEIGHT)
    move(IDDLE_CURSOR_POSITION_SCROLL_X + IDDLE_CURSOR_POSITION_X,IDDLE_CURSOR_POSITION_SCROLL_Y + IDDLE_CURSOR_POSITION_Y)!

  })!

  _if(IDDLE_EMULATION_CURRENT_ITEM == 3, function(){
    //short move
    if(IDDLE_CURSOR_POSITION_X < 0 || IDDLE_CURSOR_POSITION_Y < 0)
      _break()

    
    page().script("document.documentElement.scrollLeft")!
    IDDLE_CURSOR_POSITION_SCROLL_X = parseInt(_result())

    page().script("document.documentElement.scrollTop")!
    IDDLE_CURSOR_POSITION_SCROLL_Y = parseInt(_result())

    IDDLE_EMULATION_CURRENT_NUMBER = rand(1,4)

    _do(function(){
      if(_iterator() >= IDDLE_EMULATION_CURRENT_NUMBER)
        _break()
      IDDLE_CURSOR_POSITION_X += rand(-50,50)
      IDDLE_CURSOR_POSITION_Y += rand(-50,50)
      if(IDDLE_CURSOR_POSITION_X > IDDLE_CURSOR_POSITION_WIDTH)
        IDDLE_CURSOR_POSITION_X = IDDLE_CURSOR_POSITION_WIDTH
      if(IDDLE_CURSOR_POSITION_Y > IDDLE_CURSOR_POSITION_HEIGHT)
        IDDLE_CURSOR_POSITION_Y = IDDLE_CURSOR_POSITION_HEIGHT
      if(IDDLE_CURSOR_POSITION_X < 0)
        IDDLE_CURSOR_POSITION_X = 0
      if(IDDLE_CURSOR_POSITION_Y < 0)
        IDDLE_CURSOR_POSITION_Y = 0
      move(IDDLE_CURSOR_POSITION_SCROLL_X + IDDLE_CURSOR_POSITION_X,IDDLE_CURSOR_POSITION_SCROLL_Y + IDDLE_CURSOR_POSITION_Y)!
      _if(rand(1,10) > 3,function(){
       sleep(rand(10,300))!
      })!
    })!
    
  })!

  _if(IDDLE_EMULATION_CURRENT_ITEM == 4, function(){
    //sleep
    sleep(rand(500,5000))!
  })!


   
})!
</script><script type="text/template" id="idle_emulation_set_debug_code">_Idle.setDebug(<%= enable %>);
</script><script type="text/template" id="imageprocessingload_code"><%= variable %> = native("imageprocessing", "load", <%= data %>)</script><script type="text/template" id="imageprocessingdelete_code">native("imageprocessing", "delete", <%= id %>)
</script><script type="text/template" id="imageprocessingcreate_code"><%= variable %> = native("imageprocessing", "create", (<%= width %>) + "," + (<%= height %>) + "," + (<%= r %>) + "," + (<%= g %>) + "," + (<%= b %>) + "," + (<%= a %>))</script><script type="text/template" id="imageprocessingconvert_code">var split = native("imageprocessing", "convert", (<%= id %>) + "," + (<%= format %>))</script><script type="text/template" id="imageprocessinggetdata_code"><%= variable %> = native("imageprocessing", "getdata", <%= id %>)</script><script type="text/template" id="imageprocessinggetpixel_code">{
	var split = native("imageprocessing", "getpixel", (<%= id %>) + "," + (<%= x %>) + "," + (<%= y %>)).split(",")
	<%= variable_r %> = parseInt(split[0])
	<%= variable_g %> = parseInt(split[1])
	<%= variable_b %> = parseInt(split[2])
	<%= variable_a %> = parseInt(split[3])
}</script><script type="text/template" id="imageprocessingsetpixel_code">native("imageprocessing", "setpixel", (<%= id %>) + "," + (<%= x %>) + "," + (<%= y %>) + "," + (<%= r %>) + "," + (<%= g %>) + "," + (<%= b %>) + "," + (<%= a %>))</script><script type="text/template" id="imageprocessinggetsize_code">{
	var split = native("imageprocessing", "getsize", <%= id %>).split(",")
	<%= variable_width %> = parseInt(split[0])
	<%= variable_height %> = parseInt(split[1])
}</script><script type="text/template" id="imageprocessingresize_code">native("imageprocessing", "resize", (<%= id %>) + "," + (<%= width %>) + "," + (<%= height %>))
</script><script type="text/template" id="imageprocessinginsert_code">native("imageprocessing", "insert", (<%= id1 %>) + "," + (<%= id2 %>) + ","  + (<%= x %>) + "," + (<%= y %>))
</script><script type="text/template" id="imageprocessingfind_code">{
	var split = native("imageprocessing", "find", (<%= id1 %>) + "," + (<%= id2 %>)).split(",")
	<%= x %> = split[0];
	<%= y %> = split[1];
	<%= threshold %> = split[2];
}
</script><script type="text/template" id="imageprocessingfill_code">native("imageprocessing", "fill", (<%= id %>) + "," + (<%= x %>) + "," + (<%= y %>)  + "," + (<%= width %>) + "," + (<%= height %>)  + "," + (<%= r %>) + "," + (<%= g %>) + "," + (<%= b %>) + "," + (<%= a %>))</script><script type="text/template" id="imageprocessingsub_code"><%= variable %> = native("imageprocessing", "sub", (<%= id %>) + "," + (<%= x %>) + "," + (<%= y %>) + "," + (<%= width %>) + "," + (<%= height %>))</script><script type="text/template" id="imageprocessingtext_code">native("imageprocessing", "text", (<%= vertical_align %>) + "," + (<%= horizontal_align %>) + "," + (<%= id %>) + "," + (<%= x %>) + "," + (<%= y %>)+ "," + (<%= width %>) + "," + (<%= height %>) + "," + (<%= fontfamily %>) + "," + (<%= r %>) + "," + (<%= g %>) + "," + (<%= b %>) + "," + (<%= a %>)+ "," + (<%= fontsize %>) + "," + (<%= text %>))</script><script type="text/template" id="InMail_Configure_code">_InMail.configure((<%= protocol %>), (<%= autoConfig %>), (<%= host %>), (<%= port %>), (<%= encrypt %>), (<%= username %>), (<%= authMethod %>), (<%= password %>), (<%= oauth2Token %>), (<%= box %>), (<%= connectTimeout %>), (<%= resetTimeout %>));
</script><script type="text/template" id="InMail_Proxy_code">_InMail.setProxy(<%= proxyString %>, <%= proxyType %>, <%= proxyUsername %>, <%= proxyPassword %>);
</script><script type="text/template" id="InMail_GetLastMessage_code"><%if((getTextHtml && getLinksTextHtml) || (getTextPlain && getLinksTextPlain) || (getTextRaw && getLinksTextRaw)){%>/*Dat:eyJzIjoiZXh0cmFjdF91cmxzIn0=*/<%}%>
_call_function(_InMail.getLastMessage, {body: [<%= [['html', getTextHtml], ['plain', getTextPlain], ['raw', getTextRaw]].filter(function(el){return el[1]}).map(function(el){return "'" + el[0] + "'"}).join(', ') %>], headers: [<%= [['from', getFrom], ['to', getTo], ['subject', getSubject], ['raw', getRawHeader]].filter(function(el){return el[1]}).map(function(el){return "'" + el[0] + "'"}).join(', ') %>]<%if(getSize){%>, size: <%= getSize %><%}%><%if(getFlags){%>, flags: <%= getFlags %><%}%><%if(getDate){%>, date: <%= getDate %><%}%><%if(getAttachNames){%>, attachnames: <%= getAttachNames %><%}%><%if(getAttachments){%>, attachments: (<%= attachmentsMask %>)<%}%><%if(box!=='""'){%>, box: (<%= box %>)<%}%>, timeout: (<%= timeout_value() || 60000 %>)})!
var messageData = _result_function();
<%if(getUid){%><%= saveUid %> = messageData["uid"];<%}%>
<%if(getFrom){%><%= saveFrom %> = messageData["headers"]["from"];<%}%>
<%if(getTo){%><%= saveTo %> = messageData["headers"]["to"];<%}%>
<%if(getSubject){%><%= saveSubject %> = messageData["headers"]["subject"];<%}%>
<%if(getRawHeader){%><%= saveRawHeader %> = messageData["headers"]["raw"];<%}%>
<%if(getTextHtml){%>
	<%= saveTextHtml %> = messageData["body"]["html"];
	<%if(getLinksTextHtml){%>
		<%= saveLinksTextHtml %> = _extract_urls(messageData["body"]["html"]);
	<%}%>
<%}%>
<%if(getTextPlain){%>
	<%= saveTextPlain %> = messageData["body"]["plain"];
	<%if(getLinksTextPlain){%>
		<%= saveLinksTextPlain %> = _extract_urls(messageData["body"]["plain"]);
	<%}%>
<%}%>
<%if(getTextRaw){%>
	<%= saveTextRaw %> = messageData["body"]["raw"];
	<%if(getLinksTextRaw){%>
		<%= saveLinksTextRaw %> = _extract_urls(messageData["body"]["raw"]);
	<%}%>
<%}%>
<%if(getSize){%><%= saveSize %> = messageData["size"];<%}%>
<%if(getFlags){%><%= saveFlags %> = messageData["flags"];<%}%>
<%if(getDate){%><%= saveDate %> = messageData["date"];<%}%>
<%if(getAttachNames){%><%= saveAttachnames %> = messageData["attachnames"];<%}%>
<%if(getAttachments){%><%= saveAttachments %> = messageData["attachments"];<%}%>

<%if(delAfter){%>
	_call_function(_InMail.delMessages, {uids: messageData["uid"]<%if(box!=='""'){%>, box: (<%= box %>)<%}%>})!
<%}else if(setFlagsAfter){%>
	_call_function(_InMail.setFlags, {uids: messageData["uid"], flags: (<%= setFlags %>)<%if(box!=='""'){%>, box: (<%= box %>)<%}%>})!
<%}%>
</script><script type="text/template" id="InMail_SearchLast_code">_call_function(_InMail.searchLast, {timeout: (<%= timeout_value() || 60000 %>)<%if(box!=='""'){%>, box: (<%= box %>)<%}%>})!
<%= variable %> = _result_function();
</script><script type="text/template" id="InMail_FindMessage_code"><%if((getTextHtml && getLinksTextHtml) || (getTextPlain && getLinksTextPlain) || (getTextRaw && getLinksTextRaw)){%>/*Dat:eyJzIjoiZXh0cmFjdF91cmxzIn0=*/<%}%>
_call_function(_InMail.<%if(wait){%>wait<%}else{%>find<%}%>Message, {criteria: {<%= [["from", from], ['"!from"', notFrom], ["to", to], ['"!to"', notTo], ["subject", subject], ['"!subject"', notSubject], ["text", text], ['"!text"', notText], ["flags", flags], ['"!flags"', notFlags], ["since", since], ["before", before]].filter(function(el){return el[1] !== '""'}).map(function(el){return el[0] + ':(' + el[1] + ')'}).join(', ') %>}, sorts: {type: (<%= sortType %>), field: (<%= sortField %>)}, body: [<%= [['html', getTextHtml], ['plain', getTextPlain], ['raw', getTextRaw]].filter(function(el){return el[1]}).map(function(el){return "'" + el[0] + "'"}).join(', ') %>], headers: [<%= [['from', getFrom], ['to', getTo], ['subject', getSubject], ['raw', getRawHeader]].filter(function(el){return el[1]}).map(function(el){return "'" + el[0] + "'"}).join(', ') %>]<%if(getSize){%>, size: <%= getSize %><%}%><%if(getFlags){%>, flags: <%= getFlags %><%}%><%if(getDate){%>, date: <%= getDate %><%}%><%if(getAttachNames){%>, attachnames: <%= getAttachNames %><%}%><%if(getAttachments){%>, attachments: (<%= attachmentsMask %>)<%}%><%if(wait){%>, minResults: (<%= minResults %>), interval: ((<%= interval %>) * 1000)<%}%><%if(box!=='""'){%>, box: (<%= box %>)<%}%>, timeout: (<%if(wait){%>(<%= timeout %>) * 1000<%}else{%><%= timeout_value() || 60000 %><%}%>)})!
var messageData = _result_function();
<%if(getUid){%><%= saveUid %> = messageData["uid"];<%}%>
<%if(getFrom){%><%= saveFrom %> = messageData["headers"]["from"];<%}%>
<%if(getTo){%><%= saveTo %> = messageData["headers"]["to"];<%}%>
<%if(getSubject){%><%= saveSubject %> = messageData["headers"]["subject"];<%}%>
<%if(getRawHeader){%><%= saveRawHeader %> = messageData["headers"]["raw"];<%}%>
<%if(getTextHtml){%>
	<%= saveTextHtml %> = messageData["body"]["html"];
	<%if(getLinksTextHtml){%>
		<%= saveLinksTextHtml %> = _extract_urls(messageData["body"]["html"]);
	<%}%>
<%}%>
<%if(getTextPlain){%>
	<%= saveTextPlain %> = messageData["body"]["plain"];
	<%if(getLinksTextPlain){%>
		<%= saveLinksTextPlain %> = _extract_urls(messageData["body"]["plain"]);
	<%}%>
<%}%>
<%if(getTextRaw){%>
	<%= saveTextRaw %> = messageData["body"]["raw"];
	<%if(getLinksTextRaw){%>
		<%= saveLinksTextRaw %> = _extract_urls(messageData["body"]["raw"]);
	<%}%>
<%}%>
<%if(getSize){%><%= saveSize %> = messageData["size"];<%}%>
<%if(getFlags){%><%= saveFlags %> = messageData["flags"];<%}%>
<%if(getDate){%><%= saveDate %> = messageData["date"];<%}%>
<%if(getAttachNames){%><%= saveAttachnames %> = messageData["attachnames"];<%}%>
<%if(getAttachments){%><%= saveAttachments %> = messageData["attachments"];<%}%>

<%if(delAfter){%>
	_call_function(_InMail.delMessages, {uids: messageData["uid"]<%if(box!=='""'){%>, box: (<%= box %>)<%}%>})!
<%}else if(setFlagsAfter){%>
	_call_function(_InMail.setFlags, {uids: messageData["uid"], flags: (<%= setFlags %>)<%if(box!=='""'){%>, box: (<%= box %>)<%}%>})!
<%}%>
</script><script type="text/template" id="InMail_SearchOne_code">_call_function(_InMail.<%if(wait){%>wait<%}else{%>search<%}%>One, {criteria: {<%= [["from", from], ['"!from"', notFrom], ["to", to], ['"!to"', notTo], ["subject", subject], ['"!subject"', notSubject], ["text", text], ['"!text"', notText], ["flags", flags], ['"!flags"', notFlags], ["since", since], ["before", before]].filter(function(el){return el[1] !== '""'}).map(function(el){return el[0] + ':(' + el[1] + ')'}).join(', ') %>}, sorts: {type: (<%= sortType %>), field: (<%= sortField %>)}<%if(wait){%>, minResults: (<%= minResults %>), interval: ((<%= interval %>) * 1000)<%}%><%if(box!=='""'){%>, box: (<%= box %>)<%}%>, timeout: (<%if(wait){%>(<%= timeout %>) * 1000<%}else{%><%= timeout_value() || 60000 %><%}%>)})!
<%= variable %> = _result_function();
</script><script type="text/template" id="InMail_Search_code">_call_function(_InMail.<%if(wait){%>wait<%}else{%>search<%}%>, {criteria: {<%= [["from", from], ['"!from"', notFrom], ["to", to], ['"!to"', notTo], ["subject", subject], ['"!subject"', notSubject], ["text", text], ['"!text"', notText], ["flags", flags], ['"!flags"', notFlags], ["since", since], ["before", before]].filter(function(el){return el[1] !== '""'}).map(function(el){return el[0] + ':(' + el[1] + ')'}).join(', ') %>}, sorts: {type: (<%= sortType %>), field: (<%= sortField %>)}<%if(wait){%>, minResults: (<%= minResults %>), interval: ((<%= interval %>) * 1000)<%}%><%if(maxResults!=='""'){%>, maxResults: (<%= maxResults %>)<%}%><%if(offset!=='""'){%>, offset: (<%= offset %>)<%}%><%if(box!=='""'){%>, box: (<%= box %>)<%}%>, timeout: (<%if(wait){%>(<%= timeout %>) * 1000<%}else{%><%= timeout_value() || 60000 %><%}%>)})!
<%= variable %> = _result_function();
</script><script type="text/template" id="InMail_GetMessage_code"><%if((getTextHtml && getLinksTextHtml) || (getTextPlain && getLinksTextPlain) || (getTextRaw && getLinksTextRaw)){%>/*Dat:eyJzIjoiZXh0cmFjdF91cmxzIn0=*/<%}%>
_call_function(_InMail.getMessage, {uid: (<%= uid %>), body: [<%= [['html', getTextHtml], ['plain', getTextPlain], ['raw', getTextRaw]].filter(function(el){return el[1]}).map(function(el){return "'" + el[0] + "'"}).join(', ') %>], headers: [<%= [['from', getFrom], ['to', getTo], ['subject', getSubject], ['raw', getRawHeader]].filter(function(el){return el[1]}).map(function(el){return "'" + el[0] + "'"}).join(', ') %>]<%if(getSize){%>, size: <%= getSize %><%}%><%if(getFlags){%>, flags: <%= getFlags %><%}%><%if(getDate){%>, date: <%= getDate %><%}%><%if(getAttachNames){%>, attachnames: <%= getAttachNames %><%}%><%if(getAttachments){%>, attachments: (<%= attachmentsMask %>)<%}%><%if(box!=='""'){%>, box: (<%= box %>)<%}%>, timeout: (<%= timeout_value() || 60000 %>)})!
var messageData = _result_function();
<%if(getFrom){%><%= saveFrom %> = messageData["headers"]["from"];<%}%>
<%if(getTo){%><%= saveTo %> = messageData["headers"]["to"];<%}%>
<%if(getSubject){%><%= saveSubject %> = messageData["headers"]["subject"];<%}%>
<%if(getRawHeader){%><%= saveRawHeader %> = messageData["headers"]["raw"];<%}%>
<%if(getTextHtml){%>
	<%= saveTextHtml %> = messageData["body"]["html"];
	<%if(getLinksTextHtml){%>
		<%= saveLinksTextHtml %> = _extract_urls(messageData["body"]["html"]);
	<%}%>
<%}%>
<%if(getTextPlain){%>
	<%= saveTextPlain %> = messageData["body"]["plain"];
	<%if(getLinksTextPlain){%>
		<%= saveLinksTextPlain %> = _extract_urls(messageData["body"]["plain"]);
	<%}%>
<%}%>
<%if(getTextRaw){%>
	<%= saveTextRaw %> = messageData["body"]["raw"];
	<%if(getLinksTextRaw){%>
		<%= saveLinksTextRaw %> = _extract_urls(messageData["body"]["raw"]);
	<%}%>
<%}%>
<%if(getSize){%><%= saveSize %> = messageData["size"];<%}%>
<%if(getFlags){%><%= saveFlags %> = messageData["flags"];<%}%>
<%if(getDate){%><%= saveDate %> = messageData["date"];<%}%>
<%if(getAttachNames){%><%= saveAttachnames %> = messageData["attachnames"];<%}%>
<%if(getAttachments){%><%= saveAttachments %> = messageData["attachments"];<%}%>

<%if(delAfter){%>
	_call_function(_InMail.delMessages, {uids: messageData["uid"]<%if(box!=='""'){%>, box: (<%= box %>)<%}%>})!
<%}else if(setFlagsAfter){%>
	_call_function(_InMail.setFlags, {uids: messageData["uid"], flags: (<%= setFlags %>)<%if(box!=='""'){%>, box: (<%= box %>)<%}%>})!
<%}%>
</script><script type="text/template" id="InMail_Count_code">_call_function(_InMail.count, {criteria: {<%= [["from", from], ['"!from"', notFrom], ["to", to], ['"!to"', notTo], ["subject", subject], ['"!subject"', notSubject], ["text", text], ['"!text"', notText], ["flags", flags], ['"!flags"', notFlags], ["since", since], ["before", before]].filter(function(el){return el[1] !== '""'}).map(function(el){return el[0] + ':(' + el[1] + ')'}).join(', ') %>}<%if(box!=='""'){%>, box: (<%= box %>)<%}%>, timeout: (<%= timeout_value() || 60000 %>)})!
<%= variable %> = _result_function();
</script><script type="text/template" id="InMail_DelMessages_code">_call_function(_InMail.delMessages, {uids: (<%= uids %>)<%if(box!=='""'){%>, box: (<%= box %>)<%}%>, timeout: (<%= timeout_value() || 60000 %>)})!
</script><script type="text/template" id="InMail_CopyMessages_code">_call_function(_InMail.copyMessages, {uids: (<%= uids %>)<%if(box!=='""'){%>, box: (<%= box %>)<%}%>, toBox: (<%= toBox %>), timeout: (<%= timeout_value() || 60000 %>)})!
</script><script type="text/template" id="InMail_MoveMessages_code">_call_function(_InMail.moveMessages, {uids: (<%= uids %>)<%if(box!=='""'){%>, box: (<%= box %>)<%}%>, toBox: (<%= toBox %>), timeout: (<%= timeout_value() || 60000 %>)})!
</script><script type="text/template" id="InMail_GetFlags_code">_call_function(_InMail.getFlags, {uid: (<%= uid %>)<%if(box!=='""'){%>, box: (<%= box %>)<%}%>, timeout: (<%= timeout_value() || 60000 %>)})!
<%= variable %> = _result_function();
</script><script type="text/template" id="InMail_SetFlags_code">_call_function(_InMail.<%if(add){%>add<%}else{%>set<%}%>Flags, {uids: (<%= uids %>), flags: (<%= flags %>)<%if(box!=='""'){%>, box: (<%= box %>)<%}%>, timeout: (<%= timeout_value() || 60000 %>)})!
</script><script type="text/template" id="InMail_DelFlags_code">_call_function(_InMail.delFlags, {uids: (<%= uids %>), flags: (<%= flags %>)<%if(box!=='""'){%>, box: (<%= box %>)<%}%>, timeout: (<%= timeout_value() || 60000 %>)})!
</script><script type="text/template" id="InMail_GetBoxes_code">_call_function(_InMail.getBoxes, {format: (<%= format %>), timeout: (<%= timeout_value() || 60000 %>)})!
<%= variable %> = _result_function();
</script><script type="text/template" id="InMail_Status_code">_call_function(_InMail.status, {name: (<%= name %>), timeout: (<%= timeout_value() || 60000 %>)})!
var boxInfo = _result_function();
<%= total %> = boxInfo["messages"]["total"];
<%= recent %> = boxInfo["messages"]["new"];
<%= unseen %> = boxInfo["messages"]["unseen"];
</script><script type="text/template" id="InMail_AddBox_code">_call_function(_InMail.addBox, {name: (<%= name %>), timeout: (<%= timeout_value() || 60000 %>)})!
</script><script type="text/template" id="InMail_RenameBox_code">_call_function(_InMail.renameBox, {newName: (<%= newName %>), oldName: (<%= oldName %>), timeout: (<%= timeout_value() || 60000 %>)})!
</script><script type="text/template" id="InMail_DelBox_code">_call_function(_InMail.delBox, {name: (<%= name %>), timeout: (<%= timeout_value() || 60000 %>)})!</script><script type="text/template" id="InMail_Close_code">_InMail.close();
</script><script type="text/template" id="InMail_SetDebug_code">_InMail.setDebug(<%= enable %>);
</script><script type="text/template" id="json_create_object_code"><%= variable %> = {};
<% if (key1 != null) { %>
<%= variable %>[<%= key1 %>] = <%= value1 %>;
<% } %>
<% if (key2 != null) { %>
<%= variable %>[<%= key2 %>] = <%= value2 %>;
<% } %>
<% if (key3 != null) { %>
<%= variable %>[<%= key3 %>] = <%= value3 %>;
<% } %>
</script><script type="text/template" id="json_parse_value_code">try {
    <%= variable %> = JPath.value(<%= data %>, <%= path %>);
} catch (e) {
    fail(e);
}</script><script type="text/template" id="json_parse_values_code">try {
    <%= variable %> = JPath.values(<%= data %>, <%= path %>);
} catch (e) {
    fail(e);
}</script><script type="text/template" id="json_parse_key_code">try {
    <%= variable %> = JPath.key(<%= data %>, <%= path %>);
} catch (e) {
    fail(e);
}</script><script type="text/template" id="json_parse_keys_code">try {
    <%= variable %> = JPath.keys(<%= data %>, <%= path %>);
} catch (e) {
    fail(e);
}</script><script type="text/template" id="json_get_count_code">try {
    <%= variable %> = JPath.count(<%= data %>, <%= path %>);
} catch (e) {
    fail(e);
}</script><script type="text/template" id="json_change_value_code">try {
    <%= variable %> = JPath.change(<%= data %>, <%= path %>, <%= value %>);
} catch (e) {
    fail(e);
}</script><script type="text/template" id="json_remove_value_code">try {
    <%= variable %> = JPath.remove(<%= data %>, <%= path %>);
} catch (e) {
    fail(e);
}</script><script type="text/template" id="json_check_format_code">try {
    <%= variable %> = JPath.checkFormat(<%= data %>);
} catch (e) {
    fail(e);
}</script><script type="text/template" id="json_change_format_code">try {
    <%= variable %> = JPath.changeFormat(<%= data %>, <%= type %>);
} catch (e) {
    fail(e);
}</script><script type="text/template" id="json_from_string_code">try {
    <%= variable %> = JPath.changeFormat(<%= data %>, "json");
} catch (e) {
    fail(e);
}</script><script type="text/template" id="json_to_string_code">try {
    <%= variable %> = JPath.changeFormat(<%= data %>, "string");
} catch (e) {
    fail(e);
}</script><script type="text/template" id="create_list_code"><%= variable %> = []

<% if(!value1empty){ %>
	<%= variable %>.push(<%= value1 %>)
<% } %>

<% if(!value2empty){ %>
	<%= variable %>.push(<%= value2 %>)
<% } %>

<% if(!value3empty){ %>
	<%= variable %>.push(<%= value3 %>)
<% } %>
</script><script type="text/template" id="add_element_to_list_code"><%= variable %>.push(<%= value %>)</script><script type="text/template" id="get_list_element_by_index_code"><%= variable_result %> = (<%= variable %>)[<%= index %>];
<% if(remove){ %>
	<%= variable %>.splice(<%= index %>,1)
<% } %></script><script type="text/template" id="first_list_element_code"><%= variable_result %> = (<%= variable %>)[0];
<% if(remove){ %>
	<%= variable %>.splice(0,1)
<% } %></script><script type="text/template" id="last_list_element_code">if(<%= variable %>.length > 0)
{
	<%= variable_result %> = (<%= variable %>)[<%= variable %>.length - 1];
	<% if(remove){ %>
		<%= variable %>.splice(<%= variable %>.length - 1,1)
	<% } %>
}else
{
	<%= variable_result %> = null;
}</script><script type="text/template" id="random_list_element_code">{
	var r = Math.floor(Math.random() * (<%= variable %>.length));
	<%= variable_result %> = (<%= variable %>)[r];
	<% if(remove){ %>
		<%= variable %>.splice(r,1)
	<% } %>
}</script><script type="text/template" id="insert_element_to_list_code"><%= variable %>.splice(<%= index %>, 0, <%= value %>);</script><script type="text/template" id="list_set_element_code"><%= variable %>[(<%= index %> < 0) ? (<%= variable %>.length + <%= index %>) : <%= index %>] = <%= value %>;</script><script type="text/template" id="delete_by_index_code"><%= variable %>.splice(<%= index %>,1)</script><script type="text/template" id="delete_by_value_code"><%= variable %> = <%= variable %>.filter(function(e){return e!== <%= value %> })</script><script type="text/template" id="list_length_code"><%= variable_length %> = (<%= variable %>).length</script><script type="text/template" id="list_contains_code"><%= variable_save %> = (<%= variable %>).indexOf(<%= value %>) >= 0</script><script type="text/template" id="sublist_code"><%= variable_new %> = (<%= variable %>).slice().splice(<%= index_start %>,<%= index_end %>)</script><script type="text/template" id="remove_list_part_code">;(<%= variable %>).splice(<%= index_start %>,<%= index_end %>)</script><script type="text/template" id="remove_duplicates_code"><%= variable %> = (function(){var seen = {}; return (<%= variable %>).filter(function(item) { return seen.hasOwnProperty(item) ? false : (seen[item] = true); });})();</script><script type="text/template" id="join_list_code"><%= variable_result %> = (<%= variable %>).join(<%= separator %>)</script><script type="text/template" id="parse_string_to_list_code"><%= variable_result %> = (<%= stirng %>).split(<%= separator %>)</script><script type="text/template" id="get_index_from_list_code"><%= variable_save %> = (<%= variable %>).indexOf(<%= value %>)</script><script type="text/template" id="list_copy_code"><%= variable_new %> = (<%= variable %>).slice()</script><script type="text/template" id="list_sort_code">;(<%= variable %>).sort()</script><script type="text/template" id="list_shuffle_code">;(function (a) {var j, x, i;for (i = a.length; i; i--) {j = Math.floor(Math.random() * i);x = a[i - 1]; a[i - 1] = a[j];a[j] = x;}})(<%= variable %>)</script><script type="text/template" id="list_merge_code"><%= variable %> = (<%= variable %>).concat(<%= variable_second %>.slice())</script><script type="text/template" id="list_compare_code"><%= result %> = JSON.stringify((<%= variable %>).slice().sort()) == JSON.stringify((<%= variable_second %>).slice().sort())</script><script type="text/template" id="path_base_name_code"><%= variable %> = _path.basename(<%= path %><%if(ext!=='""'){%>,<%= ext %><%}%>);
</script><script type="text/template" id="path_directory_name_code"><%= variable %> = _path.dirname(<%= path %>);
</script><script type="text/template" id="path_extension_name_code"><%= variable %> = _path.extname(<%= path %>);
</script><script type="text/template" id="is_absolute_path_code"><%= variable %> = _path.isAbsolute(<%= path %>);
</script><script type="text/template" id="join_paths_code"><%= variable %> = _path.join(<%
	var u1 = path1!=='""' || path2!=='""' || path2!=='""'
	var u2 = paths_list!=='""'
	if(u1){
		%>[<%= [path1, path2, path3].filter(function(el){return el !== '""'}).map(function(el){return '_avoid_nil(' + el + ')'}).join(', ') %>]<%
		if(u2){
			%>.concat(<%
		}
	}
	if(u2){
		%>_to_arr(_avoid_nilb(<%= paths_list %>, []))<%
		if(u1){
			%>)<%
		}
	}
%>);
</script><script type="text/template" id="normalize_path_code"><%= variable %> = _path.normalize(<%= path %>, <%= remove_trailing_slash %>);
</script><script type="text/template" id="parse_path_code">var parse_res = _path.parse(<%= path %>);
<%= root %> = parse_res["root"];
<%= dir %> = parse_res["dir"];
<%= base %> = parse_res["base"];
<%= ext %> = parse_res["ext"];
<%= name %> = parse_res["name"];
<%= items %> = parse_res["items"];
</script><script type="text/template" id="project_path_code"><%= variable %> = project_path();</script><script type="text/template" id="project_directory_code"><%= variable %> = project_directory();</script><script type="text/template" id="installation_path_code"><%= variable %> = installation_path();</script><script type="text/template" id="get_system_path_code">_call_function(_get_system_path,{name:(<%= name %>)})!
<%= variable %> = _result_function();
</script><script type="text/template" id="SMS_GetNumber_code">_call_function(_SMS.getNumber,{service:(<%= service %>),apiKey:(<%= apiKey %>),site:(<%= site %>),country:(<%= country %>)<%if(operator!=='""'){%>,operator:(<%= operator %>)<%}%><%if(maxPrice!=='""'){%>,maxPrice:(<%= maxPrice %>)<%}%><%if(customSite!=='""'){%>,customSite:(<%= customSite %>)<%}%><%if(customCountry!=='""'){%>,customCountry:(<%= customCountry %>)<%}%><%if(serverUrl!=='""'){%>,serverUrl:(<%= serverUrl %>)<%}%>,timeout:(<%= timeout_value() || 60000 %>)})!
<%= variable %> = _result_function();
</script><script type="text/template" id="SMS_GetCode_code">_call_function(_SMS.waitCode,{number:(<%= number %>),interval:(<%= interval %>),timeout:(<%= timeout %>)})!
<%= variable %> = _result_function();
</script><script type="text/template" id="SMS_SetStatus_code">_call_function(_SMS.setStatus,{number:(<%= number %>),status:(<%= status %>),deleteInfo:<%= deleteInfo %>,timeout:(<%= timeout_value() || 60000 %>)})!
</script><script type="text/template" id="SMS_GetBalance_code">_call_function(_SMS.getBalance,{service:(<%= service %>),apiKey:(<%= apiKey %>)<%if(serverUrl!=='""'){%>,serverUrl:(<%= serverUrl %>)<%}%>,timeout:(<%= timeout_value() || 60000 %>)})!
<%= variable %> = _result_function();
</script><script type="text/template" id="SMS_GetNumbersCount_code">_call_function(_SMS.getNumbersCount,{service:(<%= service %>),apiKey:(<%= apiKey %>),site:(<%= site %>),country:(<%= country %>)<%if(customSite!=='""'){%>,customSite:(<%= customSite %>)<%}%><%if(customCountry!=='""'){%>,customCountry:(<%= customCountry %>)<%}%><%if(serverUrl!=='""'){%>,serverUrl:(<%= serverUrl %>)<%}%>,timeout:(<%= timeout_value() || 60000 %>)})!
<%= variable %> = _result_function();
</script><script type="text/template" id="SMS_GetSites_code">_call_function(_SMS.getSites,{service:(<%= service %>),apiKey:(<%= apiKey %>)<%if(serverUrl!=='""'){%>,serverUrl:(<%= serverUrl %>)<%}%>,timeout:(<%= timeout_value() || 60000 %>)})!
<%= variable %> = _result_function();
</script><script type="text/template" id="SMS_GetCountries_code">_call_function(_SMS.getCountries,{service:(<%= service %>),apiKey:(<%= apiKey %>)<%if(serverUrl!=='""'){%>,serverUrl:(<%= serverUrl %>)<%}%>,timeout:(<%= timeout_value() || 60000 %>)})!
<%= variable %> = _result_function();
</script><script type="text/template" id="SMS_Debug_code">_SMS.setDebug(<%= enable %>);
</script><script type="text/template" id="execute_process_code">RANDOM_FILE = "temp_" + rand() + ".bat"
native("filesystem", "writefile", JSON.stringify({path: RANDOM_FILE,value: "chcp 65001\r\n" + ((<%= working_folder %>.length>0) ? ("cd " + <%= working_folder %> + "\r\n") : "" ) + ((<%= command %>).replace(/\r?\n/g, "\r\n")),base64:false,append:false}))
native_async("processmanager", "start", JSON.stringify({location: RANDOM_FILE, working_folder: "", waitfinish: <%= waitfinish %>, arguments: "", version: 2}))!

try
{
	var split = _result().split(",")
	<%= variable %> = base64_decode(split[0])
	<%= variable_fail %> = base64_decode(split[1])
}catch(e)
{
	<%= variable %> = _result()	
}


sleep(1000)!
native("filesystem", "removefile", RANDOM_FILE)
</script><script type="text/template" id="use_profile_code">_call(BrowserAutomationStudio_ChangeProfile,[{
	profile: (<%= profile %>),
	load_proxy: (<%= load_proxy %>),
	load_fp: (<%= load_fp %>),
    settings: {},
	key: (<%= key %>)
}])!</script><script type="text/template" id="stop_using_profile_code">_call(BrowserAutomationStudio_ChangeProfile,[{
	profile: "<Incognito>",
	load_proxy: "false",
	load_fp: "false",
    settings: {},
	key: ""
}])!


</script><script type="text/template" id="save_profile_code">ProfilePath = _get_profile()
native("filesystem", "copyfile", JSON.stringify({path: ProfilePath,dest: <%= profile %>}))</script><script type="text/template" id="remove_local_profile_code">ProfilePath = (<%= profile %>);
if(ProfilePath == "")
	ProfilePath = _get_profile()

_if(ProfilePath == _get_profile(), function(){
	var Params = {};
	Params["ProfilePath"] = "<Incognito>"
	_settings(Params)!
})!

_do(function(){
	if(_iterator() > 30)
		fail(tr("Timeout during deleting profile ") + ProfilePath);
	
	native("filesystem", "removefile", ProfilePath + "/lockfile");

	if(!JSON.parse(native("filesystem", "fileinfo", ProfilePath + "/lockfile"))["exists"])
		_break();

	sleep(1000)!
})!

native("filesystem", "removefile", ProfilePath)	
</script><script type="text/template" id="get_current_profile_code"><%= variable %> = _get_profile()
<%= variable2 %> = _get_profile().length > 0 && JSON.parse(native("filesystem", "fileinfo", _get_profile() + "/proxy.txt"))["exists"]
<%= variable3 %> = _get_profile().length > 0 && JSON.parse(native("filesystem", "fileinfo", _get_profile() + "/fingerprint.json"))["exists"]
</script><script type="text/template" id="regexp_first_code">var regexp_result = native("regexp", "first", JSON.stringify({text: <%= string %>,regexp:(<%= regexp %>).toString()}))
if(regexp_result.length == 0)
	regexp_result = []
else
	regexp_result = JSON.parse(regexp_result)

<%= resultall %> = regexp_result.pop()
if(typeof(<%= resultall %>) == 'undefined' || !<%= resultall %>)
    <%= resultall %> = ""

<%= groups %> = regexp_result

<% var list = variable.split(",") %>

<% for(var i = 0;i < list.length; i++){ %>
  VAR_<%= list[i] %> = regexp_result[<%= i %>]
  if(typeof(VAR_<%= list[i] %>) == 'undefined' || !VAR_<%= list[i] %>)
    VAR_<%= list[i] %> = ""
<% } %>

if(regexp_result.length == 0)
{
	VAR_<%= list[0] %> = <%= resultall %>
}

if(<%= resultall %> != "" && Array.isArray(<%= resultall %>))
  <%= groups %>.unshift(<%= resultall %>)</script><script type="text/template" id="regexp_scan_code"> <%= variable %> = native("regexp", "scan", JSON.stringify({text: <%= string %>,regexp:(<%= regexp %>).toString()}))
if(<%= variable %>.length == 0)
	<%= variable %> = []
else
	<%= variable %> = JSON.parse(<%= variable %>)</script><script type="text/template" id="regexp_match_code"><%= variable %> = Boolean(native("regexp", "ismatch", JSON.stringify({text: <%= string %>,regexp:(<%= regexp %>).toString()})) == "true")</script><script type="text/template" id="regexp_split_code"> <%= variable %> = native("regexp", "split", JSON.stringify({text: <%= string %>,regexp:(<%= regexp %>).toString()}))
if(<%= variable %>.length == 0)
	<%= variable %> = []
else
	<%= variable %> = JSON.parse(<%= variable %>)</script><script type="text/template" id="regexp_replace_code"><%= variable %> = native("regexp", "replace", JSON.stringify({text: <%= string %>,regexp:(<%= regexp %>).toString(),replace:<%= replace %>}))
</script><script type="text/template" id="create_resource_code">RCreate(<%= name %>, <%= success %>, <%= fail %>, <%= simultaneous %>, <%= interval %>, <%= greedy %>, <%= dontgiveup %>)</script><script type="text/template" id="delete_current_element_code">if(<%= key %> in _R && _R[<%= key %>])
{
  _R[<%= key %>].die()
  _R[<%= key %>] = null
}

if(<%= sync %>)
  RSync(<%= key %>)
</script><script type="text/template" id="resource_add_element_code">RInsert(<%= key %>,<%= data %>,<%= onlywrite %>)

if(<%= sync %>)
  RSync(<%= key %>)
</script><script type="text/template" id="get_resource_location_code"><%= save %> =RInfo(<%= key %>,"Location")</script><script type="text/template" id="resource_to_array_code"><%= save %> = RPick(<%= key %>)</script><script type="text/template" id="array_to_resource_code">RClear(<%= key %>)

RSync(<%= key %>)

for(var i = 0;i<(<%= variable %>).length;i++)
{
	RInsert(<%= key %>,(<%= variable %>)[i],false)
}

RSync(<%= key %>)
</script><script type="text/template" id="resource_reload_code">Reload(<%= key %>)</script><script type="text/template" id="resource_length_code"><%= save %> = ScriptWorker.GetTotalLength(<%= key %>)</script><script type="text/template" id="script_stats_thread_number_code"><%= variable %> = thread_number()</script><script type="text/template" id="script_stats_success_number_code"><%= variable %> = success_number()</script><script type="text/template" id="script_stats_fail_number_code"><%= variable %> = fail_number()</script><script type="text/template" id="script_stats_is_record_code"><%= variable %> = _is_record()</script><script type="text/template" id="smtp_settings_code">smtp_client_set_config(<%= host %>, <%= port %>, <%= username %>, <%= password %>, <%= encryption %>)

</script><script type="text/template" id="smtp_proxy_code">var hash = proxy_parse(<%= ProxyText %>)
if(<%= ProxyType %> != "auto" ){
	hash["IsHttp"] = <%= ProxyType %> == "http"
}
var login = <%= ProxyLogin %>
var password = <%= ProxyPassword %>
if(login.length > 0 && password.length > 0 )
{
	hash["name"] = login
	hash["password"] = password
}

smtp_client_set_proxy(hash["server"], hash["Port"], hash["IsHttp"], hash["name"], hash["password"])</script><script type="text/template" id="smtp_send_mail_code">native_async("curlwrapper", "easyperform", JSON.stringify(smtp_client_send_mail(<%= mailfrom %>, <%= mailto %>, <%= mailcc %>, <%= mailsubject %>, <%= mailbody %>, <%= is_html %>, <%= attachments %>)))!
{
	var json = JSON.parse(_result())
	if(typeof(_SMTP_DEBUG) != "undefined" && _SMTP_DEBUG)
		log(json["trace"]);
	if(json["code"] != "CURLE_OK")
	{
		fail(json["code"] + ": " + json["error"])
	}
}
</script><script type="text/template" id="smtp_enable_debug_code">_SMTP_DEBUG = (<%= enable %> == "enable")</script><script type="text/template" id="is_string_code"><%= variable %> = _is_string(<%= data %>);
</script><script type="text/template" id="is_not_empty_string_code"><%= variable %> = _is_not_empty_string(<%= data %>);
</script><script type="text/template" id="to_string_code"><%= variable %> = _to_string(<%= data %>);
</script><script type="text/template" id="to_number_code"><%= variable %> = _to_number(<%= string %>,<%= decimals %>,<%= dec_point %>,<%= thousands_sep %>);
</script><script type="text/template" id="number_format_code"><%= variable %> = _number_format(<%= number %>,<%= decimals %>,<%= digits %>,<%= dec_point %>,<%= thousands_sep %>);
</script><script type="text/template" id="count_substrings_code"><%= variable %> = _count_substrings(<%= string %>,<%= substring %>);
</script><script type="text/template" id="get_substring_code"><%= variable %> = _get_substring(<%= string %>,<%= from %><%if(to!=='""'){%>,<%= to %><%}%>);
</script><script type="text/template" id="get_substring_between_code"><%= variable %> = _get_substring_between(<%= string %>,<%= left %>,<%= right %>);
</script><script type="text/template" id="remove_string_part_code"><%= variable %> = _splice_string(<%= string %>,<%= from %>,<%= count %>,<%= substring %>);
</script><script type="text/template" id="to_lower_case_code"><%= variable %> = _to_lower_case(<%= string %>);
</script><script type="text/template" id="to_upper_case_code"><%= variable %> = _to_upper_case(<%= string %>);
</script><script type="text/template" id="string_contains_code"><%= variable %> = _string_contains(<%= string %>,<%= substring %><%if(from!=='""'){%>,<%= from %><%}%>);
</script><script type="text/template" id="string_length_code"><%= variable %> = _string_length(<%= string %>);
</script><script type="text/template" id="capitalize_words_code"><%= variable %> = _capitalize(<%= string %>,<%= all %>,<%= lower %>);
</script><script type="text/template" id="count_words_code"><%= variable %> = _count_words(<%= string %>);
</script><script type="text/template" id="split_to_words_code"><%= variable %> = _words(<%= string %>);
</script><script type="text/template" id="split_to_sentences_code"><%= variable %> = _sentences(<%= string %>);
</script><script type="text/template" id="split_to_lines_code"><%= variable %> = _split_string(<%= string %>,<%= separator %>,<%= remove %><%if(limit!=='""'){%>,<%= limit %><%}%>);
</script><script type="text/template" id="find_substring_code"><%= variable %> = _find_substring(<%= string %>,<%= substring %><%if(from!=='""'){%>,<%= from %><%}%>);
</script><script type="text/template" id="starts_with_code"><%= variable %> = _starts_with(<%= string %>,<%= substring %><%if(from!=='""'){%>,<%= from %><%}%>);
</script><script type="text/template" id="ends_with_code"><%= variable %> = _ends_with(<%= string %>,<%= substring %><%if(lenght!=='""'){%>,<%= lenght %><%}%>);
</script><script type="text/template" id="insert_substring_code"><%= variable %> = _insert_substring(<%= string %>,<%= index %>,<%= substring %>);
</script><script type="text/template" id="base64_code"><% if(encode) { %>
	<%= variable %> = base64_encode(<%= value %>)
<% }else{ %>
	<%= variable %> = base64_decode(<%= value %>)
<% } %>
</script><script type="text/template" id="template_code"><% if(isspintax && istemplate){ %>
	_template(<%= template %>)!
	var tmp_res = _avoid_nil(_result());
	tmp_res = _is_not_empty_string(tmp_res) ? tmp_res.replace("BASASYNC","\)\!") : tmp_res;
	<%= variable %> = _spintax(tmp_res);
<% } %>
<% if(!isspintax && istemplate){ %>
	_template(<%= template %>)!
	var tmp_res = _avoid_nil(_result());
	tmp_res = _is_not_empty_string(tmp_res) ? tmp_res.replace("BASASYNC","\)\!") : tmp_res;
	<%= variable %> = tmp_res;
<% } %>

<% if(isspintax && !istemplate){ %>
	<%= variable %> = _spintax(<%= template %>)
<% } %>

<% if(!isspintax && !istemplate){ %>
	<%= variable %> = <%= template %>
<% } %></script><script type="text/template" id="replacestring_code"><%= variable %> = _replace_string(<%= value %>,<%= from %>,<%= to %>);
</script><script type="text/template" id="randomstring_code"><%= variable %> = _random_string(<%= length %>,<%= chars %>);
</script><script type="text/template" id="new_line_code"><%= variable %> = '<%if(carriage_return){%>\r<%}%>\n';
</script><script type="text/template" id="join_strings_code"><%= variable %> = _join_strings(<%
	var u1 = string1!=='""' || string2!=='""' || string2!=='""'
	var u2 = strings_list!=='""'
	if(u1){
		%>[<%= [string1, string2, string3].filter(function(el){return el !== '""'}).map(function(el){return '_avoid_nil(' + el + ')'}).join(', ') %>]<%
		if(u2){
			%>.concat(<%
		}
	}
	if(u2){
		%>_to_arr(_avoid_nilb(<%= strings_list %>, []))<%
		if(u1){
			%>)<%
		}
	}
%>, <%= separator %>);
</script><script type="text/template" id="latinize_code"><%= variable %> = _latinize(<%= string %>,<%= cyrillic %>);
</script><script type="text/template" id="declination_code"><%= variable %> = _declination(<%= number %>,[<%= word1 %>,<%= word2 %>,<%= word5 %>]);
</script><script type="text/template" id="parse_csv_string_code">var csv_res = _csv_parse(<%= string %>,<%= separators %>,<%= convert_types %>);
VAR_<%= all %> = csv_res;
<% for(var i = 0;i < list.length; i++){ %>
	VAR_<%= list[i] %> = _avoid_nilb(csv_res[<%= i %>], "");
<% } %>
</script><script type="text/template" id="create_csv_string_code"><%= variable %> = _csv_generate(<%
	var u1 = item1!=='""' || item2!=='""' || item2!=='""'
	var u2 = items_list!=='""'
	if(u1){
		%>[<%= [item1, item2, item3].filter(function(el){return el !== '""'}).map(function(el){return '_avoid_nil(' + el + ')'}).join(', ') %>]<%
		if(u2){
			%>.concat(<%
		}
	}
	if(u2){
		%>_to_arr(_avoid_nilb(<%= items_list %>, []))<%
		if(u1){
			%>)<%
		}
	}
%>, <%= separator %>);
</script><script type="text/template" id="trim_code"><%= variable %> = _trim(<%= string %>, <% if(spaces){ %>_STR_WHITESPACE + <% }%>"<% if(breaks){ %>\\r\\n\\f<% }%><% if(tabs){ %>\\t\\v<% }%>"<% if(characters!=='""'){ %> + <%= characters %><% }%>, <%= all || left %>, <%= all || right %>);
</script><script type="text/template" id="clean_code"><%= variable %> = _clean(<%= string %>, "<% if(tabs){ %>\\t\\v<% }%>"<% if(characters_to_delete!=='""'){ %> + <%= characters_to_delete %><% }%>, "<% if(breaks){ %>\\r\\n\\f<% }%>"<% if(characters_to_space!=='""'){ %> + <%= characters_to_space %><% }%>, <%= spaces %>);
</script><script type="text/template" id="extract_emails_code"><%= variable %> = _extract_emails(<%= string %>);
</script><script type="text/template" id="extract_urls_code"><%= variable %> = _extract_urls(<%= string %>);
</script><script type="text/template" id="extract_phone_numbers_code"><%= variable %> = _extract_phone_numbers(<%= string %>);
</script><script type="text/template" id="html_special_characters_code"><% if(encode) { %>
	<%= variable %> = _escape_html(<%= string %>)
<% }else{ %>
	<%= variable %> = _unescape_html(<%= string %>)
<% } %>
</script><script type="text/template" id="send_message_code">var getTime = function() {

	var checkTime = function (i) {
		return (i < 10) ? "0" + i : i;
	}

	var d = new Date();
	var hh = checkTime(d.getHours());
	var mm = checkTime(d.getMinutes());
	var ss = checkTime(d.getSeconds());
	
	return '[' + hh + ':' + mm + ':' + ss + ']'
}

var mess, _url_temp, json, tmp = "";
_L["Thread"] = {"ru": "Поток"};
tmp = (<%= message %>)

<% if(is_num_thread && is_time) { %>
	mess = "<b>" + getTime() +" " + tr("Thread") + " #" + thread_number() + " : </b>" + tmp
<% } else if(is_num_thread) { %>
    mess = "<b>" + tr("Thread") + " #" + thread_number() + " : </b>" + tmp
<% } else if(is_time) { %>
	mess = "<b>" + getTime() + " </b>" + tmp
<% } else { %>
	mess = tmp
<% } %>	

_url_temp = "https://api.telegram.org/bot"+ <%= token %> + "/sendMessage?chat_id=" + <%= chat_id %> + "&text=" + encodeURIComponent(mess) + (<%= is_num_thread %> === true || <%= is_time %> === true ? '&parse_mode=HTML' : '')

_switch_http_client_internal()
http_client_get2(_url_temp, {method:("GET")})!
var json = JSON.parse(http_client_content())
_switch_http_client_main()
if (!json['ok'])
	fail(json['description'], false)
</script><script type="text/template" id="timezones_set_timezone_and_geolocation_by_ip_code">_call(_get_ip_info, [<%= value %>, <%= ip_info_method %>, <%= ip_api_key %>, <%= function_name %>])!
IP_INFO = _result()
if(!IP_INFO["valid"])
	fail("Failed to get ip info for " + (<%= value %>));

_if((<%= change_geolocation %>) == "true", function(){
	geolocation(IP_INFO["latitude"],IP_INFO["longitude"])!
})!

_if((<%= change_timezone %>) == "true", function(){
	_settings({"Timezone":(-IP_INFO["offset"]).toString(),"TimezoneName":IP_INFO["timezone"]})!
})!

_if((<%= change_webrtc %>) == "true", function(){
	_settings({"Webrtc":"replace","WebrtcIps":(<%= value %>)})!
})!

_if((<%= change_browserlanguage %>) == "true", function(){
	var country = IP_INFO["country"].toUpperCase()
	var language = native("timezones", "country_to_language", country)
	header("Accept-Language", language + "-" + country)!
	_settings({"Fingerprints.Locale":IP_INFO["country"].toLowerCase()})!
})!
sleep(1000)!</script><script type="text/template" id="timezones_set_timezone_code">var UpdatedSettings = {}
if((<%= value %>).toString().length > 0)
{
    UpdatedSettings["Timezone"] = (-parseInt(<%= value %>)).toString()
}

if((<%= timezonename %>).toString().length > 0)
{
    UpdatedSettings["TimezoneName"] = <%= timezonename %>
}

_settings(UpdatedSettings)!
sleep(1000)!</script><script type="text/template" id="timezones_set_geolocation_code">_if((<%= latitude %>).toString().length > 0 && (<%= longitude %>).toString().length > 0, function(){
    geolocation(parseFloat(<%= latitude %>),parseFloat(<%= longitude %>))!
})!

geolocation_object(<%= geolocation %>)!
sleep(1000)!</script><script type="text/template" id="timezones_ip_info_code">_call(_get_ip_info, [<%= value %>, <%= ip_info_method %>, <%= ip_api_key %>, <%= function_name %>])!
var json = _result()
<%= variable_valid %> = json["valid"]
<%= variable_country %> = json["country"]
<%= variable_city %> = json["city"]
<%= variable_latitude %> = json["latitude"]
<%= variable_longitude %> = json["longitude"]
<%= variable_timezone %> = json["timezone"]
<%= variable_offset %> = json["offset"]
<%= variable_dst_offset %> = json["dstoffset"]</script><script type="text/template" id="normalize_url_code"><%= variable %> = _normalize_url(<%= url %>, {base_url: <%= base_url %>, default_protocol: <%= default_protocol %>, normalize_protocol: <%= normalize_protocol %>, force_http: <%= force_http %>, force_https: <%= force_https %>, strip_authentication: <%= strip_authentication %>, strip_query: <%= strip_query %>, strip_hash: <%= strip_hash %>, strip_protocol: <%= strip_protocol %>, strip_www: <%= strip_www %>, remove_query_parameters: <%= remove_query_parameters %>, remove_trailing_slash: <%= remove_trailing_slash %>, remove_directory_index: <%= remove_directory_index %>, sort_query_parameters: <%= sort_query_parameters %>});
</script><script type="text/template" id="parse_url_code">var parse_res = new _url(<%= url %>, {normalize: <%= normalize %>, base_url: <%= base_url %>, rfail: <%= rfail %>});
<%= protocol %> = _avoid_nil(parse_res["protocol"]);
<%= username %> = _avoid_nil(parse_res["username"]);
<%= password %> = _avoid_nil(parse_res["password"]);
<%= host %> = _avoid_nil(parse_res["host"]);
<%= port %> = _avoid_nil(parse_res["port"]);
<%= path %> = _avoid_nil(parse_res["pathname"]);
<%= query %> = _avoid_nil(parse_res["query"]);
<%= hash %> = _avoid_nil(parse_res["hash"]);
</script><script type="text/template" id="generate_url_code"><%= variable %> = _generate_url({<%= [["protocol", protocol], ["username", username], ["password", password], ["host", host], ["port", port], ["pathname", path], ["query", query], ["hash", hash]].filter(function(el){return el[1] !== '""'}).map(function(el){return el[0] + ':(' + el[1] + ')'}).join(', ') %>});
</script><script type="text/template" id="change_url_code"><%= variable %> = _change_url(<%= url %>, {<%= [["protocol", protocol], ["username", username], ["password", password], ["host", host], ["port", port], ["pathname", path], ["query", query], ["hash", hash]].filter(function(el){return el[1] !== '""'}).map(function(el){return el[0] + ':(' + el[1] + ')'}).join(', ') %>}, {normalize: <%= normalize %>, base_url: <%= base_url %>, rfail: <%= rfail %>, clear_query: <%= clear_query %>});
</script><script type="text/template" id="parse_ua_code">var parse_res = new _ua(<%= ua %>);
<%= platform_type %> = _avoid_nil(parse_res["platform"]["type"]);
<%= browser_name %> = _avoid_nil(parse_res["browser"]["name"]);
<%= browser_version %> = _avoid_nil(parse_res["browser"]["version"]);
<%= browser_major_version %> = _avoid_nil(parse_res["browser"]["major"]);
<%= engine_name %> = _avoid_nil(parse_res["engine"]["name"]);
<%= engine_version %> = _avoid_nil(parse_res["engine"]["version"]);
<%= os_name %> = _avoid_nil(parse_res["os"]["name"]);
<%= os_version %> = _avoid_nil(parse_res["os"]["version"]);
<%= device_vendor %> = _avoid_nil(parse_res["device"]["vendor"]);
<%= device_model %> = _avoid_nil(parse_res["device"]["model"]);
<%= device_type %> = _avoid_nil(parse_res["device"]["type"]);
<%= cpu_architecture %> = _avoid_nil(parse_res["cpu"]["architecture"]);
</script><script type="text/template" id="punycode_code"><% if(encode) { %>
	<%= variable %> = _punycode.urlToASCII(<%= string %>)
<% }else{ %>
	<%= variable %> = _punycode.urlToUnicode(<%= string %>)
<% } %>
</script><script type="text/template" id="url_component_code"><% if(encode) { %>
	<%= variable %> = _encode_url_component(<%= string %>)
<% }else{ %>
	<%= variable %> = _decode_url_component(<%= string %>)
<% } %>
</script><script type="text/template" id="user_notification_play_sound_code">native("usernotification", "playsound", "")</script><script type="text/template" id="user_notification_user_input_code">solve_base64("manual","BAS_USER_ASK" + <%= label %>)!
<%= variable %> = _result()</script><script type="text/template" id="user_notification_web_interface_eval_code">_web_interface_eval(<%= code %>)</script><script type="text/template" id="user_notification_manual_browser_control_code">_manual_browser_control(<%= label %>)!</script><script type="text/template" id="xpath_xml_code">html_parser_xpath_parse(<%= text %>)

if((<%= fail %>) && !html_parser_xpath_exist(<%= value %>))
	fail("Can't resolve query " + <%= value %>);

<%= variable %> = html_parser_xpath_xml(<%= value %>)
</script><script type="text/template" id="xpath_xml_list_code">html_parser_xpath_parse(<%= text %>)
<%= variable %> = html_parser_xpath_xml_list(<%= value %>)
</script><script type="text/template" id="xpath_text_code">html_parser_xpath_parse(<%= text %>)

if((<%= fail %>) && !html_parser_xpath_exist(<%= value %>))
	fail("Can't resolve query " + <%= value %>);

<%= variable %> = html_parser_xpath_text(<%= value %>)
</script><script type="text/template" id="xpath_text_list_code">html_parser_xpath_parse(<%= text %>)
<%= variable %> = html_parser_xpath_text_list(<%= value %>)
</script><script type="text/template" id="xpath_count_code">html_parser_xpath_parse(<%= text %>)
<%= variable %> = html_parser_xpath_count(<%= value %>)
</script><script type="text/template" id="xpath_exists_code">html_parser_xpath_parse(<%= text %>)
<%= variable %> = html_parser_xpath_exist(<%= value %>)
</script><script type="text/template" id="BACKPACK_Approve_code">_call_function(Approve,{  })!
</script><script type="text/template" id="BACKPACK_UnlockPassword_code">_call_function(UnlockPassword,{ "Вставить пароль": (<%= tevsburp %>) })!
</script><script type="text/template" id="BACKPACK_AddNetworks_code">_call_function(AddNetworks,{  })!
</script><script type="text/template" id="BACKPACK_ImportWalletToBACKPACK_code">_call_function(ImportWalletToBACKPACK,{ "Вставить пароль": (<%= rwpeahqp %>),"Вставить сид фразу": (<%= fudtlhip %>) })!
</script><script type="text/template" id="RABBY_RABBY_conect_code">_call_function(RABBY_RABBY_conect,{ "NETWORK_NAME": (<%= jayggiax %>) })!
</script><script type="text/template" id="RABBY_RABBY_get_wallet_adress_code">_call_function(RABBY_RABBY_get_wallet_adress,{  })!
<%= variable %> = _result_function()
</script><script type="text/template" id="RABBY_RABBY_login_code">_call_function(RABBY_RABBY_login,{ "PASSWORD": (<%= ndttjwhy %>),"SEED": (<%= aqufuxdq %>) })!
</script><script type="text/template" id="START_GOOGLEstart_code">_call_function(GOOGLEstart,{ "Логин GOOGLE": (<%= labghzdm %>),"Пароль GOOGLE": (<%= uvkjqfyw %>),"Путь к папке профиля": (<%= wurjeqny %>),"Путь к файлу Отпечатка браузера": (<%= gyduixmh %>),"Путь к файлу с Расширениями браузера": (<%= gcuomkvy %>) })!
</script>

  <script type="text/template" id="exist_code">
      /*Browser*/
      <% if(imagesearch){ %>
        <%= waiter %>        
      <% }else if(query){ %>
        ;_SELECTOR=<%=query%>;
      <% } %>

      <%= path %>.exist()!
      <%= variable %> = _result() == 1
      <% if(isvisible){ %>
        _if(<%= variable %>, function(){
          <%= path %>.script("_BAS_HIDE(BrowserAutomationStudio_IsVisible)(self)")!
          <%= variable %> = _result().indexOf("true")>=0
        })!
      <% } %>

  </script>

  <script type="text/template" id="restorecookies_code">
      /*Browser*/

      VALUE = <%= value %>
      COOKIES = ""
      if(VALUE.length > 0)
      {
        COOKIES = JSON.parse(VALUE)["cookies"]
        if(typeof(COOKIES) == "undefined")
          COOKIES = ""
        else
          COOKIES = JSON.stringify(COOKIES)
      }


      restore_cookies(COOKIES,<%= append %>)!
  </script>

  <script type="text/template" id="loadcookiesfromhttpclient_code">
      /*Browser*/
      _switch_http_client_main()
      VALUE = http_client_save_cookies()
      COOKIES = ""
      if(VALUE.length > 0)
      {
        COOKIES = JSON.parse(VALUE)["cookies"]
        if(typeof(COOKIES) == "undefined")
          COOKIES = ""
        else
          COOKIES = JSON.stringify(COOKIES)
      }

      
      restore_cookies(COOKIES, false)!
  </script>

  <script type="text/template" id="loadcookiesfrombrowser_code">
      /*Browser*/
      save_cookies()!
      _switch_http_client_main()
      http_client_restore_cookies(JSON.stringify({cookies:JSON.parse(_result())}))
  </script>

  <script type="text/template" id="closebrowser_code">
      /*Browser*/
      /*ManualBrowser*/
      close_browser()
  </script>

  <script type="text/template" id="openbrowser_code">
      /*Browser*/
      /*ManualBrowser*/
      open_browser()!
  </script>

  <script type="text/template" id="setheader_code">
    header(<%= name %>, <%= value %>)!
    sleep(1000)!
  </script>

  <script type="text/template" id="clickCaptchaBrowser_code">
    /*Browser*/
    _call_function(BASCaptchaSolver.solveCoordinatesCaptcha, {
      textInstructions: <%= textInstructions %>,
      taskWaitTimeout: <%= taskWaitTimeout %>,
      taskWaitDelay: <%= taskWaitDelay %>,
      serviceName: <%= serviceName %>,
      serviceUrl: <%= serviceUrl %>,
      serviceKey: <%= serviceKey %>,
      imageData: <%= imageData %>,
    })!
    <%= clickCoordinatesList %> = _result_function();
  </script>

  <script type="text/template" id="solvecaptcha_code">
      /*Browser*/
      solver_properties_clear(<%= method %>)

      BAS_SolveRecaptcha_Serverurl = <%= serverurl %>;
      if(BAS_SolveRecaptcha_Serverurl.length > 0 && BAS_SolveRecaptcha_Serverurl.substr(BAS_SolveRecaptcha_Serverurl.length - 1) != "/")
        BAS_SolveRecaptcha_Serverurl += "/"

      if(<%= method %> == "rucaptcha")
      {
        if(BAS_SolveRecaptcha_Serverurl)
          solver_property("rucaptcha","serverurl",BAS_SolveRecaptcha_Serverurl)
        rucaptcha(<%= antigate %>)
      }
      if(<%= method %> == "antigate")
      {
        if(BAS_SolveRecaptcha_Serverurl)
          solver_property("antigate","serverurl",BAS_SolveRecaptcha_Serverurl)
        antigate(<%= antigate %>)
      }
      if(<%= method %> == "dbc")
      {
        if(BAS_SolveRecaptcha_Serverurl)
          solver_property("dbc","serverurl",BAS_SolveRecaptcha_Serverurl)
        dbc(<%= antigate %>)
      }
      if(<%= method %> == "2captcha")
      {
        if(BAS_SolveRecaptcha_Serverurl)
          solver_property("2captcha","serverurl",BAS_SolveRecaptcha_Serverurl)
        twocaptcha(<%= antigate %>)
      }
      if(<%= method %> == "capmonster" || <%= method %> == "capmonsterimage" || <%= method %> == "capmonsteraudio")
      {
        solver_property("capmonster","serverurl",BAS_SolveRecaptcha_Serverurl)
        capmonster(<%= antigate %>)
      }

      _if_else(<%= method %> == "captchasniper", function(){
        _switch_http_client_internal()
        http_client_post(BAS_SolveRecaptcha_Serverurl, ["file","base64://" + <%= value %>], {"content-type":("multipart"), "encoding":("UTF-8"), "method":("POST")})!
        {var split = http_client_content().split("|");<%= variable %> = split[split.length-1]}
        _switch_http_client_main()
      }, function(){
        <%= timeout_solver() %>
        solve_base64(<%= method %>,<%= value %>)!
        <%= variable %> = _result()
      })!


      
  
  </script>

  <script type="text/template" id="timeout_code">
      <% if(type == "general"){ %>
        general_timeout(<%= timeout %>)
      <% }else if(type == "fullpageload"){ %>
        async_load_timeout(<%= timeout %>)
      <% }else{ %>
        solver_timeout(<%= timeout %>)
      <% } %>
  </script>

  <script type="text/template" id="savecookies_code">
      /*Browser*/
      save_cookies(<%= domain %>)!
      <%= variable %> = "{\"cookies\":" + _result() + "}"
  </script>

  <script type="text/template" id="style_code">
      /*Browser*/
      <%= waiter %>
      <%= path %>.script('_BAS_SAFE(Window.getComputedStyle)(self)[' + JSON.stringify(<%= style %>) + ']')!
      <%= variable %> = _result()
  </script>

  <script type="text/template" id="typeelement_code">
      /*Browser*/
      <%= waiter %>
      <% if(!disableemulation){ %>
        _if(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %>, function(){
          _Idle.emulate(<%= emulation_settings %>)!
        })!
        _if_else(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %> && <% if(additional_emulation !== '""'){ %>_is_true(<%= additional_emulation %>)<% }else{ %>_Idle.additionalEmulationEnabled()<% } %>, function(){
          _Idle.typeOn(<%= BrowserAutomationStudio_GetEmulationTarget() %>,<%= text %>,{interval: <%= interval %>, moveSettings: <%= move_settings %><% if(additional_emulation !== '""'){ %>, additionalEmulation: (<%= additional_emulation %>)<% } %>})!
        }, function(){
          <% if(_SelectorModel.get("is_image")){ %>
            <%= path %>.random_point()!
          <% }else{ %>
            _call(_random_point, {})!
          <% } %>
          _if(_result().length > 0, function(){
            move(<%= move_settings %>)!
            <%= path %>.clarify(X,Y)!
            _call(_clarify,<%= move_settings %>)!
            mouse(X,Y)!
            <%= timeout_general() %>
            _type(<%= text %>,<%= interval %>)!
          })!
        })!
      <% }else{ %>
        <%= path %>.script("self.value=(" + JSON.stringify(<%= text %>) + ")")!
      <% } %>
  </script>

  <script type="text/template" id="clear_code">
      /*Browser*/
      <%= waiter %>
      _if(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %>, function(){
        _Idle.emulate(<%= emulation_settings %>)!
      })!
      _if_else(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %> && <% if(additional_emulation !== '""'){ %>_is_true(<%= additional_emulation %>)<% }else{ %>_Idle.additionalEmulationEnabled()<% } %>, function(){
        _Idle.typeOn(<%= BrowserAutomationStudio_GetEmulationTarget() %>,"<CONTROL>a<BACK>",{interval: 30, moveSettings: <%= move_settings %><% if(additional_emulation !== '""'){ %>, additionalEmulation: (<%= additional_emulation %>)<% } %>})!
      }, function(){
        <% if(_SelectorModel.get("is_image")){ %>
          <%= path %>.random_point()!
        <% }else{ %>
          _call(_random_point, {})!
        <% } %>
        _if(_result().length > 0, function(){
          move(<%= move_settings %>)!
          <%= path %>.clarify(X,Y)!
          _call(_clarify,<%= move_settings %>)!
          mouse(X,Y)!
          _type("<CONTROL>a<BACK>", 30)!
        })!
      })!
  </script>

  <script type="text/template" id="clickelement_code">
      /*Browser*/
      <%= waiter %>
      <% if(!disableemulation){ %>
        <% if(_SelectorModel.get("is_image")){ %>
          <%= path %>.random_point()!
        <% }else{ %>
          _call(_random_point, {})!
        <% } %>
        _if(_result().length > 0, function(){
          X = parseInt(_result().split(",")[0])
          Y = parseInt(_result().split(",")[1])
          mouse(X,Y)!
        })!
      <% }else{ %>
        <%= path %>.script("_BAS_SAFE($HTMLElement.click)(self)")!
      <% } %>
  </script>

  <script type="text/template" id="check_code">
      /*Browser*/
      <%= waiter %>
      _if(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %>, function(){
        _Idle.emulate(<%= emulation_settings %>)!
      })!
      <% if(_SelectorModel.get("is_image")){ %>
        <%= path %>.random_point()!
      <% }else{ %>
        _call(_random_point, {})!
      <% } %>
      _if(_result().length > 0, function(){
        move(<%= move_settings %>)!
        <%= path %>.clarify(X,Y)!
        _call(_clarify,<%= move_settings %>)!
        mouse(X,Y)!
      })!
  </script>

  <script type="text/template" id="focus_code">
      /*Browser*/
      <%= waiter %>
      _if(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %>, function(){
        _Idle.emulate(<%= emulation_settings %>)!
      })!
      <%= timeout_general() %>
      <% if(native_emulation){ %>
        _scrollTo(<%= path %>,<%= scroll_params %>)!
      <% }else{ %>
        <%= path %>.focus()!
      <% } %>
  </script>

  <script type="text/template" id="reset_code">
        new_browser()!
  </script>

  <script type="text/template" id="moveelement_code">
      /*Browser*/
      <%= waiter %>
      _if(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %>, function(){
        _Idle.emulate(<%= emulation_settings %>)!
      })!
      <% if(_SelectorModel.get("is_image")){ %>
          <%= path %>.random_point()!
        <% }else{ %>
          _call(_random_point, {})!
        <% } %>
      _if(_result().length > 0, function(){
        move(<%= move_settings %>)!
        <%= path %>.clarify(X,Y)!
        _call(_clarify,<%= move_settings %>)!
      })!
  </script>

  <script type="text/template" id="moveandclickelement_code">
      /*Browser*/
      <%= waiter %>
      <% if(!disableemulation){ %>
        _if(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %>, function(){
          _Idle.emulate(<%= emulation_settings %>)!
        })!
        _if_else(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %> && <% if(additional_emulation !== '""'){ %>_is_true(<%= additional_emulation %>)<% }else{ %>_Idle.additionalEmulationEnabled()<% } %>, function(){
          _Idle.moveAndClickOn(<%= BrowserAutomationStudio_GetEmulationTarget() %>,{holdCtrl: <%= holdctrl %>, clickType: <%= click_type %>, wait: <%= wait %>, moveSettings: <%= move_settings %><% if(additional_emulation !== '""'){ %>, additionalEmulation: (<%= additional_emulation %>)<% } %>})!
        }, function(){
          <% if(_SelectorModel.get("is_image")){ %>
            <%= path %>.random_point()!
          <% }else{ %>
            _call(_random_point, {})!
          <% } %>
          _if(_result().length > 0, function(){
            move(<%= move_settings %>)!
            <%= path %>.clarify(X,Y)!
            _call(_clarify,<%= move_settings %>)!           
            <%= BrowserAutomationStudio_MouseCustom("X","Y") %>
          })!
        })!
      <% }else{ %>
        <%= path %>.script("_BAS_SAFE($HTMLElement.click)(self)")!
      <% } %>
  </script>

  <script type="text/template" id="dragelement_code">
      /*Browser*/
      <%= waiter %>
      _if(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %>, function(){
        _Idle.emulate(<%= emulation_settings %>)!
      })!
      <% if(_SelectorModel.get("is_image")){ %>
          <%= path %>.random_point()!
        <% }else{ %>
          _call(_random_point, {})!
        <% } %>
      _if(_result().length > 0, function(){
        move(<%= move_settings %>)!
        <%= path %>.clarify(X,Y)!
        _call(_clarify,<%= move_settings %>)!           
        mouse_down(X,Y)!
      })!
  </script>

  <script type="text/template" id="dropelement_code">
      /*Browser*/
      <%= waiter %>
      <% if(_SelectorModel.get("is_image")){ %>
          <%= path %>.random_point()!
        <% }else{ %>
          _call(_random_point, {})!
        <% } %>
      _if(_result().length > 0, function(){
        move(<%= move_settings %>)!
        <%= path %>.clarify(X,Y)!
        _call(_clarify,<%= move_settings %>)!           
        mouse_up(X,Y)!
      })!
  </script>

  <script type="text/template" id="text_code">
      /*Browser*/
      <%= waiter %>
      <%= path %>.text()!
      <%= variable %> = _result()
  </script>

  <script type="text/template" id="length_code">
      /*Browser*/
      <% if(query){ %>
        ;_SELECTOR=<%=query%>;
      <% } %>
      <%= path %>.length()!
      <%= variable %> = _result()
  </script>

  <script type="text/template" id="script_code">
      <%= waiter %>
      <%= path %>.script(<%= script %>)!
      <%= variable %> = _result()
  </script>

  <script type="text/template" id="browserscript_code">
    <%= waiter %>
    <%= path %>.script2(<%= '"' + je(source) + '"' %>,JSON.stringify(_read_variables(<%= variables %>)))!
    var _parse_result = JSON.parse(_result())
    _write_variables(JSON.parse(_parse_result.variables))
    if(!_parse_result.is_success)
      fail(_parse_result.error)
  </script>

  <script type="text/template" id="javascript_code">
      page().script(<%= value %>)!
      <%= variable %> = _result()
  </script>

  <script type="text/template" id="browserjavascript_code">
      <%= timeout_general()  %>
      page().script2(<%= '"' + je(source) + '"' %>,JSON.stringify(_read_variables(<%= variables %>)))!
      var _parse_result = JSON.parse(_result())
      _write_variables(JSON.parse(_parse_result.variables))
      if(!_parse_result.is_success)
        fail(_parse_result.error)
  </script>

  <script type="text/template" id="onloadjavascript_code">
      /*Browser*/
      onloadjavascript(<%= value %>)!
  </script>

  
  <script type="text/template" id="set_code">
      <%= waiter %>
      _if(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %>, function(){
        _Idle.emulate(<%= emulation_settings %>)!
      })!
      get_element_selector(_SELECTOR, false).script2("[[RESULT]] = _BAS_HIDE(BrowserAutomationStudio_GetSelectIndex)(self, " + JSON.stringify(<%= set %>) + ")",JSON.stringify({}))!
      _SELECT_INDEX = JSON.parse(JSON.parse(_result()).variables)["RESULT"]
      _call(_random_point, {})!
      _if(_result().length > 0 && _SELECT_INDEX >= 0, function(){
        move({})!
        <%= path %>.clarify(X,Y)!
        _call(_clarify,{})!
        mouse(X,Y)!
        <%= timeout_general() %>
        sleep(rand(2000,3000))!
        _set_combobox_index(_SELECT_INDEX)!
        sleep(rand(1000,1200))!
      })!
  </script>

  <script type="text/template" id="waitelement_code">
      /*Browser*/
      <%= waiter %>
  </script>

  <script type="text/template" id="waitfullload_code">
      /*Browser*/
      <%= timeout_waiter() %>
      wait_async_load()!
  </script>

  <script type="text/template" id="set_integer_code">
    <%= waiter %>
    _if(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %>, function(){
      _Idle.emulate(<%= emulation_settings %>)!
    })!
    _call(_random_point, {})!
    move({})!
    <%= path %>.clarify(X,Y)!
    _call(_clarify,{})!
    mouse(X,Y)!
    <%= timeout_general() %>
    sleep(rand(2000,3000))!
    _set_combobox_index(<%= set %>)!
    sleep(rand(1000,1200))!
  </script>

  <script type="text/template" id="set_random_code">
    <%= waiter %>
    _if(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %>, function(){
      _Idle.emulate(<%= emulation_settings %>)!
    })!
    get_element_selector(_SELECTOR, false).script2("[[RESULT]] = _BAS_HIDE(BrowserAutomationStudio_GetSelectIndex)(self)",JSON.stringify({}))!
    _SELECT_INDEX = JSON.parse(JSON.parse(_result()).variables)["RESULT"]
    _call(_random_point, {})!
    _if(_result().length > 0 && _SELECT_INDEX >= 0, function(){
      move({})!
      <%= path %>.clarify(X,Y)!
      _call(_clarify,{})!
      mouse(X,Y)!
      <%= timeout_general() %>
      sleep(rand(2000,3000))!
      _set_combobox_index(_SELECT_INDEX)!
      sleep(rand(1000,1200))!
    })!
  </script>

  <script type="text/template" id="attr_code">
      /*Browser*/
      <%= waiter %>
      <%= path %>.attr(<%= attr %>)!
      <%= variable %> = _result()
  </script>

  <script type="text/template" id="set_attr_code">
      /*Browser*/
      <%= waiter %>
      <%= path %>.set_attr(<%= name %>, <%= value %>)!
  </script>

  <script type="text/template" id="clickextensionbutton_code">
    _click_extension_button(<%= extension_id %>)!
  </script>

  <script type="text/template" id="url_code">
      /*Browser*/
      url()!
      <%= variable %> = _result()
  </script>

  <script type="text/template" id="screen_code">
    _get_browser_screen_settings()!
    ;(function(){
      var result = JSON.parse(_result())
      <%= scroll_x %> = result["ScrollX"]
      <%= scroll_y %> = result["ScrollY"]
      <%= cursor_x %> = result["CursorX"]
      <%= cursor_y %> = result["CursorY"]
      <%= cursor_absolute_x %> = result["CursorX"] + result["ScrollX"]
      <%= cursor_absolute_y %> = result["CursorY"] + result["ScrollY"]
      <%= width %> = result["Width"]
      <%= height %> = result["Height"]
    })();
  </script>

  <script type="text/template" id="touch_code">
    _browser_mode((<%= enable %>) == "true" ? "mobile" : "desktop")!
  </script>

  <script type="text/template" id="setvariable_code">
      <%= variable_name %> = <%= variable_value %>
  </script>

  <script type="text/template" id="incvariable_code">
      <%= variable_name %> = parseInt(<%= variable_name %>) + parseInt(<%= variable_value %>)
  </script>

  <script type="text/template" id="incglobalvariable_code">
      PSet("basglobal", <%= variable_name %>, parseInt(JSON.parse(P("basglobal", <%= variable_name %>) || "0")) + parseInt(<%= variable_value %>))
  </script>

  <script type="text/template" id="resource_code">
      RS("<%= je(resource) %>", <%= notreuse %>, <%= onlyfail %>)!
      <%= variable %> = _result().get()
  </script>

  <script type="text/template" id="click_code">
      /*Browser*/
      mouse(<%= x %>,<%= y %>)!
  </script>

  <script type="text/template" id="navigateback_code">
      navigate_back(true)!

  </script>

  <script type="text/template" id="move_code">
      /*Browser*/
      _if(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %>, function(){
        _Idle.emulate(<%= emulation_settings %>)!
      })!
      move(<%= x %>,<%= y %>, <%= move_settings %>)!
  </script>

  <script type="text/template" id="addtab_code">
    <% if(notinstant){ %>
      <%= timeout_general()  %>
    <% } %>
    _popupcreate2(<%= is_silent %> == "true", <%= url %>, <%= referrer %>, <%= (notinstant) ? "false" : "true" %>)!
  </script>

  <script type="text/template" id="closetab_code">
      /*Browser*/
      popupclose(<%= index %>)!
  </script>

  <script type="text/template" id="selecttab_code">
      /*Browser*/
      popupselect(<%= index %>)!
  </script>

  <script type="text/template" id="tabinfo_code">
    /*Browser*/
    _popupinfo()!
    var json = JSON.parse(_result())
    <%= index %> = json["index"]
    <%= urls %> = json["urls"]
    <%= total %> = json["urls"].length
  </script>

  <script type="text/template" id="moveandclick_code">
      /*Browser*/
      _if(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %>, function(){
        _Idle.emulate(<%= emulation_settings %>)!
      })!
      _if_else(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %> && <% if(additional_emulation !== '""'){ %>_is_true(<%= additional_emulation %>)<% }else{ %>_Idle.additionalEmulationEnabled()<% } %>, function(){
        _Idle.moveAndClickOn(<%= BrowserAutomationStudio_GetEmulationTarget(x,y) %>,{holdCtrl: <%= holdctrl %>, clickType: <%= click_type %>, wait: <%= wait %>, moveSettings: <%= move_settings %><% if(additional_emulation !== '""'){ %>, additionalEmulation: (<%= additional_emulation %>)<% } %>})!
      }, function(){
        move(<%= x %>,<%= y %>, <%= move_settings %>)!
        <%= BrowserAutomationStudio_MouseCustom(x,y) %>
      })!
  </script>

  <script type="text/template" id="drag_code">
      /*Browser*/
      _if(typeof _Idle != "undefined"<% if(emulation_time !== '""'){ %> && !_is_false(<%= emulation_time %>)<% } %>, function(){
        _Idle.emulate(<%= emulation_settings %>)!
      })!
      move(<%= x %>,<%= y %>, <%= move_settings %>)!
      mouse_down(<%= x %>,<%= y %>)!
  </script>

  <script type="text/template" id="drop_code">
      /*Browser*/
      var move_settings = <%= move_settings %>;
      move_settings["do_mouse_up"] = "true"
      move(<%= x %>,<%= y %>, move_settings)!
  </script>

  <script type="text/template" id="load_code">
      <% if(notinstant){ %>
        <%= timeout_general()  %>
      <% } %>
      _load(<%= url %>, <%= referrer %>, <%= (notinstant) ? "false" : "true" %>)!
  </script>

  <script type="text/template" id="mousesettings_code">
      /*Browser*/
      _default_move_params({speed: <%= speed %>,gravity: <%= gravity %>,deviation: <%= deviation %>})
  </script>

  <script type="text/template" id="notification_code">
      /*Browser*/
      _enable_notifications(<%= enable %> == "true")!
  </script>

  <script type="text/template" id="browsersettings_code">
      _require_extensions(<%= Extensions %>)!

      _BrowserAutomationStudio_Settings = BrowserAutomationStudio_ParseBrowserSettings(
        {
          Widevine: (<%= Widevine %>),
          SafeBrowsing: (<%= SafeBrowsing %>),
          Components: (<%= Components %>),
          Extensions: (_result()),
          CommandLine: (<%= CommandLine %>),
          Webrtc: (<%= Webrtc %>),
          WebrtcIps: (<%= WebrtcIps %>),
          Canvas: (<%= Canvas %>),
          CanvasNoise: (<%= CanvasNoise %>),
          Audio: (<%= Audio %>),
          AudioNoise: (<%= AudioNoise %>),
          QUIC: (<%= QUIC %>),
          MaxFPS: (<%= MaxFPS %>),
          Webgl: (<%= Webgl %>),
          WebglNoise: (<%= WebglNoise %>),
          BrowserVersion: (<%= BrowserVersion %>),
          WebglVendor: (<%= WebglVendor %>),
          WebglRenderer: (<%= WebglRenderer %>),
          Tunneling: (<%= Tunneling %>),
        }
      );
      
      _if_else((<%= profile %>).length > 0, function(){
        _call(BrowserAutomationStudio_ChangeProfile,[{
          profile: (<%= profile %>),
          load_proxy: (<%= load_proxy %>),
          load_fp: (<%= load_fp %>),
          settings: _BrowserAutomationStudio_Settings,
          key: (<%= Key %>),
        }])!
      }, function(){
        _settings(_BrowserAutomationStudio_Settings)!
      })!
      
  </script>

  <script type="text/template" id="getbrowserversionlist_code">
    <%= variable %> = _get_all_browser_version_info(<%= format %>)
  </script>

  <script type="text/template" id="getcurrentbrowserversion_code">
    {
      var info = _get_current_browser_version_info("extended")
      <%= variable %> = info.id
      <%= variable2 %> = info.browser_version
      <%= variable3 %> = info.architecture
    }
  </script>

  <script type="text/template" id="resize_code">
      /*Browser*/
      resize(<%= width %>, <%= height %>)!
  </script>

  <script type="text/template" id="sleep_fromto_code">
      sleep(rand(<%= from %>,<%= to %>))!
  </script>

  <script type="text/template" id="sleep_code">
      sleep(<%= t %>)!
  </script>


  <script type="text/template" id="result_code">
    result(<%= value %>, <%= number %>)
  </script>

  <script type="text/template" id="globalset_code">
    var val = JSON.stringify(<%= value %>);
    PSet("basglobal", <%= key %>, val)
  </script>

  <script type="text/template" id="globalget_code">
    var text = P("basglobal", <%= key %>)
    if(text.length == 0)
      text="\"\""
    <%= variable %> = JSON.parse(text)
  </script>


  <script type="text/template" id="cachemaskallow_code">
    /*Browser*/
    cache_allow(<%= urlFilters %>, (<%= limit %>))!
    <%= variable %> = _result();
  </script>

  <script type="text/template" id="cachemaskdeny_code">
    /*Browser*/
    cache_deny(<%= urlFilters %>, (<%= limit %>))!
    <%= variable %> = _result();
  </script>

  <script type="text/template" id="requestmaskallow_code">
    /*Browser*/
    request_allow(<%= urlFilters %>)!
    <%= variable %> = _result();
  </script>

  <script type="text/template" id="requestmaskdeny_code">
    request_deny(<%= urlFilters %>)!
    <%= variable %> = _result();
  </script>

  <script type="text/template" id="cleardata_code">
    /*Browser*/
    cache_data_clear()!
  </script>

  <script type="text/template" id="clearmasks_code">
    /*Browser*/
    cache_masks_clear()!
  </script>

  <script type="text/template" id="getstatus_code">
    /*Browser*/
    cache_get_status(<%= urlFilters %>)!
    <%= variable %> = _result()
  </script>

  <script type="text/template" id="isloaded_code">
    /*Browser*/
    is_load(<%= urlFilters %>)!
    <%= variable %> = _result()
  </script>

  <script type="text/template" id="getfromcache_code">
    /*Browser*/
    <% if(waitItem){ %>
      <%= timeout_waiter() %>
      wait_load(<%= urlFilters %>)!
    <% } %>
    <% if(base64){ %>
      cache_get_base64(<%= urlFilters %>)!
      <%= variable %> = _result()
    <% }else{ %>
      cache_get_string(<%= urlFilters %>)!
      <%= variable %> = _result()
    <% } %>
  </script>

  <script type="text/template" id="getallcache_code">
    /*Browser*/
    _cache_get_all(<%= urlFilters %>)!
    <%= variable %> = JSON.parse(_result())
  </script>

  <script type="text/template" id="redirectrequests_code">
    /*Browser*/
    _redirect_requests(<%= urlFilters %>, {mode: "<%= replaceMode %>"<%if(replaceMode != "all"){%>, search: (<%= searchValue %>)<%if(replaceMode == "between"){%>, search2: (<%= searchValue2 %>)<%}%><%if(["exact", "regexp"].includes(replaceMode)){%>, flags: {global: (<%= replaceMode == "regexp" ? globalSearch : replaceAllExact %>)<%if(replaceMode == "regexp"){%>, ignore_case: (<%= ignoreСase %>)<%}%>}<%}%><%}%>, new_value: (<%= newValue %>)}, (<%= limit %>))!
    <%= variable %> = _result();
  </script>

  <script type="text/template" id="replacerequestcontent_code">
    /*Browser*/
    _replace_request_content(<%= urlFilters %>, <%= contentFilters %>, {mode: "<%= replaceMode %>"<%if(replaceMode != "all"){%>, search: (<%= searchValue %>)<%if(replaceMode == "between"){%>, search2: (<%= searchValue2 %>)<%}%><%if(["exact", "regexp"].includes(replaceMode)){%>, flags: {global: (<%= replaceMode == "regexp" ? globalSearch : replaceAllExact %>)<%if(replaceMode == "regexp"){%>, ignore_case: (<%= ignoreСase %>), multiline: (<%= multiline %>)<%}%>}<%}%><%}%>, new_value: (<%= newValue %>)}, (<%= limit %>))!
    <%= variable %> = _result();
  </script>

  <script type="text/template" id="replaceresponsecontent_code">
    /*Browser*/
    _replace_response_content(<%= urlFilters %>, <%= contentFilters %>, {mode: "<%= replaceMode %>"<%if(replaceMode != "all"){%>, search: (<%= searchValue %>)<%if(replaceMode == "between"){%>, search2: (<%= searchValue2 %>)<%}%><%if(["exact", "regexp"].includes(replaceMode)){%>, flags: {global: (<%= replaceMode == "regexp" ? globalSearch : replaceAllExact %>)<%if(replaceMode == "regexp"){%>, ignore_case: (<%= ignoreСase %>), multiline: (<%= multiline %>)<%}%>}<%}%><%}%>, new_value: (<%= newValue %>)}, (<%= limit %>))!
    <%= variable %> = _result();
  </script>

  <script type="text/template" id="disablerules_code">
    /*Browser*/
    <% if(ids == '"ALL"'){ %>
      _disable_all_rules()!
    <% }else{ %>
      _disable_rules(<%= ids %>)!
    <% } %>
  </script>

  <script type="text/template" id="getrulestats_code">
    /*Browser*/
    _get_rule_stats(<%= id %>)!
    var replaceStats = JSON.parse(_result());
    <%= variableExecutionCount %> = replaceStats["execution_count"];
    <%= variableIsActive %> = replaceStats["is_active"];
    <%= variableAllIds %> = replaceStats["all_ids"];
    <%= variableActiveIds %> = replaceStats["active_ids"];
  </script>

  <script type="text/template" id="renderscreen_code">
      /*Browser*/
      render(<%= x %>,<%= y %>,<%= width %>,<%= height %>)!
      <%= variable %> = _result()
  </script>

  <script type="text/template" id="scroll_code">
      /*Browser*/
      <%= timeout_general() %>
      <% if(native_emulation){ %>
        _scroll_to(<%= y %>)!
      <% }else{ %>
        scroll(<%= x %>,<%= y %>)!
      <% } %>
  </script>

  <script type="text/template" id="waitload_code">
      /*Browser*/
      <%= timeout_waiter() %>
      wait_load(<%= urlFilters %>)!
  </script>

  <script type="text/template" id="waiturl_code">
      /*Browser*/
      <%= timeout_waiter() %>
      wait_url(<%= waiter %>)!
  </script>

  <script type="text/template" id="openfile_code">
      /*Browser*/
      open_file_dialog(<%= value %>)!
  </script>

  <script type="text/template" id="dragfile_code">
      /*Browser*/
      drag_file(<%= value %>)!
  </script>

  <script type="text/template" id="promptresult_code">
      /*Browser*/
      prompt_result(<%= value %>)!
  </script>

  <script type="text/template" id="httpauth_code">
      /*Browser*/
      http_auth_result(<%= login %>,<%= password %>)!
  </script>

  <script type="text/template" id="waitcontent_code">
      /*Browser*/
      <%= timeout_waiter() %>
      wait_content(<%= waiter %>)!
  </script>

  <script type="text/template" id="waitfiledownload_code">
      /*Browser*/
      <%= timeout_waiter() %>
      _wait_download()!
      _get_downloaded_filename()!
      <%= variable %> = JSON.parse(native("filesystem", "fileinfo", _result()))["directory"] + "/" + _result()
  </script>
  

  <script type="text/template" id="waitcss_code">
      /*Browser*/
      <%= timeout_waiter() %>
      wait_css(<%= waiter %>)!
  </script>

  <script type="text/template" id="type_code">
      /*Browser*/
      <%= timeout_general() %>
      _type(<%= text %>,<%= interval %>)!
  </script>

  <script type="text/template" id="html_code">
      /*Browser*/
      page().script("_BAS_HIDE(BrowserAutomationStudio_GetPageContent)()")!
      <%= variable %> = _result()
  </script>

  <script type="text/template" id="if_code">
      _if(<%= expression %>,function(){
        section_insert()
      })!
      <% if(do_delete.length > 0){ %>
        delete <%= do_delete %>;
      <% } %>
  </script>

  <script type="text/template" id="proxy_code">
      var hash = proxy_parse(<%= ProxyText %>)
      if(<%= ProxyType %> != "auto" ){
        hash["IsHttp"] = <%= ProxyType %> == "http"
      }
      var login = <%= ProxyLogin %>
      var password = <%= ProxyPassword %>
      if(login.length > 0 && password.length > 0 )
      {
        hash["name"] = login
        hash["password"] = password
      }
      if(_get_profile().length > 0)
      {
        if(hash["server"].length == 0)
        {
          native("filesystem", "removefile", _get_profile() + "/proxy.txt")
        }else
        {
          var PortNumber = hash["Port"]
          hash["Port"] = hash["Port"].toString()
          hash["DetectExternalIp"] = <%= DetectExternalIp %> == "true";
          hash["ChangeGeolocation"] = <%= ChangeGeolocation %> == "true";
          hash["ChangeWebrtcIp"] = <%= ChangeWebrtcIp %>;

          if(hash["ChangeWebrtcIp"] == "true"){hash["ChangeWebrtcIp"] = "replace"};
          if(hash["ChangeWebrtcIp"] == "false"){hash["ChangeWebrtcIp"] = "ignore"}

          hash["ChangeTimezone"] = <%= ChangeTimezone %> == "true";
          hash["ChangeBrowserLanguage"] = <%= ChangeBrowserLanguage %> == "true";
          hash["ip_info_method"] = <%= ip_info_method %>;
          if(hash["ip_info_method"] == "custom function")
          {
            hash["ip_info_method"] = "database"
          }
          hash["ip_api_key"] = <%= ip_api_key %>;
          hash["ServiceURL"] = <%= ServiceURL %>;
          hash["IpExtractionParam"] = <%= IpExtractionParam %>;
          hash["IpExtractionMethod"] = <%= IpExtractionMethod %>;

          hash["PublicIPv4"] = <%= PublicIPv4 %>;
          hash["PublicIPv6"] = <%= PublicIPv6 %>;
          hash["PrivateIPv4"] = <%= PrivateIPv4 %>;
          hash["PrivateIPv6"] = <%= PrivateIPv6 %>;
          hash["DetectExternalIpV6"] = <%= DetectExternalIpV6 %> == "true";
          hash["ServiceURLV6"] = <%= ServiceURLV6 %>;
          hash["IpExtractionMethodV6"] = <%= IpExtractionMethodV6 %>;
          hash["IpExtractionParamV6"] = <%= IpExtractionParamV6 %>;

          hash["DNSMode"] = <%= DNSMode %>;
          hash["CustomDNSIP"] = <%= CustomDNSIP %>;
          
          native("filesystem", "writefile", JSON.stringify({path: _get_profile() + "/proxy.txt",value: JSON.stringify(hash),base64:false,append:false}))
          hash["Port"] = PortNumber
        }
      }
      set_proxy_prepare(<%= DNSMode %>, <%= CustomDNSIP %>)!
      set_proxy(hash["server"], hash["Port"], hash["IsHttp"], hash["name"], hash["password"])!
      sleep(1000)!
      set_proxy_extended(<%= DetectExternalIp %> == "true", <%= ChangeGeolocation %> == "true", <%= ChangeWebrtcIp %>, <%= ChangeTimezone %> == "true", <%= ChangeBrowserLanguage %> == "true", <%= ip_info_method %>, <%= ip_api_key %>, <%= function_name %>, <%= ServiceURL %>, <%= IpExtractionMethod %>, <%= IpExtractionParam %>, <%= PublicIPv4 %>, <%= PublicIPv6 %>, <%= PrivateIPv4 %>, <%= PrivateIPv6 %>, <%= DetectExternalIpV6 %> == "true", <%= ServiceURLV6 %>, <%= IpExtractionMethodV6 %>, <%= IpExtractionParamV6 %>, <%= DNSMode %>, <%= CustomDNSIP %>)!
      sleep(1000)!
  </script>

  <script type="text/template" id="for_code">
      _do(function(){
        _set_action_info({ name: "For" });
        VAR_CYCLE_INDEX = _iterator() - 1 + parseInt(<%= expression_from %>)
        if(VAR_CYCLE_INDEX > parseInt(<%= expression_to %>))_break();
        section_insert()
      })!
  </script>

  <script type="text/template" id="ignoreerrors_code">
    _call(function()
    {
      _set_action_info({ name: "Ignore Errors" });
      _on_fail(function(){
         VAR_LAST_ERROR = _result()
         VAR_ERROR_ID = ScriptWorker.GetCurrentAction()
         VAR_WAS_ERROR = false
         _break(1,true)
       })
       CYCLES.Current().RemoveLabel("function")
       section_insert()
    },null)!

  </script>

  <script type="text/template" id="foreach_code">
      _do_with_params({"foreach_data":(<%= for_array %>)},function(){
        _set_action_info({ name: "Foreach" });
        VAR_CYCLE_INDEX = _iterator() - 1
        if(VAR_CYCLE_INDEX > _cycle_param("foreach_data").length - 1)_break();
        VAR_FOREACH_DATA = _cycle_param("foreach_data")[VAR_CYCLE_INDEX]
        section_insert()
      })!
  </script>

  <script type="text/template" id="loopelement_code">
      /*Browser*/
      ;_SELECTOR=<%=query%>;
      <%= path %>.length()!
      
      _do_with_params({"element_length":_result(),"querycss":(<%= querycss %>),"querymatch":<%= querymatch %> <%if(queryxpath){%>, "queryxpath": (<%= queryxpath %>) <% } %> },function(){
        _set_action_info({ name: "Start Loop" });
        VAR_CYCLE_INDEX = _iterator() - 1
        VAR_FOR_EACH_CSS = _cycle_param("querycss")
        VAR_FOR_EACH_MATCH = _cycle_param("querymatch")
        <% if(queryxpath){ %>
          VAR_FOR_EACH_XPATH = _cycle_param("queryxpath")
        <% } %>

        if(VAR_CYCLE_INDEX >= parseInt(_cycle_param("element_length")))_break();
        section_insert()
      })!
      VAR_CYCLE_INDEX = 0;
  </script>

  <script type="text/template" id="while_code">
      _do(function(){
        _set_action_info({ name: "While" });
        VAR_CYCLE_INDEX = _iterator() - 1
        <%= additional %>
        BREAK_CONDITION = <%= expression %>;
        if(!BREAK_CONDITION)_break();
        section_insert()
      })!
  </script>

  
  <script type="text/template" id="getcookiesforurl_code">
      /*Browser*/
      get_cookies(<%= value %>)!
      <%= variable %> = _result()
  </script>

  <script type="text/template" id="break_code">
      _break("function")
  </script>

  <script type="text/template" id="continue_code">
      _next("function")
  </script>

  <script type="text/template" id="success_code">
      success(<%= message %>)
  </script>

  <script type="text/template" id="fail_code">
      fail_user(<%= message %>,<%= dontrestart %>)
  </script>

  <script type="text/template" id="die_code">
      die(<%= message %>,<%= instant %>)
  </script>

  <script type="text/template" id="label_code">
      _set_goto_label(<%= label %>)!
  </script>

  <script type="text/template" id="goto_code">
      _goto(<%= label %>)!
  </script>

  <script type="text/template" id="custom_code">
      <%= code %>
  </script>

  <!-- ========= -->
  <!-- Libraries -->
  <!-- ========= -->
  <script type="text/javascript"> window.Toolbox = {}; </script>
  <script src="jquery-2.1.3.min.js" type="text/javascript"></script>
  <script src="slimselect.min.js" type="text/javascript"></script>
  <script src="jquery.mousewheel.js" type="text/javascript"></script>
  <script src="lodash.js" type="text/javascript"></script>
  <script src="backbone.js" type="text/javascript"></script>
  <script src="bootstrap.min.js"></script>
  <script src="bootbox.min.js"></script>
  <script src="../actions/actions.js"></script>
  <script src="translate.js"></script>
  <script src="expressioneditor.js"></script>
  <script src="rappid.js"></script>
  <script src="tooledViewPlugin.js"></script>
  <script src="preservemainpage.js"></script>
  <script src="./search/internal/library.min.js"></script>
  <script src="./search/internal/mark.min.js"></script>
  <script src="databasefilter.js"></script>
  <script src="filters.js"></script>
  <script src="sortable.js"></script>
  <script src="./utils/cursorposition.js"></script>
  <script src="./utils/extractVariables.js"></script>
  <script src="utils/createCodeEditor.js"></script>
  <script src="utils/overlay.js"></script>
  <script src="toastr.min.js"></script>
  <script src="embeddedmodel.js"></script>
  <script src="diff_match_patch.js"></script>
  <script src="vs/loader.js"></script>
  <script src="unfold-tooltip.js"></script>
  <script src="multiselectmanager.js"></script>
  <script src="components/tooltips.js"></script>
  <script src="conditionalvisibility.js"></script>
  <script src="selectmanager.js"></script>


  <!-- Actions Search (scripts) -->
  <script src="./search/internal/worker/index.js"></script>
  <script src="./search/internal/items/video.js"></script>
  <script src="./search/internal/items/wiki.js"></script>
  <script src="./search/internal/documents.js"></script>
  <script src="./search/internal/engine.js"></script>
  <script src="./search/internal/helper.js"></script>
  <script src="./search/search.js"></script>

  <!-- Modal Dialogs (scripts) -->
  <script src="./dialogs/internal/index.js"></script>
  <script src="./dialogs/internal/translate.js"></script>
  <script src="./dialogs/internal/options.js"></script>
  <script src="./dialogs/internal/insert.js"></script>
  <script src="./dialogs/internal/menus.js"></script>
  <script src="./dialogs/internal/utils.js"></script>
  <script src="./dialogs/internal/store.js"></script>
  <script src="./dialogs/template/index.js"></script>
  <script src="./dialogs/dialogs.js"></script>
  <script src="./dialogs/functionsDialog.js"></script>
  <script src="./dialogs/resourcesDialog.js"></script>
  <script src="./dialogs/variablesDialog.js"></script>

  <script type="text/javascript"> _L = $.extend(_L, _AL)</script>
  <script type="text/javascript"> _L = $.extend(_L,{" will be normalized to":{"ru":" будет нормализован до"},"\" is not specified":{"ru":"\" не указан"},"\" parameter.":{"ru":"\"."},"\"PerfectCanvas request\" data is obtained one time for site, not for each fingerprint request.":{"ru":"\"Запрос PerfectCanvas\" должен быть получен один раз для сайта, а не для каждого отпечатка."},"&lt;AnyDigit&gt; - will be converted to any digit.":{"ru":"&lt;AnyDigit&gt; - будет заменено на любую цифру."},"&lt;AnyLetter&gt; - will be converted to any letter.":{"ru":"&lt;AnyLetter&gt; - будет заменено на любую букву."},"&lt;EFemName&gt; - english female names starting from capital letter.":{"ru":"&lt;EFemName&gt; - английские женские имена начинающиеся с заглавной буквы."},"&lt;EFemNameLow&gt; - english female names.":{"ru":"&lt;EFemNameLow&gt; - английские женские имена."},"&lt;ELow&gt; - same as {&lt;ELowVow&gt;|&lt;ELowCons&gt;}":{"ru":"&lt;ELow&gt; - тоже самое, что {&lt;ELowVow&gt;|&lt;ELowCons&gt;}"},"&lt;ELowCons&gt; - same as {b|c|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z}":{"ru":"&lt;ELowCons&gt; - тоже самое, что {b|c|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z}"},"&lt;ELowVow&gt; - same as {a|e|i|o|u}":{"ru":"&lt;ELowVow&gt; - тоже самое, что {a|e|i|o|u}"},"&lt;EMaleName&gt; - english male names starting from capital letter.":{"ru":"&lt;EMaleName&gt; - английские мужские имена начинающиеся с заглавной буквы."},"&lt;EMaleNameLow&gt; - english male names.":{"ru":"&lt;EMaleNameLow&gt; - английские мужские имена."},"&lt;ESurname&gt; - english surnames starting from capital letter.":{"ru":"&lt;ESurname&gt; - английские фамилии имена начинающиеся с заглавной буквы."},"&lt;ESurnameLow&gt; - english surnames.":{"ru":"&lt;ESurnameLow&gt; - английские фамилии."},"&lt;EUp&gt; - same as {&lt;EUpVow&gt;|&lt;EUpCons&gt;}":{"ru":"&lt;EUp&gt; - тоже самое, что {&lt;EUpVow&gt;|&lt;EUpCons&gt;}"},"&lt;EUpCons&gt; - same as {B|C|D|F|G|H|J|K|L|M|N|P|Q|R|S|T|V|W|X|Y|Z}":{"ru":"&lt;EUpCons&gt; - тоже самое, что {B|C|D|F|G|H|J|K|L|M|N|P|Q|R|S|T|V|W|X|Y|Z}"},"&lt;EUpVow&gt; - same as {a|e|i|o|u}":{"ru":"&lt;EUpVow&gt; - тоже самое, что {a|e|i|o|u}"},"' object. This action allows to spoof local time values returned by browser.":{"ru":"'. Это действие позволяет заменить возвращаемые значения."},"'Batch script or executable path' parameter may contain path to executable that you want to run, or batch script.":{"ru":"Параметр 'Batch скрипт или путь к исполняемому файлу' может содержать путь к исполняемому файлу, который вы хотите запустить, или batch скрипт."},"'Fingerprint' input parameter must contain fingerprint string. Fingerprint string contains all data necessary to change fingerprint. It can be obtained as result of 'Get fingerprint' action. Note that this value may be reused - if you store it into file or database, and load on next BAS start, it will still work.":{"ru":"Параметр 'Отпечаток' должен содержать данные, необходимые для изменения отпечатка. Их можно получить как результат действия 'Получить отпечаток'. Обратите внимание, что отпечаток может быть использован как сразу, так и в любое другое время, даже после перезапуска BAS. Для этого сохраните его в текстовый файл или базу данных и загрузите перед использованием."},"'Idle type and filling' parameter must contain list of types, the more often different types will appear in the list, the more often they will meet during idle. Check help for 'Idle type and filling' parameter for examples.":{"ru":"Параметр 'Тип ожидания и его наполнение' должен содержать список типов, чем чаще в списке появляются определенные типы, тем чаще они будут встречаться во время выполнения действия. Прочтите помощь к параметру 'Тип ожидания и его наполнение' чтобы увидеть примеры."},"'Wait For Resource' is very important setting, it determines behaviour in case, when resource data list is empty. If prameter is set, then action that acquires resource will wait until data will be added, otherwise action will fail instantly.":{"ru":"'Ждать появления' - очень важный параметр, он определяет поведение в случае, когда список данных ресурса пуст. Если эта настройка влючена, тогда действие, которое получает ресурс, будет ждать до тех пор, пока данные не появятся, если настройка не выбрана, то действие завершится мгновенно с ошибкой."},"'Your user name is: ' string than any number of non whitespace character":{"ru":"Строка 'Your user name is: ', за которой следует любая последовательность символов, которые не являются пробелом."},"(\\1 is replaced with first group)":{"ru":"(\\1 будет заменено значением первой группы)"},"(note that regular expression has one group)":{"ru":"(обратите внимание что регулярное выражение содержит одну группу)"},"(seconds from 1 january 1970, leave blank to use current date)":{"ru":"(cекунд с 1 января 1970 года, оставьте поле пустым, чтобы использовать текущую дату)"},"(this will match @ with mail domain)":{"ru":"(данное регулярное выражение будет соответствовать символу @ вместе с почтовым доменом)"},"). This action allows to spoof timezone and location values returned by browser.":{"ru":"). Это действие позволяет заменять значения часового пояса и местоположения, возвращаемые браузером."},"-LABEL-Decimal separator":{"en":"Decimal separator","ru":"Десятичный разделитель"},"-LABEL-Fragment":{"en":"Fragment","ru":"Фрагмент"},"-LABEL-Number":{"en":"Number","ru":"Число"},"-LABEL-REPLACE-From":{"en":"From","ru":"Из"},"-LABEL-REPLACE-To":{"en":"To","ru":"На"},"-LABEL-Tabs":{"en":"Tabs","ru":"Табуляция"},"-LABEL-Type":{"en":"Type","ru":"Тип"},". This action allows to spoof position returned by browser.":{"ru":". Это действие позволяет заменяить месторасположение возвращаемое браузером."},"1 - scroll page with mouse wheel.":{"ru":"1 - прокрутка страницы колесом мыши."},"2 - random mouse movements for a long distance.":{"ru":"2 - случайные движения мыши на большое расстояние."},"3 - random mouse movements for a short distance.":{"ru":"3 - случайные движения мыши на короткое расстояние."},"30 sec":{"ru":"30 сек"},"300 sec":{"ru":"300 сек"},"4 - sleep.":{"ru":"4 - сон."},"5 minutes before current date":{"ru":"5 минут до текущей даты"},"<\/br>Ad -> http:\/\/www.ad.by\/info, feedback -> www.feedback.io, support -> https:\/\/support.co\/new\/ticket.php":{"ru":"<\/br>Реклама -> http:\/\/www.ad.by\/info, обратная связь -> www.feedback.io, поддержка -> https:\/\/support.co\/new\/ticket.php"},"<\/br>Business enquiries\/press: Alexandra +7 900 000-00-00":{"ru":"<\/br>Деловые вопросы\/пресса: Александра +7 900 000-00-00"},"<\/br>PR: Maria +7(900)000-00-01 | Agent 1: Valeria +7(900)000-00-02 | Agent 2: Ekaterina +7(900)00-00-03":{"ru":"<\/br>PR: Мария +7(900)000-00-01 | Агент 1: Валерия +7(900)000-00-02 | Агент 2: Екатерина +7(900)00-00-03"},"<\/br>Proposals for advertising, you can send to email: ad@site.com<\/br>Suggestions for improving the site, you can send to email: feedback@site.com<\/br>To get help in solving problems with the site, you can write to the email: support@site.com":{"ru":"<\/br>Предложения по рекламе, вы можете отправлять на почту: ad@site.com<\/br>Предложения по улучшению сайта вы можете отправлять на почту: feedback@site.com<\/br>Чтобы получить помощь в решении проблем с сайтом, вы можете написать на почту: support@site.com"},"<\/br>Test text - test@gmail.com. Just example text - example@gmail.com.":{"ru":"<\/br>Тестовый текст - test@gmail.com. Просто пример текста - example@gmail.com."},"<\/br>Test text http:\/\/test.com, string test example.org":{"ru":"<\/br>Тестовый текст http:\/\/test.com, строка тест example.org"},"<b>App Data<\/b> - The default location for app data. Example: <code>\"C:\/Users\/Admin\/AppData\/Roaming\"<\/code>.":{"ru":"<b>App Data<\/b> - Используемое по умолчанию размещение данных приложений. Пример: <code>\"C:\/Users\/Admin\/AppData\/Roaming\"<\/code>."},"<b>Computer Name<\/b> - Computer name. Example: <code>\"ADMIN\"<\/code>.":{"ru":"<b>Computer Name<\/b> - Имя компьютера. Пример: <code>\"ADMIN\"<\/code>."},"<b>Desktop<\/b> - Path to the \"Desktop\" directory. Example: <code>\"C:\/Users\/Admin\/Desktop\"<\/code>.":{"ru":"<b>Desktop<\/b> - Путь к директории \"Рабочий стол\". Пример: <code>\"C:\/Users\/Admin\/Desktop\"<\/code>."},"<b>Documents<\/b> - Path to the \"Documents\" directory. Example: <code>\"C:\/Users\/Admin\/Documents\"<\/code>.":{"ru":"<b>Documents<\/b> - Путь к директории \"Документы\". Пример: <code>\"C:\/Users\/Admin\/Documents\"<\/code>."},"<b>Downloads<\/b> - Path to the \"Downloads\" directory. Example: <code>\"C:\/Users\/Admin\/Downloads\"<\/code>.":{"ru":"<b>Downloads<\/b> - Путь к директории \"Загрузки\". Пример: <code>\"C:\/Users\/Admin\/Downloads\"<\/code>."},"<b>Favorites<\/b> - Path to the \"Favorites\" directory. Example: <code>\"C:\/Users\/Admin\/Favorites\"<\/code>.":{"ru":"<b>Favorites<\/b> - Путь к директории \"Избранное\". Пример: <code>\"C:\/Users\/Admin\/Favorites\"<\/code>."},"<b>Local App Data<\/b> - The default local location for application data. Example: <code>\"C:\/Users\/Admin\/AppData\/Local\"<\/code>.":{"ru":"<b>Local App Data<\/b> - Используемое по умолчанию локальное размещение данных приложений. Пример: <code>\"C:\/Users\/Admin\/AppData\/Local\"<\/code>."},"<b>Music<\/b> - Path to the \"Music\" directory. Example: <code>\"C:\/Users\/Admin\/Music\"<\/code>.":{"ru":"<b>Music<\/b> - Путь к директории \"Музыка\". Пример: <code>\"C:\/Users\/Admin\/Music\"<\/code>."},"<b>Pictures<\/b> - Path to the \"Pictures\" directory. Example: <code>\"C:\/Users\/Admin\/Pictures\"<\/code>.":{"ru":"<b>Pictures<\/b> - Путь к директории \"Изображения\". Пример: <code>\"C:\/Users\/Admin\/Pictures\"<\/code>."},"<b>Program Files (x86)<\/b> - The path to the \"Program Files (x86)\" directory on 64-bit systems for x86 architecture applications. Example: <code>\"C:\/Program Files (x86)\"<\/code>.":{"ru":"<b>Program Files (x86)<\/b> - Путь к директории \"Program Files (x86)\" в 64-разрядных системах для приложений архитектуры x86. Пример: <code>\"C:\/Program Files (x86)\"<\/code>."},"<b>Program Files<\/b> - Path to the \"Program Files\" directory. Example: <code>\"C:\/Program Files\"<\/code>.":{"ru":"<b>Program Files<\/b> - Путь к директории \"Program Files\". Пример: <code>\"C:\/Program Files\"<\/code>."},"<b>System Drive<\/b> - The drive where the Windows root directory is located. Example: <code>\"C:\"<\/code>.":{"ru":"<b>System Drive<\/b> - Диск, на котором расположен корневая директория Windows. Пример: <code>\"C:\"<\/code>."},"<b>System Root<\/b> - The path to the Windows root directory. Example: <code>\"C:\/Windows\"<\/code>.":{"ru":"<b>System Root<\/b> - Путь к корневой директории Windows. Пример: <code>\"C:\/Windows\"<\/code>."},"<b>Temp<\/b> - Path to the temporary directory. Example: <code>\"C:\/Users\/Admin\/AppData\/Local\/Temp\"<\/code>.":{"ru":"<b>Temp<\/b> - Путь к временной директории. Пример: <code>\"C:\/Users\/Admin\/AppData\/Local\/Temp\"<\/code>."},"<b>User Name<\/b> - The name of the current user. Example: <code>\"Admin\"<\/code>.":{"ru":"<b>User Name<\/b> - Имя текущего пользователя. Пример: <code>\"Admin\"<\/code>."},"<b>User Profile<\/b> - The path to the profile of the current user. Example: <code>\"C:\/Users\/Admin\"<\/code>.":{"ru":"<b>User Profile<\/b> - Путь к профилю текущего пользователя. Пример: <code>\"C:\/Users\/Admin\"<\/code>."},"<b>Videos<\/b> - Path to the \"Videos\" directory. Example: <code>\"C:\/Users\/Admin\/Videos\"<\/code>.":{"ru":"<b>Videos<\/b> - Путь к директории \"Видео\". Пример: <code>\"C:\/Users\/Admin\/Videos\"<\/code>."},"<b>Windows Directory<\/b> - The directory where Windows is installed. Example: <code>\"C:\/Windows\"<\/code>.":{"ru":"<b>Windows Directory<\/b> - Директория, в которую установлена Windows. Пример: <code>\"C:\/Windows\"<\/code>."},"<code>&lt;Attention!&gt;<\/code>":{"ru":"<code>&lt;Внимание!&gt;<\/code>"},"<code>-1<\/code> - cancel activation, if the number did not suit you or was received by accident.":{"ru":"<code>-1<\/code> - отменить активацию, если номер вам не подошел или был получен случайно."},"<code>1<\/code> - inform about the readiness of the number, if the SMS has already been sent, the \"Get activation code\" action sets this status automatically, therefore it is not necessary to set this status.":{"ru":"<code>1<\/code> - сообщить о готовности номера, если SMS уже отправлено, действие \"Получить код активации\" устанавливает этот статус автоматически поэтому устанавливать этот статус не обязательно."},"<code>3<\/code> - request another code, if you need to receive another SMS code to the same number. This status must be set before each reuse of the \"Get activation code\" action.":{"ru":"<code>3<\/code> - запросить еще один код, если нужно получить ещё один SMS код на тот же номер. Этот статус нужно устанавливать перед каждым повторным использованием действия \"Получить код активации\"."},"<code>6<\/code> - complete activation, if the correct SMS code has been received and you want to complete the work with the specified number.":{"ru":"<code>6<\/code> - завершить активацию, если получен верный SMS код и вы хотите завершить работу с указанным номером."},"<code>8<\/code> - inform that the number has been used and cancel activation if the specified number is busy or blocked on the desired site.":{"ru":"<code>8<\/code> - сообщить о том, что номер использован и отменить активацию, если указанный номер занят или заблокирован на нужном сайте."},"A browser request to access your geolocation will be accepted. Browser location will be set to ip location.":{"ru":"Запрос браузера на доступ к вашему месторасположению будет принят. Расположение браузера будет установлено в соответствии с ip."},"A good place to use this action is the script start. Placing this action at the start of the script will enable automatic idle emulation for the whole script.":{"ru":"Хорошим местом для использования этого действия является размещением его перед другими действиями. Размещение этого действия в начале скрипта позволит включить автоматическую эмуляцию бездействия для проекта целиком."},"A modern authorization method based on the OAuth 2.0 protocol, allowing the client to securely log in through a third-party provider without the need to enter a password":{"ru":"Современный метод авторизации, основанный на протоколе OAuth 2.0, позволяет клиенту безопасно входить в систему через стороннего провайдера, не требуя ввода пароля"},"A number as a value (<span class=\"help-popup-code\">int<\/span> type).":{"ru":"Число в качестве значения (тип <span class=\"help-popup-code\">int<\/span>)."},"A reference to record will be created. Unlike copy, if you use reference and change record, old one will change too.":{"ru":"Будет создана ссылка на запись в заданной группе. В отличие от копирования, если вы используете ссылку и новая запись изменится, то старая изменится тоже."},"A regular string as a key.":{"ru":"Обычная строка в качестве ключа."},"A string as a value (<span class=\"help-popup-code\">string<\/span> type).":{"ru":"Строка в качестве значения (тип <span class=\"help-popup-code\">string<\/span>)."},"A string which contains ip address. Ipv6 string should be enclosed with square brackets.":{"ru":"Эта строка должна содержать ip адрес. Ipv6 адреса должны быть заключены в квадратные скобки."},"A string which contains ip address. Ipv6 string should be enclosed with square brackets. Timezone and geolocation will be extracted from selected ip and browser settings will be updated accordingly.":{"ru":"Эта строка должна содержать ip адрес. Ipv6 адреса должны быть заключены в квадратные скобки. Часовой пояс и месторасположение будут получены из выбранного ip, и настройки браузера будут обновлены соответственно этим значениям."},"A text, which will be displayed to user together with input field. This text should explain what user needs to input.":{"ru":"Текст, который будет отображаться пользователю вместе с полем для ввода. Этот текст должен объяснять, какое именно значение нужно ввести."},"A traditional authorization method where a login and password are required to access the mail server":{"ru":"Традиционный метод авторизации, при котором для доступа к почтовому серверу требуется указать логин и пароль"},"API key":{"ru":"API ключ"},"API key of the SMS receiving service. The key for the service selected in the \"Service\" parameter. Depending on the service, you can get it in your personal account or in the service settings.":{"ru":"API ключ сервиса приема SMS. Ключ для сервиса выбранного в параметре \"Сервис\". В зависимости от сервиса, вы можете получить его в личном кабинете или настройках сервиса."},"Absolute path":{"ru":"Абсолютный путь"},"Absolute profile folder path.":{"ru":"Абсолютный путь к папке профиля."},"Accuracy":{"ru":"Точность"},"Accuracy of actions is a parameter that determines the degree of detail of the algorithm's actions on the page. With high accuracy, the algorithm works with fewer elements by pointing the cursor precisely from one element to another. At low accuracy, the algorithm works with more elements performing many aimless movements.":{"ru":"Точность действий - это параметр, который определяет степень детализации действий алгоритма на странице. При высокой точности алгоритм работает с меньшим количеством элементов наводя курсор точно от одного элемента к другому. При низкой точности алгоритм работает с большим количеством элементов выполняя множество бесцельных движений."},"Action contains all fields, that you added in database manager. You can fill it, all values will be delivered into database.":{"ru":"Действие содержит все поля, добавленные вами в диспетчере базы данных. Все заполненные вами здесь значения будут записаны в базу."},"Action will be applied only to exact group and which matches other filters.":{"ru":"Действие будет применяться только к записям находящимся в данной группе и соответсвующим другим фильтрам."},"Action will be applied to records which matches other filters.":{"ru":"Действие будет применено к записям, которые соответствуют другим фильтрам."},"Actions accuracy":{"ru":"Точность действий"},"Actions intensity":{"ru":"Интенсивность действий"},"Actions performed":{"ru":"Выполняемые действия"},"Activated":{"ru":"Активирован"},"Activation code: 75588":{"ru":"Код активации: 75588"},"Add 1 to all found id":{"ru":"Прибавить 1 ко всем найденным id"},"Add 5 to all found id":{"ru":"Прибавить 5 ко всем найденным id"},"Add a new item into resource. For example, add new line into file, or new record into database.":{"ru":"Добавить новый элемент в ресурс. Например, добавить новую строку в файл или новую запись в базу данных."},"Add all items from one list to another.":{"ru":"Добавить все элементы из одного списка в другой."},"Add an item to the end of the list.":{"ru":"Добавить элемент в конец списка."},"Add filter":{"ru":"Добавить фильтр"},"Add flags":{"ru":"Добавить флаги"},"Add flags to existing ones":{"ru":"Добавить флаги к существующим"},"Add line ending symbol":{"ru":"Добавить символ окончания строки"},"Add logs, may be useful for diagnostic.":{"ru":"Добавить логи, может быть полезно для диагностики."},"Add new group to database.":{"ru":"Добавить новую группу в базу данных."},"Add noise to WebGL data":{"ru":"Добавить шум в данные WegGL"},"Add noise to audio data":{"ru":"Добавить шум в данные Audio"},"Add noise to canvas data":{"ru":"Добавить шум в данные Canvas"},"Add record only to database":{"ru":"Добавить запись только в базу данных"},"Add record to resources":{"ru":"Добавить в ресурсы"},"Add record to resources and to database":{"ru":"Добавить запись в ресурсы и в базу данных"},"Add text to the image using specified parameters.":{"ru":"Добавить текст в изображение используя заданные параметры."},"Add the specified flags to existing ones":{"ru":"Добавить указанные флаги к существующим"},"Add the specified number of seconds to an existing date.":{"ru":"Добавить указанное количество секунд к существующей дате."},"Add the specified offset to all found ids. If this parameter is specified, then the specified offset will be added to all found ids. The offset can be any positive or negative integer.":{"ru":"Добавить указанное смещение ко всем найденным id. Если этот параметр указан, то ко всем найденным id будет добавлено указанное смещение. Смещение может быть любым положительным или отрицательным целым числом."},"Add thread":{"ru":"Добавить поток"},"Add thread number to the beginning of the message":{"ru":"Добавить в начало сообщения номер потока"},"Add time":{"ru":"Добавить время"},"Add time to the beginning of the message [hh:mm:ss]":{"ru":"Добавить в начало сообщения время [hh:mm:ss]"},"Add to file\/database instantly":{"ru":"Добавить в файл\/базу мгновенно"},"Adding noise could be dangerous  if site checks canvas uniqueness, while using native image can expose your real fingerprint, so it is better to use PerfectCanvas.":{"ru":"Добавление шума может быть обнаружено, если сайт проверяет уникальность данных canvas, в то время как использование оригинального изображения может раскрыть ваш настоящий отпечаток, поэтому лучше использовать именно PerfectCanvas."},"Additional":{"ru":"Дополнительно"},"Additional emulation":{"ru":"Дополнительная эмуляция"},"Additional emulation is small actions such as sleep, mouse movement, and in rare cases scrolling performed before, during, and\/or after the target action. This emulation may also include improvements to emulate the target action, such as text type stuttering, typing speed changes, and improved hover position selection.":{"ru":"Дополнительная эмуляция — это небольшие действия, такие как сон, движение мыши и в редких случаях прокрутка, выполняемые до, во время и\/или после целевого действия. Эта эмуляция также может включать улучшения для эмуляции целевого действия, такие как заикание при вводе текста, изменение скорости ввода и улучшенный выбор позиции для наведения."},"Additional filter by group id. It can be obtained from \"Create Group\" action or from \"Get Group List\". Leave blank not to apply filter by group.":{"ru":"Дополнительный фильтр по ид группы. Его можно получить как результат выполнения действия \"Создать Группу\" или из действия \"Получить Список Групп\". Оставьте пустым, чтобы не применять фильтр по группам."},"Additional settings":{"ru":"Дополнительные настройки"},"Additionally, this action will save all captured groups into list, it can be processed later with List module.":{"ru":"Кроме того, это действие сохранит все извлеченные группы в список, его можно будет обработать позже с помощью модуля \"Список\"."},"Additionally, this action will save the result as a list of items, it can be processed later with List module.":{"ru":"Кроме того, это действие сохранит результат в виде списка, который можно будет обработать позже с помощью модуля \"Список\"."},"Address (URL or IP) of the mail server.":{"ru":"Адрес (URL или IP) почтового сервера."},"Afghanistan":{"ru":"Афганистан"},"After action completes, this variable will contain a string in csv format. You can extract different columns of a record with \"Parse Line\" action. Record columns are components of resulting cvs in a same order as defined in database, plus the last component is always record id.":{"ru":"После завершения действия, эта переменная будет содержать результат в строки в формате csv. Вы можете разделить строку на компоненты с помощью действия \"Парсить строку\" из модуля \"Инструменты\". Столбцы в csv располагаются в том же порядке, что и в базе, а последним компонентом всегда является ид записи."},"After action completes, this variable will contain result as a list of strings. Each string describes one group with csv format. You can parse it with \"Parse Line\" action. First component is a group id, second is group name, and third - group description.":{"ru":"После завершения действия, эта переменная будет содержать результат в виде списка строк. Каждая строка описывает одну группу и имеет csv формат. Вы можете разделить строку на компоненты с помощью действия \"Парсить строку\" из модуля \"Инструменты\". Первый компонент - это идентификатор группы, второй - имя группы и третий - описание группы."},"After action completes, this variable will contain result as a list of strings. Each string describes one record with csv format. You can process list with module \"List\" and parse each line with \"Parse Line\" action. Record columns are components of resulting cvs in a same order as defined in database, plus the last component is always record id.":{"ru":"После завершения действия эта переменная будет содержать результат в виде списка строк. Каждая строка содержит одну запись из базы в формате csv. Вы можете обработать список с помощью модуля \"Список\" и разделить каждую строку на переменные с помощью действия \"Парсить строку\". Столбцы в csv располагаются в том же порядке, что и в базе, а последним компонентом всегда является ид записи."},"After action completes, variable will contain a string in csv format. You can extract different columns of a record with \"Parse Line\" action. Record columns are components of resulting cvs in a same order as defined in database, plus the last component is always record id.":{"ru":"После завершения действия, переменная будет содержать результат в строки в формате csv. Вы можете разделить строку на компоненты с помощью действия \"Парсить строку\" из модуля \"Инструменты\". Столбцы в csv располагаются в том же порядке, что и в базе, а последним компонентом всегда является ид записи."},"After action completes, variable will contain result as a list of strings. Each string describes one group with csv format. You can parse it with \"Parse Line\" action. First component is a group id, second is group name, and third - group description.":{"ru":"После завершения действия, переменная будет содержать результат в виде списка строк. Каждая строка описывает одну группу и имеет csv формат. Вы можете разделить строку на компоненты с помощью действия \"Парсить строку\" из модуля \"Инструменты\". Первый компонент - это идентификатор группы, второй - имя группы и третий - описание группы."},"After action completes, variable will contain result as a list of strings. Each string describes one record with csv format. You can process list with module \"List\" and parse each line with \"Parse Line\" action. Use \"Foreach\" action to iterate over records. Record columns are components of resulting cvs in a same order as defined in database, plus the last component is always record id.":{"ru":"После завершения действия переменная будет содержать результат в виде списка строк. Каждая строка содержит одну запись из базы в формате csv. Вы можете обработать список с помощью модуля \"Список\" и разделить каждую строку на переменные с помощью действия \"Парсить строку\". Используйте действие \"Foreach\" для создания цикла, который будет запущен для каждой записи. Столбцы в csv располагаются в том же порядке, что и в базе, а последним компонентом всегда является ид записи."},"After acton finishes, this variable will contain list of strings, each string contains profile id and profile name separated with colon. For example, [\"ad5ba41d-9f24-48b9-8ae6-f8c2540f24b3:test\", \"91fb1e72-1edb-413f-bdd7-6e7f1b945a24:test2\"]":{"ru":"После выполнения эта переменная будет содержать список строк, каждая из которых содержит идентификатор профиля и имя профиля, разделенных двоеточием. Например, [\"ad5ba41d-9f24-48b9-8ae6-f8c2540f24b3:test\", \"91fb1e72-1edb-413f-bdd7-6e7f1b945a24:test2\"]"},"After custom resource is created and filled with data it can be used as any other resource in any field and in any thread":{"ru":"После создания и наполнения ресурса данными он может использоваться как любой другой ресурс в любом поле и в любом потоке"},"After execution of this action will complete, [[FINGERPRINT]] variable will contain fingerprint string. Fingerprint string contains all data necessary to change fingerprint. It can be used immediately with 'Apply fingerprint' action. It also can be saved to a text file or database and reused later.":{"ru":"По завершении выполнения этого действия переменная [[FINGERPRINT]] будет содержать все данные, необходимые для изменения отпечатка. Они могут быть использованы как сразу, вместе с действием 'Применить отпечаток', так и в любое другое время, даже после перезапуска BAS. Для этого сохраните их в текстовый файл или базу данных и загрузите перед использованием."},"After resource is created, you probably want to fill it with data, do it with 'Add Element' action.":{"ru":"После создания ресурса вы, вероятно, захотите заполнить его данными, сделайте это с помощью действия 'Добавить элемент'."},"After resource item is released, it may be acquired again instantly.":{"ru":"После того, как ресурс будет использован, его можно будет сразу же снова получить повторно."},"After the first character":{"ru":"После первого символа"},"After the last character":{"ru":"После последнего символа"},"After the second character":{"ru":"После второго символа"},"After the service solves the captcha, you will receive a list of coordinates on which you should click. In order to perform clicks, this list must be passed through any loop, such as <code>for<\/code> or <code>foreach<\/code>, and at each iteration call the <code>Click<\/code> actiom for each pair of <code>X<\/code> and <code>Y<\/code> coordinates. After the clicks are done, you need to continue manually. That is, you have to do your own solution confirmation or move on to the next image.":{"ru":"После того, как сервис решит капчу, вы получите список координат, по которым необходимо будет выполнить клики. Для того, чтобы выполнить клики, данный список необходимо пройти любым циклом, например <code>for<\/code> или <code>foreach<\/code>, и на каждой итерации вызвать действие <code>Кликнуть<\/code> для каждой пары координат <code>X<\/code> и <code>Y<\/code>. После выполнения кликов вам необходимо вручную продолжить работу. То есть, вы должны сами выполнить подтверждение решения или перейти к следующему изображению."},"After this action is finished, you can use group identifier returned as variable to interact with group, for example, add records in group.":{"ru":"По завершении этого действия вы можете использовать идентификатор группы, возвращаемый как переменную для взаимодействия с группой, например, чтобы добавлять записи в группу."},"Albania":{"ru":"Албания"},"Algeria":{"ru":"Алжир"},"Algorithm":{"ru":"Алгоритм"},"Algorithm <code>blake2b-512<\/code> is compatible with the NaCl and Sodium libraries.":{"ru":"Алгоритм <code>blake2b-512<\/code> совместим с библиотеками NaCl и Sodium."},"All JavaScript and all text files":{"ru":"Все JavaScript и все текстовые файлы"},"All JavaScript files":{"ru":"Все JavaScript файлы"},"All actions which will be executed after this one won't use idle emulation. The only exception is if idle emulation is set inside specific action settings or if \"Enable automatic idle emulation\" will be called again.":{"ru":"Все действия, которые будут выполнены после этого, не будут использовать эмуляцию бездействия. Единственным исключением является случай, если эмуляция бездействия установлена в настройках конкретного действия или если действие \"Включить автоматическую эмуляцию бездействия\" будет вызвано повторно."},"All files":{"ru":"Все файлы"},"All files except text":{"ru":"Все файлы, кроме текстовых"},"All other letters in lowercase":{"ru":"Все остальные буквы в нижний регистр"},"All possible elements.":{"ru":"Все возможные элементы."},"All previous data will be lost and all resource item state(successes and failures) will be lost.":{"ru":"Все предыдущие данные будут потеряны, и состояние всех данных (количество успехов и неудач ресурса) также будет потеряно."},"All services requires a service key which which must be obtained on the service website and entered in the <code>Service key<\/code> field.":{"ru":"Для всех сервисов требуется сервисный ключ, который должен быть получен на сайте сервиса и введён в поле <code>Ключ сервиса<\/code>."},"All string that matches regexp":{"ru":"Найденный текст целиком"},"All text captured by regular expression.":{"ru":"Весь текст извлеченный с помощью регулярного выражения."},"All text files":{"ru":"Все текстовые файлы"},"All values will be saved to current profile and will be automatically restored on next profile usage.":{"ru":"Все значения будут сохранены в текущем профиле и будут автоматически восстановлены при следующем использовании профиля."},"Allows to better emulate devices with higher pixel density. With this setting enabled, emulation will be done in the most natural way. It means that browser will render the page in a bigger resolution, just like on real device. The tradeoff is higher system resources usage, because you need to perform more calculations to render a bigger picture. Javascript settings related to pixel density, for example devicePixelRatio, will be replaced correctly regardless if this setting will be enabled or not.":{"ru":"Позволяет лучше эмулировать устройства с более высокой плотностью пикселей. Если этот параметр включен, эмуляция будет выполняться наиболее естественным образом. Это означает, что браузер будет рисовать страницу в большем разрешении, как на реальном устройстве. Взамен ресурсы системы будут использоваться более интенсивно, потому что устройству нужно будет выполнять больше вычислений, чтобы отобразить страницу больших размеров. Параметры javascript, связанные с плотностью пикселей, например devicePixelRatio, будут заменены корректно независимо от того, включен этот параметр или нет."},"Also, if debug is enabled, then in BAS recording mode, during idle emulation, in the browser will be displayed the found elements and the search radius.":{"ru":"Также если отладка включена, то в режиме записи BAS, во время эмуляции бездействия, в браузере будут отображается найденные элементы и радиус поиска."},"Also, the mail service may have a separate password for connecting via imap\/pop3.":{"ru":"Также почтовый сервис может иметь отдельный пароль для подключения по imap\/pop3."},"Always do replacement.":{"ru":"Выполнять замену всегда."},"Always load fingerprint from profile folder":{"ru":"Всегда загружать отпечаток из папки с профилем"},"Always load proxy from profile folder":{"ru":"Всегда загружать прокси из папки с профилем"},"An access token used for OAuth 2.0 authorization. This token is generated after successfully completing OAuth 2.0 authentication through a provider such as Google, Microsoft, etc. The token is used in place of a password to access the mail server, ensuring a secure connection without the need to store or transmit a password directly.":{"ru":"Токен доступа, используемый для авторизации через OAuth 2.0. Этот токен генерируется после успешной аутентификации через OAuth 2.0 у провайдера, такого как Google, Microsoft и т.д. Токен используется вместо пароля для доступа к почтовому серверу, обеспечивая безопасное соединение без необходимости хранить или передавать пароль напрямую."},"An array as a value (<span class=\"help-popup-code\">expression<\/span> type).":{"ru":"Список в качестве значения (тип <span class=\"help-popup-code\">expression<\/span>)."},"An element will be considered accessible if at least 2 points on it are not overlapped":{"ru":"Элемент будет считается доступным, если как минимум 2 точки на нём не перекрыты"},"An element will be considered accessible if at least 3 points on it are not overlapped":{"ru":"Элемент будет считается доступным, если как минимум 3 точки на нём не перекрыты"},"An element will be considered accessible if at least 4 points on it are not overlapped":{"ru":"Элемент будет считается доступным, если как минимум 4 точки на нём не перекрыты"},"An element will be considered accessible if at least one of the points on it is not overlapped":{"ru":"Элемент будет считается доступным, если хотя бы одна из точек на нём не является перекрытой"},"An important point - this action does not automatically confirm the solution of the captcha. You have to do it yourself. For example, if you solve <code>ReCaptcha2<\/code> using this method, you should click the checkbox yourself, and after clicking on the coordinates, click the <code>Next<\/code> or <code>Done<\/code> button.":{"ru":"Важный момент - данное действие не выполняет автоматического подтверждения решения капчи. Вы должны сделать это сами. Например, если вы решаете <code>ReCaptcha2<\/code> используя данный метод, то вам нужно самостоятельно выполнить клик по чекбоксу, а после выполнения кликов по координатам - нажать на кнопку <code>Далее<\/code> или <code>Готово<\/code>."},"An integer specifying the maximum number of items in the resulting list. The string will still be split completely, but the final list will be truncated so that its length does not exceed the specified limit.":{"ru":"Целое число, определяющее максимальное количество элементов в итоговом списке. Строка все равно будет разделена полностью, но итоговый список будет обрезан, так чтобы его длинна не превышала указанный лимит."},"An offset for daylight saving time.":{"ru":"Смещение для летнего времени."},"And also you can disable emulation by specifying \"disable\".":{"ru":"А также вы можете отключить эмуляцию, указав \"disable\"."},"Angola":{"ru":"Ангола"},"Anguilla":{"ru":"Ангилья"},"Another advantage is that one function may be executed as many times as you want from any place in the script. This helps to avoid code duplication. If you want to update function, you need to do that only once, not in every place where it used.":{"ru":"Другим преимуществом является то, что одна функция может выполняться столько раз, сколько вы хотите и из любого места. Это помогает избежать повторения кода. Если вы хотите изменить функцию, вам нужно сделать это только один раз, а не в любом месте, где она используется."},"Another example, if line is":{"ru":"Второй пример, если строка"},"Antigua and Barbuda":{"ru":"Антигуа и Барбуда"},"Any JSONPath query that you need.":{"ru":"Любой нужный вам запрос JSONPath."},"Any digit sequence":{"ru":"Любая последовательность цифр"},"Any lowercase character sequence":{"ru":"Любая последовательность символов в нижнем регистре"},"Any non digit sequence":{"ru":"Любая последовательность любых символов исключая цифры"},"Any number of any characters except line break":{"ru":"Любое количество любых символов, кроме переноса строки"},"Any number of any characters including line break":{"ru":"Любое количество любых символов, включая перенос строки"},"Any string with profile name. Multilogin allows to have several accounts with same names, but best practice is to create accounts with meaningful unique names.":{"ru":"Любая строка с именем профиля. Multilogin позволяет создавать несколько профилей с одинаковыми именами, но лучше всего называть профили уникальными, значимыми именами."},"Any whitespace character sequence (includes tabs and line breaks)":{"ru":"Любое количество пробелов, символов табуляции или переносов строк"},"Any word character sequence":{"ru":"Любая последовательность букв"},"Append":{"ru":"Дописывать файл"},"Applying fingerprint doesn't require browser restart, so it won't reset your settings.":{"ru":"Применение отпечатка не требует перезапуск браузера, поэтому настройки не сбрасываются."},"Arbitrary string. Works with encode mode":{"ru":"Любая строка. Работает в режиме encode"},"Argentina":{"ru":"Аргентина"},"Armenia":{"ru":"Армения"},"Aruba":{"ru":"Аруба"},"As a list, you can use a string consisting of directory indexes, separated by commas.":{"ru":"В качестве списка можно использовать строку, состоящую из индексов каталога, разделенных запятыми."},"As a list, you can use a string consisting of flags, separated by commas.":{"ru":"В качестве списка можно использовать строку, состоящую из флагов, разделенных запятыми."},"As a list, you can use a string consisting of paths, separated by commas.":{"ru":"В качестве списка можно использовать строку, состоящую из путей, разделенных запятыми."},"As a list, you can use a string consisting of strings, separated by commas.":{"ru":"В качестве списка можно использовать строку, состоящую из строк, разделенных запятыми."},"As a list, you can use a string consisting of the names of the query parameters, separated by commas.":{"ru":"В качестве списка можно использовать строку, состоящую из имен параметров запроса, разделенных запятыми."},"As a list, you can use a string consisting only of the separators.":{"ru":"В качестве списка можно использовать строку, состоящую только из разделителей."},"As a value can be specified as one of the three presets \"short\", \"medium\" or \"long\", or the exact value in seconds.":{"ru":"В качестве значения можно указать одну из трех предустановок \"short\", \"medium\" или \"long\", либо точное значение в секундах."},"Ask user to solve captcha":{"ru":"Попросить пользователя решить капчу"},"Attach mask":{"ru":"Маска вложенных"},"Attachment names":{"ru":"Имена вложений"},"Attachments":{"ru":"Вложения"},"Attachments. Can be blank.":{"ru":"Прикрепляемые файлы. Может быть пустым."},"Audio noice":{"ru":"Шум audio"},"Australia":{"ru":"Австралия"},"Austria":{"ru":"Австрия"},"Authorization method":{"ru":"Метод авторизации"},"Auto configuration":{"ru":"Автоматическая настройка"},"Automatically configure connection":{"ru":"Автоматически настраивать подключение"},"Automatically detect port based on protocol and encryption type":{"ru":"Автоматическое определение порта на основе протокола и типа шифрования"},"Available only for Multilogin browser.":{"ru":"Доступно только для браузера Multilogin."},"Average emulation time":{"ru":"Среднее время эмуляции"},"Azerbaijan":{"ru":"Азербайджан"},"BAS stores binary data as base64 strings. It could be binary files, pictures, video, etc. Base64 encoding represent binary data in ascii string.":{"ru":"Кодировка base64 представляет двоичные данные в виде ascii строки. BAS хранит двоичные данные как строки в формате base64. Это могут быть файлы, изображения, видео и т. д."},"Bahamas":{"ru":"Багамы"},"Bahrain":{"ru":"Бахрейн"},"Bangladesh":{"ru":"Бангладеш"},"Barbados":{"ru":"Барбадос"},"Base URL":{"ru":"Базовый URL"},"Base64 string. Works with decode mode":{"ru":"Строка в формате base64. Работает в режиме decode"},"Batch script can have multiple lines, may use":{"ru":"Batch скрипт может иметь несколько строк, могут использоваться"},"Batch script or executable path":{"ru":"Batch скрипт или путь к исполняемому файлу"},"Battery":{"ru":"Батарея"},"Before changing, you can normalize the URL by activating the corresponding parameter in the additional settings, or use the \"Normalize URL\" action for flexible normalization.":{"ru":"Перед изменением URL можно нормализовать, активировав соответствующий параметр в дополнительных настройках, или использовать действие \"Нормализовать URL\" для гибкой нормализации."},"Before formatting, the number can be rounded by specifying the \"Number of decimal places\" parameter.":{"ru":"Перед форматирование число можно округлить, указав параметр \"Количество знаков в дробной части\"."},"Before parsing, you can normalize the URL by activating the corresponding parameter in the additional settings, or use the \"Normalize URL\" action for flexible normalization.":{"ru":"Перед парсингом URL можно нормализовать, активировав соответствующий параметр в дополнительных настройках, или использовать действие \"Нормализовать URL\" для гибкой нормализации."},"Before performing this action, you first need to get a number using the \"Get phone number\" action and use it unchanged in the \"Number\" parameter.":{"ru":"Перед выполнением этого действия сначала нужно получить номер действием \"Получить номер телефона\" и без изменений использовать его в параметре \"Номер\"."},"Belarus":{"ru":"Беларусь"},"Belgium":{"ru":"Бельгия"},"Belize":{"ru":"Белиз"},"Benin":{"ru":"Бенин"},"Bermuda":{"ru":"Бермуды"},"Besides that, frequency of occurrence of interval with some types, may be bigger then others.":{"ru":"Кроме того, частота появления интервала с одними типами может быть больше, чем с другими."},"Best place to use this action is thread end, if you want to preserve your cookies and don't login to sites that you visited when running BAS later.":{"ru":"Лучшее место для использования этого действия - конец работы потока, если вы хотите сохранить свои cookie и не заходить на сайт второй раз когда позже запускаете BAS."},"Beyond":{"ru":"За рамки"},"Bhutan":{"ru":"Бутан"},"Body contains":{"ru":"Тело содержит"},"Body html":{"ru":"Тело html"},"Body not contains":{"ru":"Тело не содержит"},"Body of message":{"ru":"Тело письма"},"Body raw":{"ru":"Тело raw"},"Body text":{"ru":"Тело текст"},"Bolivia, plurinational state of":{"ru":"Боливия, Многонациональное Государство"},"Boolean":{"ru":"Булевый тип"},"Boolean value(true\/false) indicates if function is still running.":{"ru":"Логическое значение(true\/false) указывает, работает ли функция в данный момент."},"Boolean value(true\/false) indicates if last function execution was successful.":{"ru":"Логическое значение(true\/false) указывает, был ли результат последнего выполнения успешным."},"Boolean value, if current profile has fingerprint. It can be applied automatically with 'Create or switch to regular profile' action.":{"ru":"Булевое значение(true или false), содежит ли текущий профиль отпечаток. Его можно применить автоматически с помощью действия 'Создать или переключиться на постоянный профиль'."},"Boolean value, if current profile has proxy. It can be applied automatically with 'Create or switch to regular profile' action.":{"ru":"Булевое значение(true или false), содежит ли текущий профиль прокси. Его можно применить автоматически с помощью действия 'Создать или переключиться на постоянный профиль'."},"Boolean value, if current profile is online profile.":{"ru":"Булевое значение(true или false), которое показывает, хранится ли текущий профиль онлайн."},"Bosnia and Herzegovina":{"ru":"Босния и Герцеговина"},"Bot token":{"ru":"Token бота"},"Both":{"ru":"Обе стороны"},"Botswana":{"ru":"Ботсвана"},"Brazil":{"ru":"Бразилия"},"Browser Settings":{"ru":"Настройки Браузера"},"Browser height must be equal or greater than 900":{"ru":"Высота браузера должна быть больше 900"},"Browser height must be equal or less than 1200":{"ru":"Высота браузера должна быть меньше 1200"},"Browser major version":{"ru":"Основная версия браузера"},"Browser name":{"ru":"Название браузера"},"Browser version":{"ru":"Версия браузера"},"Browser version equals to BAS browser version or higher":{"ru":"Версия браузера такая же как версия браузера BAS или выше"},"Browser version equals to BAS browser version or lower":{"ru":"Версия браузера такая же как версия браузера BAS или ниже"},"Browser version must be equal or greater than 111":{"ru":"Версия браузера должна быть равна или больше 111."},"Browser version must be equal or greater than 75":{"ru":"Версия браузера должна быть не меньше 75"},"Browser version must be equal or greater than BAS browser version":{"ru":"Версия браузера должна быть равна или больше версии браузера BAS."},"Browser version must be equal or less than 111":{"ru":"Версия браузера должна быть равна или меньше 111."},"Browser version must be equal or less than BAS browser version":{"ru":"Версия браузера должна быть равна или меньше версии браузера BAS."},"Browser width must be equal or greater than 1600":{"ru":"Ширина браузера должна быть больше 1600"},"Browser width must be equal or less than 2000":{"ru":"Ширина браузера должна быть меньше 2000"},"Brunei Darussalam":{"ru":"Бруней-Даруссалам"},"Bulgaria":{"ru":"Болгария"},"Burkina Faso":{"ru":"Буркина-Фасо"},"Burundi":{"ru":"Бурунди"},"Business proposal":{"ru":"Деловое предложение"},"Buy at regular price.":{"ru":"Покупать по обычной цене."},"By clicking on \"Add filter\" button you can modify filters. You can add as many filters as you like. Only records that matches all filters will be affected by this action.":{"ru":"Нажав кнопку \"Добавить фильтр\", вы можете редакторовать фильтры. Вы можете добавить столько фильтров, сколько хотите. Это действие будет изменять только те записи, которые соответствуют всем фильтрам."},"By default BAS browser stores all profile data in temporary folder. This action will switch to new temporary profile.":{"ru":"По умолчанию браузер BAS сохраняет все данные профиля во временной папке. Это действие переключится на новый временный профиль."},"By default FingerprintSwitcher adds noise to canvas data. If you want to have more accurate results, use PerfectCanvas technology. It renders canvas data on real device and then replaces canvas fingerprinting results inside your browser. In order to use it, some preparation must be made. You need to fill \"PerfectCanvas request\" field. Data for this field can be obtained by using CanvasInspector application. This application is free and easy to install, it allows to get PerfectCanvas request for site that you working with. More info and download link can be found":{"ru":"По умолчанию FingerprintSwitcher добавляет шум в данные canvas. Если вы хотите получить более точные результаты, используйте технологию PerfectCanvas. Она позволяет получать данные canvas из реального устройства, а затем заменяет результаты получения отпечатков canvas в вашем браузере. Для использования этой технологии, необходима подготовка. Необходимо заполнить поле \"Запрос PerfectCanvas\". Данные для этого поля могут быть получены с помощью приложения CanvasInspector. Это бесплатное и простое в использовании и установке приложение, которое позволяет получить запрос PerfectCanvas для сайта, с которым вы работаете. Более подробную информацию и ссылку для скачивания можно найти"},"By default SMTP client works without proxy, this action sets proxy for SMTP client.":{"ru":"По умолчанию SMTP клиент работает без прокси, это действие устанавливает прокси для SMTP клиента."},"By default browser searches for fonts only in system font folder. This may lead to inconsistencies during fingerprint emulation if target fingerprint has more fonts than local system. Therefore, it is recommended to download font pack with most popular fonts. This setting allows to use font pack if it is installed.":{"ru":"По умолчанию браузер ищет шрифты только в системной папке. Это может привести к несоответствиям при эмуляции отпечатка, если в нем больше шрифтов, чем установлено в локальной системе. Поэтому рекомендуется скачать пак с наиболее популярными шрифтами. Этот параметр разрешает использовать пак шрифтов, если он установлен."},"By default lines from file adding is postponed, the reason for this is hard drive usage optimisation. But if you check 'Add to file\/database instantly', file will be updated instantly.":{"ru":"По умолчанию добавление строк в файл происходит не сразу, это сделано для оптимизации использования жесткого диска. Но если вы установите настройку 'Добавить в файл\/базу мгновенно', файл будет обновлен мгновенно."},"By default lines from file deletion is postponed, the reaseon for this is hard drive usage optimisation. But if you check 'Delete from file\/database instantly', file will be cleared instantly.":{"ru":"По умолчанию удаление строк из файла происходит не сразу, это сделано для оптимизации использования жесткого диска. Но если вы установите настройку 'Удалить из файла\/базы мгновенно', то файл будет очищен и перезаписан мгновенно после завершения этого действия."},"By default mail client works without proxy, this action sets proxy for mail client.":{"ru":"По умолчанию почтовый клиент работает без прокси, это действие устанавливает его."},"By default sorting is disabled, but you can enable it by changing this field. Don't forget to change database field(\"Sorting column\") for which sorting will be applied.":{"ru":"По умолчанию сортировка отключена, но вы можете включить ее, изменив значение этого поля. Не забудьте установить поле базы данных, по которому вы хотите проводить сортировку(\"Поле для сортировки\")."},"By default this action doesn't synchronize database and resources, if you want to delete record from resources besides database, you need to check \"Delete resource\" field.":{"ru":"По умолчанию это действие не синхронизирует базу данных и ресурсы, если вы хотите удалить запись из ресурсов помимо базы данных, вам нужно изменить значения поля \"Удалять из ресурсов\"."},"By default this action doesn't synchronize database and resources, if you want to insert record to resources besides database, you need to check \"Add record to resources\" field.":{"ru":"По умолчанию это действие не синхронизирует базу данных и ресурсы, если вы хотите добавить запись в ресурсы помимо базы данных, вам нужно изменить значения поля \"Добавить в ресурсы\"."},"By default this action doesn't synchronize database and resources, if you want to update record in resources besides database, you need to check \"Update resources\" field.":{"ru":"По умолчанию это действие не синхронизирует базу данных и ресурсы, если вы хотите изменить запись в ресурсах помимо базы данных, вам нужно изменить значения поля \"Обновлять ресурсы\"."},"By default this action will wait infinite amount of time, but you can specify maximum time to wait. If function will not complete by that time, it will be stopped and error will raise. You can process error with \"Ignore Errors\" action. Setting maximum time to wait is very convinient way to set timeout to any function.":{"ru":"По умолчанию это действие будет ожидать бесконечное количество времени, но вы можете указать максимальное время ожидания. Если функция не завершится к этому времени, она будет остановлена и возникнет ошибка. Вы можете обработать ошибку с помощью действия \"Игнорировать ошибки\". Установка максимального времени ожидания - очень удобный способ ограничить время выполнения для любой функции."},"By default time measurement will return value that has high precision, it can be more than 1 milliseconds. For example, value 1200.695 means 1 second and 200.695 milliseconds. This can be used to generate browser fingerprint, but you can limit presicion up to 1 millisecond by using this parameter. This means that returned value will be 1200.0 instead of 1200.695. It will neglect fingerprinting but may look suspicious, so it is better to use time deformation instead.":{"ru":"По умолчанию измерение времени вернет значение с высокой точностью, она может быть больше 1 миллисекунды. Например, значение 1200.695 означает 1 секунду и 200.695 миллисекунд. Это может быть использовано для получения отпечатка браузера, но вы можете ограничить точность результата до 1 миллисекунды с помощью этого параметра. Это означает, что возвращаемое значение будет 1200.0 вместо 1200.695. Этот подход снизит возможность получения отпечатка, но может казаться подозрительным, поэтому вместо него лучше использовать деформацию временни."},"By default warnings will be displayed if this action is not configured properly and this configuration may lead to detection. You can suppress these warnings by setting this param. Warnings are displayed only in record mode.":{"ru":"По умолчанию предупреждения будут отображаться, если это действие настроено неправильно, и такая конфигурация может привести к обнаружению. Вы можете отключить эти предупреждения, установив этот параметр в значение \"true\". Предупреждения отображаются только в режиме записи."},"By default, function will be started in a new thread, and after function will finish, thread will be deleted. However, you can keep thread running and even execute new function in it after old is finished. Next function will share same context - same browser and local variables. Consider following example, there are two functions: SetProxy and DoParsing, if you execute them in different threads, parsing will be performed with real ip, and if you execute them in same thread sequentially, parsing will be performed through proxy. In order to start function in old thread, set \"Desired thread id\" to old thread id, you need also to set \"Close thread after function finish\" parameter to false.":{"ru":"По умолчанию функция будет запущена в новом потоке, а после завершения функции поток будет удален. Тем не менее, вы можете поддерживать работу потока и даже запустить в нем новую функцию после завершения старой. Запущенная в старом потоке функция будет иметь тот же контекст - тот же браузер и те же локальные переменные. Рассмотрим следующий пример - есть две функции: SetProxy и DoParsing. Если вы выполняете их в разных потоках, парсинг будет выполняться с реальным ip, а если вы выполняете их в одном и том же потоке последовательно, парсинг будет выполняться через прокси. Чтобы запустить функцию в ранее использованном потоке, установите у параметра \"Желаемый ID потока\" значение ID этого потока, также необходимо установить у параметра \"Остановить поток после завершения функции\" значение false."},"By default, sorting is disabled, but you can enable it by changing the value of this parameter and specifying the \"Sorting field\" parameter.":{"ru":"По умолчанию сортировка отключена, но вы можете включить её, изменив значение этого параметра и указав параметр \"Поле сортировки\"."},"By default, strings are joined without a separator, but this can be changed by specifying the \"Separator\" parameter located in the additional settings.":{"ru":"По умолчанию строки соединяются без разделителя, но это можно изменить, указав параметр \"Разделитель\", находящийся в дополнительных настройках."},"By default, the Cyrillic is also latinized, but this can be changed by disabling the \"Latinize Cyrillic\" parameter.":{"ru":"По умолчанию кириллица тоже латинизируется, но это можно изменить, отключив параметр \"Латинизировать кириллицу\"."},"By default, the action returns strings, but this can be changed by enabling the \"Convert types\" parameter located in the additional settings, then strings will automatically be converted to numbers, true or false, objects, null and undefined.":{"ru":"По умолчанию действие возвращает строки, но это можно изменить, включив параметр \"Преобразовывать типы\", находящийся в дополнительных настройках, тогда страки автоматически будут конвертироватся в числа, true или false, обекты, null и undefined."},"By default, the action trim the string on both sides, but this can be changed using the radio buttons located in the additional settings.":{"ru":"По умолчанию действие обрезает строку с обеих сторон, но это можно изменить с помощью переключателей, находящихся в дополнительных настройках."},"By default, the information about the number is deleted when the statuses -1, 6 and 8 are successfully set, but this can be disabled in the additional settings.":{"ru":"По умолчанию информация о номере удаляется при удачной установке статусов -1, 6 и 8, но это можно отключить в дополнительных настройках."},"By default, the search is performed from the beginning of the string, but this can be changed by specifying the index from which to start the search in the \"From index\" parameter located in the additional settings.":{"ru":"По умолчанию поиск производится с начала строки, но это можно изменить, указав индекс, с которого следует начинать поиск, в параметр \"С индекса\", находящийся в дополнительных настройках."},"By default, the search is performed from the end of the string, but this can be changed by specifying the index from which to start the search in the \"Length\" parameter located in the additional settings.":{"ru":"По умолчанию поиск производится с конца строки, но это можно изменить, указав индекс, с которого следует начинать поиск, в параметр \"Длина\", находящийся в дополнительных настройках."},"By lefting group id empty you can remove record from all groups. This won't remove record from database, record will still be available in group \"All\". If you want to remove it completely, use \"Delete Record\" action.":{"ru":"Оставляя ид группы пустым, вы можете удалить запись из всех групп. Это не приведет к удалению записи из базы данных вообще, запись по-прежнему будет доступна в группе \"Все\". Если вы хотите полностью удалить его, используйте действие \"Удалить запись\"."},"By using \"Disable performance precision\" parameter precision of time measurement will be reduced. It will neglect fingerprinting, but may look suspicious. See parameter description for more details.":{"ru":"При использовании параметра \"Отключить высокую точность замеров\" точность измерения времени будет уменьшена. Этот подход снизит возможность получения отпечатка, но может казаться подозрительным. Смотрите описание параметров для более подробной информации."},"CC. Can be blank.":{"ru":"Копия. Может быть пустым."},"CSV list - a list that consists of CSV strings and CSV string consists of name, attributes and delimiter of folder separated with \":\" symbol.":{"ru":"CSV list - это список, состоящий из CSV строк, а CSV строка состоит из имени, атрибутов и разделителя паки, разделенных символом \":\"."},"CSV string - this CSV strings separated by a line break, and consisting of name, attributes and delimiter of folder separated with \":\" symbol.":{"ru":"CSV string - это CSV строки, разделенные переносом строки и состоящие из имени, атрибутов и разделителя паки, разделенных символом \":\"."},"CSV string with want to parse into items.":{"ru":"CSV строка, которую нужно распарсить на элементы."},"CSV strings can be parsed using the \"Parse CSV string\" action from the \"String\" module.":{"ru":"CSV строки можно распарсить с помощью действия \"Парсить CSV строку\" из модуля \"Строка\"."},"Calculate the checksum of the specified file.":{"ru":"Рассчитать контрольную сумму указанного файла."},"Calculate the checksum of the specified string.":{"ru":"Рассчитать контрольную сумму указанной строки."},"Cambodia":{"ru":"Камбоджа"},"Cameroon":{"ru":"Камерун"},"Can be blank":{"ru":"Может быть пустым"},"Canada":{"ru":"Канада"},"Cancel activation.":{"ru":"Отменить активацию."},"Canvas noice":{"ru":"Шум canvas"},"Cape Verde":{"ru":"Кабо-Верде"},"Capitalize":{"ru":"Сделать заглавными"},"Capitalize all words":{"ru":"Сделать все слова заглавными"},"Captcha description. Can be empty.":{"ru":"Описание капчи. Может быть пустым."},"Captcha solving service key. You can get it in your personal account of selected captcha solving service":{"ru":"Ключ от сервиса решения капчи. Вы можете получить его в личном кабинете выбранного сервиса решения капчи"},"Captcha solving service name":{"ru":"Название сервиса для решения капчи"},"Captured groups":{"ru":"Извлеченные группы"},"Carriage return":{"ru":"Возврат каретки"},"Carriage return and line break":{"ru":"Возврат каретки и перенос строки"},"Carriage return and line break (\\r\\n)":{"ru":"Возврат каретки и перенос строки (\\r\\n)"},"Carriage return and line break, split multiline text":{"ru":"Возврат каретки и перенос строки, разделить многострочный текст"},"Cayman Islands":{"ru":"Острова Кайман"},"Cellular operator of the number, in the form in which it is perceived by the SMS receiving service.":{"ru":"Сотовый оператор номера, в том виде в котором его воспринимает сервис приема SMS."},"Central African Republic":{"ru":"Центрально-Африканская Республика"},"Chad":{"ru":"Чад"},"Chance of a reverse scroll drop. As a value can be specified as one of the four presets \"disable\", \"low\", \"medium\" or \"high\", or an exact number from 0 to 100.":{"ru":"Шанс выпадения прокрутки в обратном направлении. В качестве значения можно указать одну из четырех предустановок \"disable\", \"low\", \"medium\" или \"high\", либо точное число от 0 до 100."},"Change an existing date and time object using the specified parameters.":{"ru":"Изменить существующий объект даты и времени, используя указанные параметры."},"Change browser fingerprint, which contains: user agent, screen size, navigator, fonts and many more.":{"ru":"Изменить отпечаток браузера, который содержит: юзер агент, размер экрана, свойства navigator, шрифты и многое другое."},"Change browser geolocation according to specified ip. Location will be set to a point which is close to ip longitude\/latitude. You can set geolocation to custom value with 'Timezone' module.":{"ru":"Измененить месторасположение(координаты) браузера в соответствии с заданным ip. Оно будет установлено в точку, близкую к долготе\/широте ip. Вы можете задать произвольное значение с помощью модуля 'Часовой пояс'."},"Change browser language according to country of ip. This setting will change 'Accept-Language' header as well as navigator.language and navigator.languages javascript properties. By default language value will be equal to language and country code separated with dash, for example 'de-DE' for Germany. This value is valid, but most browsers uses more complicated strings. If you want to make BAS look like real browser, use FingerprintSwitcher service, it will set language to more natural value, for example for iPhone from Germany it will equal 'de, en;q=0.8, *;q=0.01'. You can also set this value explicitly by using 'Set Header' action":{"ru":"Изменить язык браузера в зависимости от страны ip. Этот параметр изменит заголовок Accept-Language, а также свойства javascript navigator.language и navigator.languages. По умолчанию значение языка будет состоять из языка и кода страны, разделенными дефисом, например 'de-DE' для Германии. Это значение корректное, но большинство браузеров использует более сложные варианты. Если вы хотите, чтобы BAS выглядел как настоящий браузер, используйте сервис FingerprintSwitcher, он установит язык более в более естественное значение, например, для iPhone из Германии оно будет равно 'de, en;q=0.8, *;q=0.01'. Вы также можете установить это значение явно, используя действие 'Установить заголовок'"},"Change browser language according to country of specified ip.":{"ru":"Изменить язык браузера в зависимости от страны ip."},"Change browser timezone according to specified ip. For example, if ip is located in United Kingdom, then browser timezone offset will be equal to 0(UTC+00:00). You can set timezone to custom value with 'Timezone' module.":{"ru":"Изменить часовой пояс браузера в соответствии с заданным ip. Например, если ip находится в Англии, то часовой пояс браузера будет изменен на UTC+00:00. Вы можете задать произвольное значение с помощью модуля 'Часовой пояс'."},"Change group name and description.":{"ru":"Изменить имя и описание группы."},"Change group, which was created last with this script.":{"ru":"Изменить группу созданную последней на протяжении работы этого скрипта."},"Change image format: png, jpeg.":{"ru":"Изменить формат изображения: png, jpeg."},"Change image width and height.":{"ru":"Изменить ширину и высоту изображения."},"Change list item at specific position.":{"ru":"Изменить элемент списка по указанному индексу."},"Change the activation status for the specified number.":{"ru":"Изменение статуса активации для указанного номера."},"Change the format of the selected JSON string or object and return the result to the variable.":{"ru":"Изменить формат выбранной JSON строки или объекта и сохранить результат в переменную."},"Change the items of the specified URL.":{"ru":"Изменить элементы указанной URL."},"Change the timezone of an existing date.":{"ru":"Изменить часовой пояс существующей даты."},"Char number":{"ru":"Символы в числе"},"Characters":{"ru":"Символы"},"Characters to be trimmed at the edges of the string.":{"ru":"Символы, обрезаемые с краев строки."},"Characters which needs to be removed.":{"ru":"Символы, которые нужно удалять."},"Characters which needs to be replaced with a space.":{"ru":"Символы, которые нужно заменить на пробел."},"Chars":{"ru":"Символы"},"Chat":{"ru":"Чат"},"Chat id":{"ru":"Id чата"},"Check PROCESS_STANDART_OUTPUT and PROCESS_ERROR_OUTPUT variables to get execution results, you may want to use regular expressions to extract values from them.":{"ru":"Результат будет записан в переменные PROCESS_STANDART_OUTPUT и PROCESS_ERROR_OUTPUT, можно использовать регулярные выражения для извлечения значений из этих переменных."},"Check every 10 seconds":{"ru":"Проверять каждые 10 секунд"},"Check every 2 seconds":{"ru":"Проверять каждые 2 секунды"},"Check every 5 seconds":{"ru":"Проверять каждые 5 секунд"},"Check if a string contains a substring.":{"ru":"Проверить, содержит ли строка подстроку."},"Check if a string ends with a specified substring.":{"ru":"Проверить, заканчивается ли строка указанной подстрокой."},"Check if the list contains a specific value.":{"ru":"Проверить содержит ли список определенное значение."},"Check if the script is executed in record mode.":{"ru":"Проверить, выполняется ли скрипт в режиме записи."},"Check if the specified data is a string.":{"ru":"Проверить, являются ли указанные данные строкой."},"Check if the specified data is not an empty string.":{"ru":"Проверить, являются ли указанные данные не пустой строкой."},"Check if the specified path is absolute.":{"ru":"Проверить, являются ли указанный путь абсолютным."},"Check if the string starts with the specified substring.":{"ru":"Проверить, начинается ли строка с указанной подстроки."},"Check that selected variable is valid JSON string and return the result to a variable.":{"ru":"Проверить, что выбранная переменная является допустимой строкой JSON и сохранить результат в переменную."},"Checksum for two identical":{"ru":"Контрольная сумма для двух одинаковых"},"Checksum is the value obtained as a result of data processing by a hash function, this function works according to a certain set of rules named an algorithm.":{"ru":"Контрольная сумма - это значение, полученное в результате обработки данных хэш-функцией, эта функция работает в соответствии с определенным набором правил, называемым алгоритмом."},"Chile":{"ru":"Чили"},"China":{"ru":"Китай"},"Choose a way, how you want to move record.":{"ru":"Выберите способ, каким вы хотите переместить запись."},"Choose if all rows from selected group will be deleted with group.":{"ru":"Выберите, будут ли все строки из выбранной группы удалены вместе с группой."},"Chrome browser has Sensor API, which allows to read data from devices like accelerometer, gyroscope or others. Data from that devices is available only on mobile platforms. After checking this setting data for that devices will be generated and replaced automatically. Enable this option in order to emulate mobile fingerprints more precisely.":{"ru":"Chrome поддерживает считывание данных из датчиков устройства, таких как акселерометр, гироскоп или другие. Данные с этих устройств доступны только на мобильных платформах. После установки данной настройки, данные для этих устройств будут сгенерированы и заменены автоматически. Включите эту опцию для более точной эмуляции мобильных отпечатков."},"City":{"ru":"Город"},"Clean string from unnecessary characters.":{"ru":"Очистить строку от ненужных символов."},"Clear old query string":{"ru":"Очистить старую строку запроса"},"Clear query":{"ru":"Очистить строку запроса"},"Click coordinates":{"ru":"Координаты для клика"},"Clickable elements":{"ru":"Кликабельные элементы"},"Clipboard is global to whole system and should be locked in multithreaded mode.":{"ru":"Буфер обмена является глобальным для всей системы и должен быть заблокирован перед использованием в многопоточном режиме."},"Close image with specified id and release used memory.":{"ru":"Закрыть изображение с указанным идентификатором и освободить использованную память."},"Close the connection to mail service.":{"ru":"Закрыть соединение с почтовым сервисом."},"Close thread after function finish":{"ru":"Остановить поток после завершения функции"},"Close thread after function will finish":{"ru":"Остановить поток после завершения функции"},"Code":{"ru":"Код"},"Colombia":{"ru":"Колумбия"},"Color Blue":{"ru":"Цвет синий"},"Color Green":{"ru":"Цвет зеленый"},"Color Red":{"ru":"Цвет красный"},"Color Transparency":{"ru":"Цвет прозрачный"},"Column for sorting":{"ru":"Колонка базы данных, по которой будет проводиться сортировка."},"Command":{"ru":"Комманда"},"Command line":{"ru":"Аргументы командной строки"},"Comoros":{"ru":"Коморы"},"Compare the two specified lists item by item. Returns true if both lists contain same values, even if they are situated in different order.":{"ru":"Сравнить два указанных списка поэлементно. Действие возвращает true, если оба списка содержат одинаковые значения, даже если они расположены в разном порядке."},"Compiled scripts are always executed in run mode.":{"ru":"Скомпилированные скрипты всегда выполняются в режиме запуска."},"Complete action with fail if an invalid URL is specified":{"ru":"Завершить действие ошибкой, если указан недействительный URL"},"Complete activation.":{"ru":"Завершить активацию."},"Configure SMTP server access required to send email.":{"ru":"Настроить доступ к SMTP серверу для отправки электронной почты."},"Configure access to the mail server to read email.":{"ru":"Настроить доступ к почтовому серверу для чтения электронной почты."},"Congo":{"ru":"Конго"},"Congo, Democratic Republic of the":{"ru":"Конго, Демократическая Республика"},"Connect timeout":{"ru":"Таймаут подключения"},"Connection timeout":{"ru":"Таймаут подключения"},"Connection timeout (seconds)":{"ru":"Таймаут подключения (секунд)"},"Consider an example. Suppose we got a line of the form <span style=\"color:black\">{\"Kate\":{\"rating\":5,\"count\":6},\"John\":{\"rating\":1,\"count\":2}}<\/span> from a particular site. We want to get the names of people whose rating is greater than or equal to 1. This can easily be done using a query like <span style=\"color:black\">$.[?(@.rating &gt;= 1)]<\/span>. Thus, as a result, we get a first name satisfying our request.":{"ru":"Рассмотрим пример. Допустим, мы получили от определенного сайта строку вида <span style=\"color:black\">{\"Kate\":{\"rating\":5,\"count\":6},\"John\":{\"rating\":1,\"count\":2}}<\/span>. Мы хотим получить имена людей, у которых рейтинг (rating) больше или равен 1. Это легко можно сделать с помощью запроса вида <span style=\"color:black\">$.[?(@.rating &gt;= 1)]<\/span>. Таким образом, в результате мы получим первое имя, удовлетворяющее нашему запросу."},"Consider an example. Suppose we got a line of the form <span style=\"color:black\">{\"Kate\":{\"rating\":5,\"count\":6},\"John\":{\"rating\":1,\"count\":2}}<\/span> from a particular site. We want to get the names of people whose rating is greater than or equal to 1. This can easily be done using a query like <span style=\"color:black\">$.[?(@.rating &gt;= 1)]<\/span>. Thus, as a result, we get a list of names satisfying our request.":{"ru":"Рассмотрим пример. Допустим, мы получили от определенного сайта строку вида <span style=\"color:black\">{\"Kate\":{\"rating\":5,\"count\":6},\"John\":{\"rating\":1,\"count\":2}}<\/span>. Мы хотим получить имена людей, у которых рейтинг (rating) больше или равен 1. Это легко можно сделать с помощью запроса вида <span style=\"color:black\">$.[?(@.rating &gt;= 1)]<\/span>. Таким образом, в результате мы получим список имён, удовлетворяющих нашему запросу."},"Consider an example. Suppose we got a line of the form <span style=\"color:black\">{\"age\":100, \"name\":\"John\", \"messages\": [\"m1\", \"m2\", \"m3\"]}<\/span> from a particular site. In a normal situation, we will have to write code to get, for example, the first message - <span style=\"color:black\">m1<\/span>. With JSONPath, we can simply specify the desired path - <span style=\"color:black\">$.messages[0]<\/span> and get what we needed as a result. If we briefly describe what exactly such a request means, we get the following: we take the root element using the <span style=\"color:black\">$<\/span> symbol, access the child element <span style=\"color:black\">messages<\/span> through the dot symbol, and indicate the index of the element we need.":{"ru":"Рассмотрим пример. Допустим, мы получили от определенного сайта строку вида <span style=\"color:black\">{\"age\":100, \"name\":\"John\", \"messages\": [\"m1\", \"m2\", \"m3\"]}<\/span>. В обычной ситуации, нам придётся писать код, чтобы получить, например, первое сообщение - <span style=\"color:black\">m1<\/span>. С помощью JSONPath мы можем просто указать нужный путь - <span style=\"color:black\">$.messages[0]<\/span> и получить в результате то, что нам было необходимо. Если кратко описать, что именно значит такой запрос, то получится следующее: берём корневой элемент с помощью символа <span style=\"color:black\">$<\/span>, обращаемся к дочернему элементу <span style=\"color:black\">messages<\/span> через символ точки, и указываем индекс нужного нам элемента."},"Consider an example. Suppose we got a line of the form <span style=\"color:black\">{\"age\":100, \"name\":\"John\", \"messages\": [\"m1\", \"m2\", \"m3\"]}<\/span> from a particular site. We need to find out how many new messages came from the user. With JSONPath, we can simply specify the desired path - <span style=\"color:black\">$.messages[*]<\/span> and get the exact number of incoming messages.":{"ru":"Рассмотрим пример. Допустим, мы получили от определенного сайта строку вида <span style=\"color:black\">{\"age\":100, \"name\":\"John\", \"messages\": [\"m1\", \"m2\", \"m3\"]}<\/span>. Мы хотим узнать, сколько новых сообщений было получено от пользователя. С помощью JSONPath мы можем просто указать нужный путь - <span style=\"color:black\">$.messages[*]<\/span> и получить точное число входящих сообщений."},"Contains":{"ru":"Содержит"},"Contiguous sequence of characters within a string.":{"ru":"Непустая связная часть строки."},"Convert":{"ru":"Конвертировать"},"Convert all letters of the string to lowercase.":{"ru":"Преобразовать все буквы строки в нижний регистр."},"Convert all letters of the string to uppercase.":{"ru":"Преобразовать все буквы строки в верхний регистр."},"Convert all letters to Latin.":{"ru":"Преобразуйте все буквы в латиницу."},"Convert date and time to string using a specified format.":{"ru":"Преобразовать дату и время в строку используя заданный формат."},"Convert date to number of milliseconds since epoch.":{"ru":"Преобразовать дату в количество миллисекунд с начала эпохи."},"Convert number of milliseconds since epoch start to date.":{"ru":"Преобразовать количество миллисекунд с начала эпохи в дату."},"Convert the first letter of a word to uppercase.":{"ru":"Преобразовать первую букву слова в верхний регистр."},"Convert the selected JSON object to a string and return the result to a variable.":{"ru":"Конвертировать выбранный JSON объект в строку и сохранить результат в переменную."},"Convert the selected string to a JSON object and return the result to a variable.":{"ru":"Конвертировать выбранную строку в JSON объект и сохранить результат в переменную."},"Convert the specified data to a string.":{"ru":"Преобразовать указанные данные в строку."},"Convert the specified string to a number.":{"ru":"Преобразовать указанную строку в число."},"Convert the string to date and time using a specific format.":{"ru":"Преобразовать строку в дату и время используя заданный формат."},"Convert types":{"ru":"Преобразовывать типы"},"Copy file or folder to a new location.":{"ru":"Скопировать файл или папку в новое место."},"Copy group, which was created last with this script.":{"ru":"Скопировать группу созданную последней на протяжении работы этого скрипта."},"Copy resource data into list.":{"ru":"Скопировать данные из ресурса в список."},"Copy the specified message from one mailbox folder to another.":{"ru":"Скопировать указанное письмо из одной папки почтового ящика в другую."},"Copy your current profile to other folder.":{"ru":"Копировать текущий профиль в другую папку."},"Correct workflow to get async function result may look like":{"ru":"Пример получения результата асинхронной функции может выглядеть вот"},"Correct workflow to wait for several functions may look like":{"ru":"Пример ожидания нескольких функций может выглядеть вот"},"Costa Rica":{"ru":"Коста-Рика"},"Cote d'Ivoire":{"ru":"Кот д'Ивуар"},"Country":{"ru":"Страна"},"Country abbreviation":{"ru":"Aббревиатура страны"},"Country of the number.":{"ru":"Страна номера."},"Create CSV string from multiple items.":{"ru":"Создать CSV строку из нескольких элементов."},"Create Resource":{"ru":"Создать ресурс"},"Create a new date and time object using the specified parameters.":{"ru":"Создать новый объект даты и времени, используя указанные параметры."},"Create a new folder at the specified path.":{"ru":"Создать новую папку по указанному пути."},"Create a new list with initial values ​​(optional).":{"ru":"Создать новый список с начальными значениями (опционально)."},"Create a new mailbox folder.":{"ru":"Создать новую папку почтового ящика."},"Create a new object with initial values (optional).":{"ru":"Создать новый объект с начальными значениями (опционально)."},"Create a string containing a line break symbol.":{"ru":"Создать строку, содержащую символ переноса строки."},"Create an empty image using the specified options.":{"ru":"Создать пустое изображение используя указанные параметры."},"Create new online profile":{"ru":"Создать новый онлайн профиль"},"Create new resource.":{"ru":"Создать новый ресурс."},"Create new variable or update existing with multiline text. Can expand resources, variables, spintax, may be used to load template from file or dynamically generate it. This action suites best if you want to generate post text.":{"ru":"Создать новую переменную или изменить существующую на многострочный текст. Может заменять спинтакс, ресурсы, переменные на их значения. Действие может использоваться для загрузки шаблона из файла или его динамической генерации. Оно лучше всего подходит, если нужно генерировать текст для постинга."},"Create subfolder bar in folder foo":{"ru":"Создать подпапку bar в папке foo"},"Croatia":{"ru":"Хорватия"},"Crop the image using specific coordinates and size.":{"ru":"Обрезать изображение используя конкретные координаты и размер."},"Cuba":{"ru":"Куба"},"Current action is deprecated. Instead it is recommended to use <a href=\"#!\/browsersettings\">Browser Settings<\/a> with \"Profile folder path\" param set to \"temporary\" value. With the help of it, you can change all settings that require a browser restart at once.":{"ru":"Текущее действие устарело. Вместо него рекомендуется использовать <a href=\"#!\/browsersettings\">Настройки Браузера<\/a> с параметром \"Путь к папке профиля\" установленным в специальное значение \"temporary\". С помощью него вы можете одновременно изменить все настройки, которые требуют перезагрузки браузера."},"Current action is deprecated. Instead it is recommended to use <a href=\"#!\/browsersettings\">Browser Settings<\/a> with \"Profile folder path\" param. With the help of it, you can change all settings that require a browser restart at once.":{"ru":"Текущее действие устарело. Вместо него рекомендуется использовать <a href=\"#!\/browsersettings\">Настройки Браузера<\/a> с параметром \"Путь к папке профиля\". С помощью него вы можете одновременно изменить все настройки, которые требуют перезагрузки браузера."},"Current date":{"ru":"Текущая дата"},"Current line is line which was acquired last by current thread. For example, if you have resource 'Proxy' and that proxy appears banned on target site, then you can use this action with resource name 'Proxy'. Doing that will delete proxy from file and will never use that proxy again during whole script run.":{"ru":"Текущая строка - это строка, которая была получена последней в текущем потоке. Например, если у вас есть ресурс 'Прокси', и этот прокси забанен на целевом сайте, вы можете использовать это действие с именем ресурса 'Прокси'. Это приведет к удалению прокси из файла и он никогда больше не будет использоваться на протяжении всей работы скрипта."},"Cursor movement to random coordinates.":{"ru":"Движение курсора к случайным координатам"},"Custom country":{"ru":"Пользовательская страна"},"Custom servers":{"ru":"Пользовательские серверы"},"Custom site":{"ru":"Пользовательский сайт"},"Custom value of the country, in the form in which it is perceived by the SMS receiving service. If this parameter is specified, then it will be used instead of the \"Country\" parameter and sent to the service without preliminary processing.":{"ru":"Пользовательское значение страны, в том виде в котором его воспринимает сервис приема SMS. Если этот параметр указан, то он будет использован вместо параметра \"Страна\" и отправлен на сервис без предварительной обработки."},"Custom value of the site, in the form in which it is perceived by the SMS receiving service. If this parameter is specified, then it will be used instead of the \"Site\" parameter and sent to the service without preliminary processing.":{"ru":"Пользовательское значение сайта, в том виде в котором его воспринимает сервис приема SMS. Если этот параметр указан, то он будет использован вместо параметра \"Сайт\" и отправлен на сервис без предварительной обработки."},"Cyprus":{"ru":"Кипр"},"Cyrillic":{"ru":"Кириллица"},"Czech Republic":{"ru":"Чешская Республика"},"DST Offset":{"ru":"DST Смещение"},"Data":{"ru":"Данные"},"Data Is In Base64 Format":{"ru":"Данные представлены в формате base64"},"Data format":{"ru":"Формат данных"},"Data to add":{"ru":"Данные для добавления"},"Database table":{"ru":"Таблица базы данных"},"Date":{"ru":"Дата"},"Date can be created using actions from the \"Date and time\" module.":{"ru":"Дату можно создать с помощью действий из модуля \"Дата и время\"."},"Date from":{"ru":"Дата от"},"Date to":{"ru":"Дата до"},"DateTime format":{"ru":"Формат даты и времени"},"DateTime formatting":{"ru":"Форматирование даты и времени"},"DateTime or string":{"ru":"Дата и время либо строка"},"DateTime string":{"ru":"Строка с датой и временем"},"Day of month. From 1 to 31.":{"ru":"День месяца. От 1 до 31."},"Day of week. From 1 to 7.":{"ru":"День недели. От 1 до 7."},"Day of year. From 1 to 366.":{"ru":"День года. От 1 до 366."},"Day. From 1 to 31":{"ru":"День. От 1 до 31"},"Days to add. Can be negative.":{"ru":"Прибавить дней. Может быть отрицательным."},"Deactivated":{"ru":"Деактивирован"},"Decimal number":{"ru":"Символы в дроби"},"Decimal separator":{"ru":"Разделитель целой и дробной части"},"Decline a word depending on the specified number.":{"ru":"Склонять слово в зависимости от указанного числа."},"Decreasing DateTime or string":{"ru":"Уменьшаемая дата и время либо строка"},"Default folder incoming messages":{"ru":"Папка по умолчанию для входящих писем"},"Default length for the selected algorithm":{"ru":"Длина по умолчанию для выбранного алгоритма"},"Default port for imap protocol with SSL encryption":{"ru":"Порт по умолчанию для протокола imap с SSL шифрованием"},"Default port for imap protocol without encryption or with STARTTLS encryption":{"ru":"Порт по умолчанию для протокола imap без шифрования или с STARTTLS шифрованием"},"Default port for pop3 protocol with SSL encryption":{"ru":"Порт по умолчанию для протокола pop3 с SSL шифрованием"},"Default port for pop3 protocol without encryption or with STARTTLS encryption":{"ru":"Порт по умолчанию для протокола pop3 без шифрования или с STARTTLS шифрованием"},"Default protocol":{"ru":"Протокол по умолчанию"},"Default value, do replacement only if interval is less than 100 milliseconds.":{"ru":"Значение по умолчанию, делать замену только если интервал между измерениями меньше 100 миллисекунд."},"Default values must work fine and can be used without changes.":{"ru":"Значения по умолчанию должны давать хорошие результаты и могут быть использованы без изменений."},"Default, allow high precision.":{"ru":"Значение по умолчанию, разрешить высокую точность."},"Default. When thread has no work to do, it will wait to new function call.":{"ru":"Значение по умолчанию. Когда поток находится в состоянии бездействия, он будет ждать вызова новой функции."},"Delay before click":{"ru":"Задержка перед кликом"},"Delay before hover":{"ru":"Задержка перед наведением"},"Delay chance":{"ru":"Шанс задержки"},"Delay click":{"ru":"Отложенный клик"},"Delete Current Element":{"ru":"Удалить текущий элемент"},"Delete data from group":{"ru":"Удалить данные из группы"},"Delete from file\/database instantly":{"ru":"Удалить из файла\/базы мгновенно"},"Delete group from database.":{"ru":"Удалить группу из базы данных."},"Delete group with data":{"ru":"Удалить данные вместе с группой"},"Delete group without data":{"ru":"Удалить только группу, без данных"},"Delete information about the number when the status is -1, 6 or 8.":{"ru":"Удалять информацию о номере при статусе -1, 6 или 8."},"Delete last record obtained as resource.":{"ru":"Удалить последнюю запись полученную как ресурс"},"Delete message after receiving":{"ru":"Удалить письмо после получения"},"Delete record from database.":{"ru":"Удалить запись из базы данных."},"Delete record from resources and from database":{"ru":"Удалить запись из ресурса и из базы данных"},"Delete record only from database":{"ru":"Удалить запись только из базы данных"},"Delete records from database.":{"ru":"Удалить записи из базы данных."},"Delete records from resources and from database":{"ru":"Удалить записи и из ресурса и из базы данных"},"Delete records only from database":{"ru":"Удалить записи только из базы данных"},"Delete resource":{"ru":"Удалять из ресурсов"},"Delete resource. If resource type is 'LinesFromFile', current line will be deleted from file, if type is 'Database', current record will be deleted from database, etc.":{"ru":"Удалить ресурс. Если тип ресурса - 'Из файла', текущая строка будет удалена из файла, если тип ресурса 'База', текущая запись будет удалена из базы данных и т. д."},"Delete subfolder bar from foo folder":{"ru":"Удалить подпапку bar из папки foo"},"Delete the specified mailbox folder.":{"ru":"Удалить указанную папку почтового ящика."},"Delete the specified message.":{"ru":"Удалить указанное письмо."},"Deletes current profile":{"ru":"Удалить текущий профиль"},"Denmark":{"ru":"Дания"},"Depending on mode data parameter is base64 encoded string which needs to be decoded, or ordinary string which needs to be encoded.":{"ru":"В зависимости от режима, входным параметром будет либо строка с кодировкой base64, которая должна быть декодирована, либо обычная строка, которая должна быть закодирована."},"Depending on mode data parameter is encoded punycode string which needs to be decoded, or ordinary string which must be encoded.":{"ru":"В зависимости от режима, входным параметром будет либо закодированая punycode строка, которая должна быть декодирована, либо обычная строка, которая должна быть закодирована."},"Depending on mode data parameter is encoded string which needs to be decoded, or ordinary string containing special HTML characters that must be encoded.":{"ru":"В зависимости от режима, входным параметром будет либо закодированая строка, которая должна быть декодирована, либо обычная строка содержащая специальные HTML символы, которые должны быть закодированы."},"Depending on mode data parameter is encoded string which needs to be decoded, or ordinary string containing the Url component which needs to be encoded.":{"ru":"В зависимости от режима, входным параметром будет либо закодированая строка, которая должна быть декодирована, либо обычная строка содержащая Url компонент, которая должна быть закодирована."},"Depending on the mail service, the connection may be available only via imap or only via pop3, or it may not be available at all via these protocols.":{"ru":"В зависимости от почтового сервиса подключение может быть доступно только по imap или только по pop3, а может быть вообще недоступно по этим протоколам."},"Depending on the service, receiving a repeated SMS code may be paid, unavailable or limited in number, information about this should be found in the description of the service or its API.":{"ru":"В зависимости от сервиса получение повторного SMS кода может быть платным, недоступным или ограниченным по количеству, информацию об этом нужно узнавать в описании сервиса или его API."},"Depends on the service used, maybe the last used country or some specific country, you can find out more in the description of the API of the service.":{"ru":"Зависит от используемого сервиса, может быть последняя используемая страна или какая-то определенная страна, подробнее вы можете узнать в описании API сервиса."},"Description":{"ru":"Описание"},"Desired thread id":{"ru":"Желаемый ID потока"},"Detailed documentation for solving such captchas can be found <a href=\"#\" class=\"tr\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/2captcha.com\/2captcha-api#coordinates');return false\">here<\/a>.":{"ru":"Подробную документацию по решению подобных капч можно посмотреть <a href=\"#\" class=\"tr\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/rucaptcha.com\/api-rucaptcha#solving_clickcaptcha');return false\">здесь<\/a>."},"Developer can attach message when giving control to user in order to make him understand, what is a purpose of manual control and what he need to accomplish. Message can contain custom data like variables or resources.":{"ru":"Разработчик может прикрепить сообщение при предоставлении пользователю контроля, чтобы он понял, какие действия ему нужно выполнить. Сообщение может содержать переменные или ресурсы."},"Device model":{"ru":"Модель устройства"},"Device type":{"ru":"Тип устройства"},"Device vendor":{"ru":"Производитель устройства"},"Directory":{"ru":"Директория"},"Directory Name":{"ru":"Имя Папки"},"Directory indexes that match any of the specified list items will be removed.":{"ru":"Индексы каталога, которые соответствуют любому из указанных элементов списка, будут удалены."},"Disable debug":{"ru":"Отключить отладку"},"Disable delay":{"ru":"Отключить задержку"},"Disable emulation":{"ru":"Отключить эмуляцию"},"Disable high precision.":{"ru":"Отключить высокую точность."},"Disable idle emulation previously enabled by \"Enable automatic idle emulation\" action.":{"ru":"Отключить эмуляцию бездействия ранее включенную с помощью \"Включить автоматическую эмуляцию бездействия\"."},"Disable logs, fingerprint will be obtained without any messages.":{"ru":"Отключить логи, отпечаток будет получен без каких-либо сообщений."},"Disable misses":{"ru":"Отключить промахи"},"Disable performance precision":{"ru":"Отключить высокую точность замеров"},"Disable precision":{"ru":"Отключить точность"},"Disable reverse scrolling":{"ru":"Отключить обратную прокрутку"},"Disable scrolling to target":{"ru":"Отключить прокрутку к цели"},"Disable warnings":{"ru":"Отключить предупреждения"},"Display message, it will be available in PROCESS_STANDART_OUTPUT variable.":{"ru":"Отобразите сообщение, оно будет доступно в переменной PROCESS_STANDART_OUTPUT."},"Display warnings about incorrect configuration":{"ru":"Отображать предупреждения о некорректной настройке"},"Distribution":{"ru":"Распределение"},"Djibouti":{"ru":"Джибути"},"Do not change this item in the specified URL":{"ru":"Не изменять этот элемент в указанном URL"},"Do not filter by missing flags":{"ru":"Не фильтровать по отсутствию флагов"},"Do not filter by the presence of flags":{"ru":"Не фильтровать по наличию флагов"},"Do not round the number":{"ru":"Не округлять число"},"Do replacement only if interval is less than 100 milliseconds":{"ru":"Делать замену только если интервал меньше 100 миллисекунд"},"Do replacement only if interval is less than 30 milliseconds":{"ru":"Делать замену только если интервал меньше 30 миллисекунд"},"Does not contain":{"ru":"Не содержит"},"Doesn't filter on added date":{"ru":"Не фильтровать по дате добавления"},"Doesn't filter on browser height":{"ru":"Не фильтровать по высоте браузера"},"Doesn't filter on browser version":{"ru":"Не фильтровать по версии браузера"},"Doesn't filter on browser width":{"ru":"Не фильтровать по ширине браузера"},"Dominica":{"ru":"Доминика"},"Dominican Republic":{"ru":"Доминиканская Республика"},"Don't add offset to found id":{"ru":"Не добавлять смещение найденным id"},"Don't add this item to the final URL":{"ru":"Не добавлять этот элемент в итоговый URL"},"Don't change the number of characters":{"ru":"Не изменять количество символов"},"Don't close thread. Next function can be called in this thread. Use 'Desired thread id' to start new function in same thread.":{"ru":"Не останавливать поток. Следующая функция может быть вызвана в этом потоке. Используйте параметр 'Желаемый ID потока', чтобы указать поток для запуска."},"Don't close thread<br\/>Next function can be called in this thread":{"ru":"Не останавливать поток<br\/>Следующая функция может запущена в этом потоке"},"Don't delete message after receiving":{"ru":"Не удалять письмо после получения"},"Don't display warnings":{"ru":"Не отображать предупреждения"},"Don't extract links from message body":{"ru":"Не извлекать ссылки из тела письма"},"Don't filter by \"Does not contain\" field in recipient":{"ru":"Не фильтровать по полю \"Не содержит\" в получателе"},"Don't filter by \"Does not contain\" field in sender":{"ru":"Не фильтровать по полю \"Не содержит\" в отправителе"},"Don't filter by \"Does not contain\" field in subject":{"ru":"Не фильтровать по полю \"Не содержит\" в теме"},"Don't filter by \"Does not contain\" field in text":{"ru":"Не фильтровать по полю \"Не содержит\" в тексте"},"Don't filter by content in recipient":{"ru":"Не фильтровать по содержанию в получателе"},"Don't filter by content in sender":{"ru":"Не фильтровать по содержанию в отправителе"},"Don't filter by content in subject":{"ru":"Не фильтровать по содержанию в теме"},"Don't filter by content in text":{"ru":"Не фильтровать по содержанию в тексте"},"Don't filter elements":{"ru":"Не фильтровать элементы"},"Don't get list of file attachment names of the message from server":{"ru":"Не получать список имён вложенных файлов письма с сервера"},"Don't get message attachments from server":{"ru":"Не получать вложения письма с сервера"},"Don't get message body (raw) from server":{"ru":"Не получать тело письма (raw) с сервера"},"Don't get message body (text\/html) from server":{"ru":"Не получать тело письма (text\/html) с сервера"},"Don't get message body (text\/plain) from server":{"ru":"Не получать тело письма (text\/plain) с сервера"},"Don't get message date from server":{"ru":"Не получать дату письма с сервера"},"Don't get message flags from server":{"ru":"Не получать флаги письма с сервера"},"Don't get message recipient from server":{"ru":"Не получать получателя письма с сервера"},"Don't get message sender from server":{"ru":"Не получать отправителя письма с сервера"},"Don't get message size from server":{"ru":"Не получать размер письма с сервера"},"Don't get message subject from server":{"ru":"Не получать тему письма с сервера"},"Don't get message technical headers from server":{"ru":"Не получать технические заголовки письма с сервера"},"Don't insert a substring":{"ru":"Не вставить подстроку"},"Don't limit the number of items on the resulting list.":{"ru":"Не ограничивайте количество элементов в итоговом списке."},"Don't limit the number of results":{"ru":"Не ограничивать количество результатов"},"Don't perform":{"ru":"Не выполнять"},"Don't remove characters":{"ru":"Не удалять символы"},"Don't remove directory index":{"ru":"Не удалять индекс каталога"},"Don't remove file extension":{"ru":"Не удалять расширение файла"},"Don't remove query parameters":{"ru":"Не удалять параметры запроса"},"Don't save message id":{"ru":"Не сохранять id письма"},"Don't set latitude":{"ru":"Не устанавливать широту"},"Don't set longitude":{"ru":"Не устанавливать долготу"},"Don't set message flags after receiving":{"ru":"Не устанавливать флаги письма после получения"},"Don't set timezone UTC offset":{"ru":"Не устанавливать смещение относительно UTC"},"Don't set timezone name":{"ru":"Не задавать название часового пояса"},"Don't wait message":{"ru":"Не ждать письмо"},"Don't wait messages":{"ru":"Не ждать письма"},"Dst Offset":{"ru":"Смещение летнего времени"},"Duplicate group name, description and data.":{"ru":"Дублировать имя, описание и данные группы."},"Duplicated group will have same name and description as original, but you can change it later with \"Change Group\" action.":{"ru":"Скопированная группа будет иметь то же имя и описание, что и оригинал, но вы можете изменить ее позже с помощью действия \"Изменить группу\"."},"During emulation, page scrolling, mouse cursor movement, and sleep may occur, but not clicks.":{"ru":"Во время эмуляции могут происходить прокрутка страницы, перемещение курсора мыши и сон, но не клики."},"During idle user can scroll and move mouse, but no clicks are performed.":{"ru":"Во время бездействия страница может быть прокручена и курсор мыши может перемещаться, но клики не выполняются."},"Each BAS version may be shipped with one or several browser versions. You can change browser version for current thread, in order to do that use \"Browser Settings\" action with \"Browser Version\" parameter. After browser version for current thread will be changed, using special word \"current\" will select fingerprints of changed version.":{"ru":"Каждая версия BAS поставляется с одной или несколькими версиями браузера. Вы можете изменить версию браузера для текущего потока, для этого используйте действие \"Настройки браузера\" с параметром \"Версия браузера\". После того, как версия браузера для текущего потока будет изменена, при использовании специального слова \"current\" будут выбраны отпечатки измененной версии."},"Each byte is encoded as 16-bit number converted to 2-byte string from <code style=\"font-size:85%\">00<\/code> to <code style=\"font-size:85%\">ff<\/code>. Example: <code style=\"font-size:85%\">5d41402abc4b2a76b9719d911017c592<\/code>":{"ru":"Каждый байт кодируется как 16-битное число, преобразованное в 2-байтовую строку от <code style=\"font-size:85%\">00<\/code> до <code style=\"font-size:85%\">ff<\/code>. Пример: <code style=\"font-size:85%\">5d41402abc4b2a76b9719d911017c592<\/code>"},"Each interval appearance is randomized. So you'll get completely different behavior each time the action is called.":{"ru":"Каждый раз появление интервала выбирается случайным образом. Это означает, что вы будете получать разные результаты каждый раз, когда запускаете это действие."},"Each resource holds container for data, for example, lines from file. Unlike lists, resource system helps to distribute data across threads and also handles thread concurrency for that data.":{"ru":"Каждый ресурс содержит контейнер с данными, например, строки из файла. В отличие от списков, система ресурсов помогает распределять данные по потокам, а также обрабатывает различные ситуации, которые возникают при одновременном использовании данных в многопоточном режиме."},"Each result list item will contain whole match, if you want to capture only part, put it in the group with name":{"ru":"Каждый элемент списка, который возвращает это действие, содержит совпадение целиком, если вы хотите получить только часть, поместите его внутрь группы"},"Ecuador":{"ru":"Эквадор"},"Egypt":{"ru":"Египет"},"El Salvador":{"ru":"Эль-Сальвадор"},"Element selection mode":{"ru":"Режим выбора элемента"},"Email confirmation":{"ru":"Подтверждение почты"},"Empty list":{"ru":"Пустой список"},"Empty string":{"ru":"Пустая строка"},"Empty string or not string.":{"ru":"Пустая строка или не строка."},"Empty value can be used here, in that case free version of FingerprintSwitcher will be used for this thread.":{"ru":"Здесь можно использовать пустое значение, в этом случае для текущего потока будет использована бесплатная версия FingerprintSwitcher."},"Emulate Sensor API":{"ru":"Эмуляция датчиков устройства"},"Emulate browsing of the current web page.":{"ru":"Эмулировать просмотр текущей страницы."},"Emulate device scale factor":{"ru":"Эмулировать масштаб устройства"},"Emulation time":{"ru":"Время эмуляции"},"Enable WebRTC, replace ip exposed by WebRTC with specified ip.":{"ru":"Включить WebRTC, заменить ip, возвращаемый WebRTC на заданный ip."},"Enable debug":{"ru":"Включить отладку"},"Enable debugging mode for sending emails.":{"ru":"Включить режим отладки для отправки электронной почты."},"Enable flash if fingerprint has it enabled and disable otherwise.":{"ru":"Включить флэш, если он содержится в отпечатке или отключить в противном случае."},"Enable idle emulation before actions which works with browser elements like clicking or typing text.":{"ru":"Включить эмуляцию бездействия перед действиями, которые работают с элементами браузера, такими как клик или ввод текста."},"Enable idle emulation module debug.":{"ru":"Включить отладку модуля эмуляции бездействия."},"Enable mail receiving module debug.":{"ru":"Включите отладку модуля приема почты."},"Enable or disable idle emulation debugging.":{"ru":"Включить или отключить отладку эмуляции бездействия."},"Enable or disable mail receiving module debug.":{"ru":"Включить или отключить отладку модуля приема почты."},"Enable or disable phone verification module debug.":{"ru":"Включить или отключить отладку модуля подтверждения телефона."},"Enable phone verification module debug.":{"ru":"Включить отладку модуля подтверждения телефона."},"Enable precomputed fingerprints with PerfectCanvas":{"ru":"Включить предварительное вычисление PerfectCanvas"},"Encoded string. Works with decode mode":{"ru":"Закодированная строка. Работает в режиме decode"},"Encodes or decodes base64 string.":{"ru":"Кодирует или декодирует строку в base64."},"Encodes or decodes string containing special HTML characters.":{"ru":"Кодирует или декодирует строку содержащую специальные HTML символы."},"Encodes or decodes string containing the Url component.":{"ru":"Кодирует или декодирует строку содержащую Url компонент."},"Encodes or decodes string to punycode.":{"ru":"Кодирует или декодирует строку в punycode."},"Encryption":{"ru":"Шифрование"},"Encryption type of connection to the mail server.":{"ru":"Тип шифрования соединения с почтовым сервером."},"End":{"ru":"Конец"},"End Index":{"ru":"Конечный Индекс"},"End position. Leave 0 to read all file.":{"ru":"Последний байт. Используйте 0, чтобы прочитать весь файл."},"Engine name":{"ru":"Название движка"},"Engine version":{"ru":"Версия движка"},"Entire match":{"ru":"Найденный текст целиком"},"Equatorial Guinea":{"ru":"Экваториальная Гвинея"},"Eritrea":{"ru":"Эритрея"},"Error string":{"ru":"Строка с ошибкой"},"Error string in case if last function call was not successful.":{"ru":"Строка с ошибкой в случае, если последний вызов функции не был успешным."},"Estonia":{"ru":"Эстония"},"Eswatini":{"ru":"Эсватини"},"Ethiopia":{"ru":"Эфиопия"},"Ex 365sms.ru":{"ru":"Бывший 365sms.ru"},"Ex cheapsms.ru":{"ru":"Бывший cheapsms.ru"},"Ex onlinesim.ru":{"ru":"Бывший onlinesim.ru"},"Ex sms-acktiwator.ru":{"ru":"Бывший sms-acktiwator.ru"},"Ex sms-activate.ru":{"ru":"Бывший sms-activate.ru"},"Ex sms.kopeechka.store":{"ru":"Бывший sms.kopeechka.store"},"Ex vak-sms.com":{"ru":"Бывший vak-sms.com"},"Exact autoclose timeout is specified in \"Configure receiving mail\" action.":{"ru":"Точный значение максимального времени ожидания можно задать в действии \"Настроить получение почты\"."},"Exact coordinate, which identifies ip position.":{"ru":"Координаты ip."},"Exact coordinates, which identifies your position. This value will be returned by browser as a response on location request from site.":{"ru":"Точные координаты вашего месторасположения. Это значение будет возвращено браузером в качестве ответа на запрос местоположения от сайта."},"Exact date value":{"ru":"Точное значение даты"},"Example":{"ru":"Пример"},"Example:":{"ru":"Пример:"},"Execute JSONPath query and change object value.":{"ru":"Выполнить запрос JSONPath и изменить значение объекта."},"Execute JSONPath query and get all matching keys.":{"ru":"Выполнить запрос JSONPath и получить все подходящие ключи."},"Execute JSONPath query and get all matching values.":{"ru":"Выполнить запрос JSONPath и получить все подходящие значения."},"Execute JSONPath query and get elements count.":{"ru":"Выполнить запрос JSONPath и получить количество элементов."},"Execute JSONPath query and get one key (first matching).":{"ru":"Выполнить запрос JSONPath и получить один ключ (первый подходящий)."},"Execute JSONPath query and get one value (first matching).":{"ru":"Выполнить запрос JSONPath и получить одно значение (первое подходящее)."},"Execute JSONPath query and remove object value.":{"ru":"Выполнить запрос JSONPath и удалить значение объекта."},"Execute async functions sequentially.":{"ru":"Выполнять асинхронные функции последовательно."},"Execute custom code using NodeJS.":{"ru":"Выполнить пользовательский код используя NodeJS."},"Execute function asynchronously without waiting for its completion.":{"ru":"Выполнить функцию асинхронно не дожидаясь её завершения."},"Execute only page scrolling.":{"ru":"Выполнять только прокрутку страницы."},"Execute page scrolling mixed with sleep and short mouse moves. Sleep will be executed 2 times more often then scroll. Scroll and short mouse moves has same frequencies.":{"ru":"Выполнять прокрутку страницы, сон и движения мыши на коротком состоянии. Сон будет выполняться в 2 раза чаще, чем прокрутка. Прокрутка и короткие движения мыши будут иметь одинаковую частоту появления"},"Execute page scrolling mixed with sleep. Sleep and page scroll types will appear with same frequency":{"ru":"Выполнять прокрутку страницы и сон. И сон и прокрутка будут иметь одинаковую частоту появления"},"Execute page scrolling mixed with sleep. Sleep will be executed 2 times more often then scroll.":{"ru":"Выполнять прокрутку страницы и сон. Сон будет выполняться в 2 раза чаще, чем прокрутка."},"Execute regular expression, get first match and captured groups.":{"ru":"Применить регулярное выражение, получить первый соответствующий ему фрагмент текста, извлечь группы."},"Execute regular expression, replace all matches with target string.":{"ru":"Применить регулярное выражение, заменить все соответствия на целевую строку."},"Execute regular expression, save all matches into variable with list type.":{"ru":"Выполнить регулярное выражение, сохранить все извлеченные строки в список."},"Execution of this action will finish immediately upon invocation even if function execution itself takes significant time.":{"ru":"Выполнение этого действия завершится сразу после его вызова, даже если само выполнение функции занимает значительное время."},"Exists":{"ru":"Существование"},"Extension":{"ru":"Расширение"},"Extract all email addresses from string.":{"ru":"Извлечь все адреса электронной почты из строки."},"Extract all links from string.":{"ru":"Извлечь все ссылки из строки."},"Extract all phone numbers from the string.":{"ru":"Извлечь все телефонные номера из строки."},"Extract link from html a tag":{"ru":"Извлечь ссылку из html тега a"},"Extract links from message body":{"ru":"Извлекать ссылки из тела письма"},"Extract string part with regular expression. For example, string : abc 123 xyz 456, regexp: \\d+ extracts all numbers":{"ru":"Извлечь часть строки с помощью регулярного выражения. Например, строка: abc 123 456 xyz, регулярное выражение: \\d+ извлекает все числа."},"Extract string part with regular expression. For example, string : abc 123 xyz 456, regexp: \\d+ extracts first number":{"ru":"Извлечь часть строки с помощью регулярного выражения. Например, строка: abc 123 456 xyz, регулярное выражение: \\d+ извлекает первое число."},"Fail Usage":{"ru":"Количество неудач"},"Failed to get balance":{"ru":"Не удалось получить баланс"},"Field for sorting":{"ru":"Поле для сортировки"},"Field with type boolean. Could be true or false.":{"ru":"Поле с типом boolean. Может быть true или false."},"Field with type boolean. Could be true or false. Leave it blank to not update that field.":{"ru":"Поле с типом boolean. Может быть true или false. Оставьте это поле пустым чтобы не обновлять его."},"Field with type date. Leave it blank to not update that field. You can set it by filling this field with milliseconds from 1 january 1970":{"ru":"Поле с типом дата. Оставьте это поле пустым чтобы не обновлять его. Вы можете задать его, заполнив целым числом равным количеству миллисекунд с 1 января 1970 года"},"Field with type date. You can set it by filling this field with milliseconds from 1 january 1970, or leave blank to use current date.":{"ru":"Поле с типом дата. Вы можете задать его, заполнив целым числом равным количеству миллисекунд с 1 января 1970 года или оставить поле пустым, чтобы задать текущую дату."},"Field with type integer.":{"ru":"Поле с типом целое число."},"Field with type integer. Leave it blank to not update that field.":{"ru":"Поле с типом целое число. Оставьте это поле пустым чтобы не обновлять его."},"Field with type string.":{"ru":"Поле с типом строка."},"Field with type string. Leave it blank to not update that field. If you want to update this field with empty string, change field type to \"expression\" and fill it with two quotes \"\"":{"ru":"Поле с типом строка. Оставьте это поле пустым чтобы не обновлять его. Если вы хотите изменить значение этого поля на пустую строку, то поменяйте тип на \"expression\" и заполните поле двумя кавычками \"\""},"Fiji":{"ru":"Фиджи"},"File Base Directory":{"ru":"Папка Файла"},"File Data Must Contain. Can Be Blank":{"ru":"Файл Должен Содержать"},"File Exists":{"ru":"Существование Файла"},"File Name":{"ru":"Имя Файла"},"File Size":{"ru":"Размер Файла"},"File extension":{"ru":"Расширение файла"},"File extension to remove":{"ru":"Удаляемое расширение файла"},"File name":{"ru":"Имя файла"},"File name mask":{"ru":"Маска имени файла"},"File path":{"ru":"Путь к файлу"},"File\/Folder Destination":{"ru":"Место Назначения Копирования"},"File\/Folder Name":{"ru":"Имя Файла Или Папки"},"File\/Folder New Location":{"ru":"Новое Расположение Файла Или Папки"},"Filename Mask":{"ru":"Маска Имени Файла"},"Filepath in case of you are using local profile and profile id in case of you are using online profile.":{"ru":"Путь к папке в случае, если вы используете локальный профиль, и идентификатор профиля, если вы используете онлайн профиль."},"Fill the rectangle in the image with a specific color.":{"ru":"Заполнить прямоугольник на изображении определенным цветом."},"Filter by group":{"ru":"Фильтровать по группам"},"Filtering and sorting are only available when connecting via imap, if the action is called when connecting via pop3 and filtering or sorting is active, then the action will immediately fail.":{"ru":"Фильтрация и сортировка доступны только при подключении по imap, если действие вызвано при подключении по pop3 и активна фильтрация или сортировка, то действие будет немедленно завершено ошибкой."},"Filtering and sorting is performed on the side of the mail server.":{"ru":"Фильтрация и сортировка выполняется на стороне почтового сервера."},"Filtering is available only when connecting via imap, if the action is called when connecting via pop3 and filtering is active, then the action will immediately fail.":{"ru":"Фильтрация доступна только при подключении по imap, если действие вызвано при подключении по pop3 и активна фильтрация, то действие будет немедленно завершено ошибкой."},"Filtering is performed on the server side.":{"ru":"Фильтрация выполняется на стороне сервера."},"Filters":{"ru":"Фильтры"},"Filters may also include groups. If you fill group id, this action will be applied to records in that group and which matches other filters.":{"ru":"Фильтры могут содержать группы. Если вы заполняете поле \"Фильтровать по группам\", это действие изменит только записи из этой группы и только те, которые соответствуют другим фильтрам."},"Filtration":{"ru":"Фильтрация"},"Find a substring in a string.":{"ru":"Найти подстроку в строке."},"Find all files in the specified folder that satisfy certain conditions.":{"ru":"Найти в указанной папке все файлы, удовлетворяющие определенным условиям."},"Find all profiles":{"ru":"Найти все профили"},"Find and get the content of the message by the specified criteria.":{"ru":"Найти и получить содержимое письма по указанным критериям."},"Find and save the id of the last message in the specified folder.":{"ru":"Найти и сохранить id последнего письма в указанной папке."},"Find and save the message id by the specified criteria.":{"ru":"Найти и сохранить id письма по указанным критериям."},"Find and save the messages id by the specified criteria.":{"ru":"Найти и сохранить id писем по указанным критериям."},"Find any profile":{"ru":"Поиск любого профиля"},"Find cmd.exe location":{"ru":"Найти путь к cmd.exe"},"Find one image in another and get the coordinates of the found location.":{"ru":"Найти одно изображение в другом и получить координаты найденного места."},"Find profile, which has string \"gmail\" in name":{"ru":"Поиск профиля, имя которого содержит строку \"gmail\""},"Find profiles, which have string \"gmail\" in name":{"ru":"Найти профили, имена которых содержат строку \"gmail\""},"Fingerprint":{"ru":"Отпечаток"},"Fingerprint service fetches data from a real browsers on real devices, so you may be sure, that fingerprints are always fresh - contain actual user agent, plugin versions, etc.":{"ru":"Сервис FingerprintSwitcher извлекает данные из реальных браузеров на реальных устройствах, поэтому вы можете быть уверены, что отпечатки всегда актуальные, они содержат новые юзер агенты, версии плагинов и т. д."},"Fingerprint switcher service":{"ru":"FingerprintSwitcher"},"FingerprintSwitcher key. Can be empty":{"ru":"Ключ FingerprintSwitcher. Может быть пустым"},"Fingerprints are fetched from":{"ru":"Отпечатки загружаются из сервиса"},"Fingerprints are fetched from FingerprintSwitcher service, in order to use that service, you need to buy a key(see the link below). However, you may use it for free with Microsoft Windows,Chrome tags and with requests limits. In order to use free version, leave this field blank.":{"ru":"Отпечатки загружаются удаленно из службы FingerprintSwitcher, чтобы использовать этот сервис, вам нужно купить ключ (см. ссылку ниже). Однако вы можете использовать его бесплатно с тегами Microsoft Windows,Chrome и с ограничениями  на количество запросов. Чтобы использовать бесплатную версию, оставьте это поле пустым."},"Fingerprints are for personal usage only. Sending them to other users or sharing online is prohibited. This also includes embedding fingerprints inside compiled script. Violating this rule will lead to blocking your key without refund possibility.":{"ru":"Отпечатки предназначены только для личного использования. Передача их другим пользователям или размещение онлайн запрещено. Это также включает в себя встраивание отпечатков или ключей в скомпилированный скрипт. Нарушение этих правил приведет к блокировке ключа без возможности возврата средств."},"Fingerprints are obtained from the FingerprintSwitcher service. To use this service, you need to purchase a key. Key verification is required when using profile which has fingerprint data. If you don't change profile folder or it doesn't contain fingerprint data, you can leave this field blank. You can also leave this field blank if the fingerprint was obtained using the free version (without a key). However, if the fingerprint was obtained with the paid version, you must provide a valid key to apply it. To use the free version, simply leave this field blank.":{"ru":"Отпечатки загружаются из сервиса FingerprintSwitcher. Для использования этого сервиса необходимо приобрести ключ. Если путь к папке профиля не меняется или внутри профиля не содержится данных отпечатка, вы можете оставить это поле пустым. Вы также можете оставить это поле пустым, если отпечаток был получен с использованием бесплатной версии (без ключа). Однако, если отпечаток был получен с помощью платной версии, необходимо предоставить действующий ключ для его применения. Чтобы использовать бесплатную версию, просто оставьте это поле пустым."},"Fingerprints are obtained from the FingerprintSwitcher service. To use this service, you need to purchase a key. The key is verified both when fetching and applying the fingerprint. If the fingerprint was obtained using the free version (without a key), you can leave the key field blank. However, if the fingerprint was obtained with the paid version, you must provide a valid key to apply it. To use the free version, simply leave this field blank.":{"ru":"Отпечатки загружаются из сервиса FingerprintSwitcher. Для использования этого сервиса необходимо приобрести ключ. Ключ проверяется как при получении отпечатка, так и при его применении. Если отпечаток был получен с использованием бесплатной версии (без ключа), поле ключа можно оставить пустым. Однако, если отпечаток был получен с помощью платной версии, необходимо предоставить действующий ключ для его применения. Чтобы использовать бесплатную версию, просто оставьте это поле пустым."},"Fingerprints are obtained from the FingerprintSwitcher service. To use this service, you need to purchase a key. This parameter will override any FingerprintSwitcher key set in actions such as 'Get fingerprint' or 'Apply fingerprint'. The key specified in this parameter will take precedence over any key set in other actions. For example, if this parameter contains key1 and a subsequent 'Get fingerprint' action specifies key2, the key from this parameter (key1) will still be used.":{"ru":"Отпечатки загружаются из сервиса FingerprintSwitcher. Для использования этого сервиса необходимо приобрести ключ. Этот параметр переопределит любой ключ FingerprintSwitcher, установленный в действиях, таких как 'Получить отпечаток' или 'Применить отпечаток'. Ключ, указанный в этом параметре, будет иметь приоритет над любым ключом, установленным в других действиях. Например, если в этом параметре указан key1, а в последующем действии 'Получить отпечаток' указан key2, все равно будет использован ключ из этого параметра (key1)."},"Fingerprints with specified PerfectCanvas request will be rendered in real time from machines which are currently connected.":{"ru":"Получение отпечатка с указанным запросом PerfectCanvas будет происходить в реальном времени с одной из машин, которая в данный момент находится online."},"Fingerprints with specified PerfectCanvas request will be searched inside static database, if not found, canvas data will be rendered in real time from machines which are currently connected.":{"ru":"Поиск отпечатка с указанным запросом PerfectCanvas будет происходить в статической базе данных, если он не найден, данные canvas будут получаться в реальном времени с одной из машин, которая в данный момент находится online."},"Fingerprints with specified PerfectCanvas request will be searched inside static database, if not found, error will occur.":{"ru":"Поиск отпечатка с указанным запросом PerfectCanvas будет происходить в статической базе данных, если он не найден, произойдет ошибка."},"Finland":{"ru":"Финляндия"},"Flags":{"ru":"Флаги"},"Flags are system message tags starting with <code>\\<\/code>. Possible flags:":{"ru":"Флаги - это системные метки письма начинающиеся с <code>\\<\/code>. Возможные флаги:"},"Flags contains":{"ru":"Флаги содержат"},"Flags not contains":{"ru":"Флаги не содержат"},"Flags of message":{"ru":"Флаги письма"},"Folder":{"ru":"Папка"},"Folder name":{"ru":"Имя папки"},"Folders":{"ru":"Папки"},"Follow text":{"ru":"За текстом"},"Following action will slightly change results of time measurements in order to reduce these techniques. The magnitude of these time changes can be set with \"Time deformation from\" and \"Time deformation to\" parameters.":{"ru":"Данное действие изменит результаты измерений времени. Величина этих изменений может быть установлена с помощью параметров \"Деформация времени от\" и \"Время деформации до\"."},"Font":{"ru":"Шрифт"},"Font Color Blue":{"ru":"Цвет шрифта синий"},"Font Color Green":{"ru":"Цвет шрифта зеленый"},"Font Color Red":{"ru":"Цвет шрифта красный"},"Font Color Transparency":{"ru":"Цвет шрифта прозрачный"},"Font Family":{"ru":"Семейство шрифтов"},"Font Size":{"ru":"Размер шрифта"},"Fonts":{"ru":"Шрифты"},"For <code>ReCaptcha<\/code> and <code>HCaptcha<\/code> solving it is recommended to use the <code>Solve Recaptcha 2.0<\/code> and <code>Solve HCaptcha<\/code> actions from the browser context menu, if it's possible. It is easier to use, and the captcha can be solved faster. Also, these actions can perform automatic submit of the solution. Use this action if other options don't suit you for some reason.":{"ru":"Для решения <code>ReCaptcha<\/code> и <code>HCaptcha<\/code> рекомендуется использовать действия <code>Решить Recaptcha 2.0<\/code> и <code>Решить HCaptcha<\/code> из контекстного меню браузера, если это возможно. С ними проще работать, и капча может решиться быстрее. Также эти действия позволяют выполнять автоматическую валидацию решения. Используйте это действие, если другие варианты не подходят вам по каким-либо причинам."},"For <code>shake<\/code> algorithms, you can specify the length of the raw checksum by filling in the \"Shake result length\" parameter located in the additional settings.":{"ru":"Для <code>shake<\/code> алгоритмов можно указать длину необработанной контрольной суммы, заполнив параметр \"Длина результата shake\", находящийся в дополнительных настройках."},"For compiled unprotected and protected scripts, the paths are slightly different, since the unprotected script saves the engine to the appslocal folder, and the protected one to the appsremote folder.":{"ru":"У скомпилированных незащищенных и защищенных скриптов пути немного отличаются, так как незащищенный скрипт сохраняет движок в папку appslocal, а защищенный в папку appsremote."},"For example":{"ru":"Например"},"For example, changing format of the string <span style=\"color:black\">{\"name\":\"John\"}<\/span> will return object that contains one property - <span style=\"color:black\">name<\/span> with value <span style=\"color:black\">John<\/span>.":{"ru":"Например, при изменении формата строки вида <span style=\"color:black\">{\"name\":\"John\"}<\/span> будет возвращён объект, содержащий одно свойство - <span style=\"color:black\">name<\/span> со значением <span style=\"color:black\">John<\/span>."},"For example, checking for the string <span style=\"color:black\">{\"name\":\"John\"}<\/span> will return <span style=\"color:black\">true<\/span>, because it has a valid JSON format. The string <span style=\"color:black\">\"name\":\"John\"<\/span> will have an incorrect structure, it does not have curly braces, so the result will be <span style=\"color:black\">false<\/span>.":{"ru":"Например, проверка для строки <span style=\"color:black\">{\"name\":\"John\"}<\/span> вернет <span style=\"color:black\">true<\/span>, так как она имеет валидный формат JSON. Строка <span style=\"color:black\">\"name\":\"John\"<\/span> будет имеет неверную структуру, у неё отсутствуют фигурные скобки, поэтому результатом будет <span style=\"color:black\">false<\/span>."},"For example, if \"List of items\" is not specified, then the list will be formed from the parameters \"Item 1\" and \"Item 2\" and \"Item 3\". If the parameters \"Item 1\", \"Item 2\", \"Item 3\" are empty, then the \"List of items\" will be used. If all parameters are specified, then all of them will be used.":{"ru":"Например, если \"Список элементов\" не указан, то список будет сформирован из параметров \"Элемент 1\" и \"Элемент 2\" и \"Элемент 3\". Если параметры \"Элемент 1\", \"Элемент 2\", \"Элемент 3\" пусты, то будет использован \"Список элементов\". Если указаны все параметры, то все они будут использованы."},"For example, if \"List of paths\" is not specified, then the list will be formed from the parameters \"Path 1\" and \"Path 2\" and \"Path 3\". If the parameters \"Path 1\", \"Path 2\", \"Path 3\" are empty, then the \"List of paths\" will be used. If all parameters are specified, then all of them will be used.":{"ru":"Например, если \"Список путей\" не указан, то список будет сформирован из параметров \"Путь 1\" и \"Путь 2\" и \"Путь 3\". Если параметры \"Путь 1\", \"Путь 2\", \"Путь 3\" пусты, то будет использован \"Список путей\". Если указаны все параметры, то все они будут использованы."},"For example, if \"List of strings\" is not specified, then the list will be formed from the parameters \"String 1\" and \"String 2\" and \"String 3\". If the parameters \"String 1\", \"String 2\", \"String 3\" are empty, then the \"List of strings\" will be used. If all parameters are specified, then all of them will be used.":{"ru":"Например, если \"Список строк\" не указан, то список будет сформирован из параметров \"Строка 1\" и \"Строка 2\" и \"Строка 3\". Если параметры \"Строка 1\", \"Строка 2\", \"Строка 3\" пусты, то будет использован \"Список строк\". Если указаны все параметры, то все они будут использованы."},"For example, if <code>\"123\"<\/code> is specified, then the action will return <code>123<\/code>, and if <code>\"123.45\"<\/code> is specified, then the action will return <code>123.45<\/code>.":{"ru":"Например, если указано <code>\"123\"<\/code>, то действие вернет <code>123<\/code>, а если укзано <code>\"123.45\"<\/code>, то действие вернет <code>123.45<\/code>."},"For example, if <code>\"Test text\"<\/code> is specified, then the action will return true, and if <code>\"\"<\/code> or <code>123<\/code> is specified, then the action will return false.":{"ru":"Например, если указано <code>\"Тестовый текст\"<\/code>, то действие вернет true, а если укзано <code>\"\"<\/code> или <code>123<\/code>, то действие вернет false."},"For example, if <code>\"Test text\"<\/code> is specified, then the action will return true, and if <code>123<\/code> or <code>true<\/code> is specified, then the action will return false.":{"ru":"Например, если указано <code>\"Тестовый текст\"<\/code>, то действие вернет true, а если укзано <code>123<\/code> или <code>true<\/code>, то действие вернет false."},"For example, if <code>123<\/code> is specified, then the action will return <code>\"123\"<\/code>, and if <code>true<\/code> is specified, then the action will return <code>\"true\"<\/code>.":{"ru":"Например, если указано <code>123<\/code>, то действие вернет <code>\"123\"<\/code>, а если укзано <code>true<\/code>, то действие вернет <code>\"true\"<\/code>."},"For example, if a item is specified in the \"Item 1\" field and a list of 4 items is specified in the \"List of items\" field, then 5 items will be joined.":{"ru":"Например, если в поле \"Элемент 1\" указан элемент и в поле \"Список элементов\" указан список из 4 элементов, то объединено будет 5 элементов."},"For example, if a path is specified in the \"Path 1\" field and a list of 4 paths is specified in the \"List of paths\" field, then 5 paths will be joined.":{"ru":"Например, если в поле \"Путь 1\" указан путь и в поле \"Список путей\" указан список из 4 путей, то объединено будет 5 путей."},"For example, if a string is specified in the \"String 1\" field and a list of 4 strings is specified in the \"List of strings\" field, then 5 strings will be joined.":{"ru":"Например, если в поле \"Строка 1\" указана строка и в поле \"Список строк\" указан список из 4 строк, то объединено будет 5 строк."},"For example, if is specified the string <code>\"Just string\"<\/code>, index 5, number of characters 0 and substring <code>\"example \"<\/code>, then the action will return <code>\"Just example string\"<\/code>.":{"ru":"Например, если указана строка <code>\"Просто строки\"<\/code>, индекс 7, количество символов 0 и подстрока <code>\"пример \"<\/code>, то действие вернет <code>\"Просто пример строки\"<\/code>."},"For example, if is specified the string <code>\"Test not text\"<\/code>, index 5, number of characters 3 and substring <code>\"new\"<\/code>, then the action will return <code>\"Test new text\"<\/code>.":{"ru":"Например, если указана строка <code>\"Тест не текст\"<\/code>, индекс 5, количество символов 2 и подстрока <code>\"новый\"<\/code>, то действие вернет <code>\"Тест новый текст\"<\/code>."},"For example, if is specified the string <code>\"Test text\"<\/code>, index is 0 and the number of characters is 5, then the action will return <code>\"text\"<\/code>.":{"ru":"Например, если указана строка <code>\"Тест текст\"<\/code>, индекс 0 и количество символов 5, то действие вернет <code>\"текст\"<\/code>."},"For example, if line is":{"ru":"Например, если строка"},"For example, if string is":{"ru":"Например, если строка"},"For example, if the URL is <code>\"https:\/\/site.com\/?a=b\"<\/code>, the query is <code>{\"c\":\"d\"}<\/code> and the \"Clear old query string\" parameter is activated, then the action will return <code>\"https:\/\/site.com\/?c=d\"<\/code>.":{"ru":"Например, если указан URL <code>\"https:\/\/site.com\/?a=b\"<\/code>, запрос <code>{\"c\":\"d\"}<\/code> и активирован параметр \"Очистить старую строку запроса\", то действие вернет <code>\"https:\/\/site.com\/?c=d\"<\/code>."},"For example, if the URL is <code>\"https:\/\/site.com\/?a=b&amp;c=d&amp;e=f\"<\/code>, the query is <code>{\"a\":\"i\",\"c\":\"-BAS-CLEAR-\",\"g\":\"h\"}<\/code> and the \"Clear old query string\" parameter is disabled, then the action will return <code>\"https:\/\/site.com\/?a=i&amp;e=f&amp;g=h\"<\/code>.":{"ru":"Например, если указан URL <code>\"https:\/\/site.com\/?a=b&amp;c=d&amp;e=f\"<\/code>, запрос <code>{\"a\":\"i\",\"c\":\"-BAS-CLEAR-\",\"g\":\"h\"}<\/code> и деактивирован параметр \"Очистить старую строку запроса\", то действие вернет <code>\"https:\/\/site.com\/?a=i&amp;e=f&amp;g=h\"<\/code>."},"For example, if the parameters \"Item 1\" and \"Item 2\" are specified, the values of which are respectively <code>\"test\"<\/code> and <code>\"text\"<\/code>, and the separator <code>\":\"<\/code>, then the action will return <code>\"test:text\"<\/code>.":{"ru":"Например, если указаны параметры \"Элемент 1\" и \"Элемент 2\" значения которых сответственно равны <code>\"тест\"<\/code> и <code>\"текст\"<\/code>, а разделитель <code>\":\"<\/code>, то действие вернет <code>\"тест:текст\"<\/code>."},"For example, if the parameters \"Path 1\" and \"Path 2\" are specified, the values of which are respectively <code>\"\/foo\"<\/code> and <code>\"\/bar\"<\/code>, then the action will return <code>\"\/foo\/bar\"<\/code>.":{"ru":"Например, если указаны параметры \"Путь 1\" и \"Путь 2\" значения которых сответственно равны <code>\"\/foo\"<\/code> и <code>\"\/bar\"<\/code>, то действие вернет <code>\"\/foo\/bar\"<\/code>."},"For example, if the parameters \"String 1\" and \"String 2\" are specified, the values of which are respectively <code>\"Just example\"<\/code> and <code>\" string\"<\/code>, then the action will return <code>\"Just example string\"<\/code>.":{"ru":"Например, если указаны параметры \"Строка 1\" и \"Строка 2\" значения которых сответственно равны <code>\"Просто пример\"<\/code> и <code>\" строки\"<\/code>, то действие вернет <code>\"Просто пример строки\"<\/code>."},"For example, if the path <code>\"C:\/\/\/\/temp\\\\\/\\\/\\\/foo\/bar\/..\"<\/code> is specified, then the action will return <code>\"C:\/temp\/foo\"<\/code>.":{"ru":"Например, если указан путь <code>\"C:\/\/\/\/temp\\\\\/\\\/\\\/foo\/bar\/..\"<\/code>, то действие вернет <code>\"C:\/temp\/foo\"<\/code>."},"For example, if the path <code>\"C:\/foo\/bar\/baz\/asdf\/quux.html\/\"<\/code> is specified, then the action will return <code>\".html\"<\/code>.":{"ru":"Например, если указан путь <code>\"С:\/foo\/bar\/baz\/asdf\/quux.html\/\"<\/code>, то действие вернет <code>\".html\"<\/code>."},"For example, if the path <code>\"C:\/foo\/bar\/baz\/asdf\/quux.html\/\"<\/code> is specified, then the action will return <code>\"C:\/foo\/bar\/baz\/asdf\"<\/code>.":{"ru":"Например, если указан путь <code>\"С:\/foo\/bar\/baz\/asdf\/quux.html\/\"<\/code>, то действие вернет <code>\"C:\/foo\/bar\/baz\/asdf\"<\/code>."},"For example, if the path <code>\"C:\/foo\/bar\/baz\/asdf\/quux.html\/\"<\/code> is specified, then the action will return <code>\"quux.html\"<\/code>.":{"ru":"Например, если указан путь <code>\"С:\/foo\/bar\/baz\/asdf\/quux.html\/\"<\/code>, то действие вернет <code>\"quux.html\"<\/code>."},"For example, if the path <code>\"C:\\path\/\\\"<\/code> is specified, then the action will return <code>\"C:\/path\"<\/code>.":{"ru":"Например, если указан путь <code>\"C:\\path\/\\\"<\/code>, то действие вернет <code>\"C:\/path\"<\/code>."},"For example, if the path is <code>\"\/foo\/bar\"<\/code>, then the action will return true, and if the path is specified <code>\"bar\/baz\"<\/code> or <code>\"qux\/\"<\/code>, then the action will return false.":{"ru":"Например, если указан путь <code>\"\/foo\/bar\"<\/code>, то действие вернет true, а если укзан путь <code>\"bar\/baz\"<\/code> или <code>\"qux\/\"<\/code>, то действие вернет false."},"For example, if the path is <code>\"\/test\/archive\/engine.js\"<\/code> and the extension to be removed is <code>\".js\"<\/code>, then the action will return <code>\"engine\"<\/code>.":{"ru":"Например, если указан путь <code>\"\/test\/archive\/engine.js\"<\/code> и удаляемое расширение <code>\".js\"<\/code>, то действие вернет <code>\"engine\"<\/code>."},"For example, if the path is <code>\"C:\/foo.HTML\"<\/code> and the extension to be removed is <code>\".html\"<\/code>, then the action will return <code>\"foo.HTML\"<\/code>, not <code>\"foo\"<\/code>.":{"ru":"Например, если указан путь <code>\"C:\/foo.HTML\"<\/code> и удаляемое расширение <code>\".html\"<\/code>, то действие вернет <code>\"foo.HTML\"<\/code>, а не <code>\"foo\"<\/code>."},"For example, if the path is <code>\"C:\/foo\/bar\/baz\/asdf\/quux\/\"<\/code> or <code>\"C:\/foo\/bar\/baz\/asdf\/.index\"<\/code>, then the action will return <code>\"\"<\/code>.":{"ru":"Например, если указан путь <code>\"С:\/foo\/bar\/baz\/asdf\/quux\/\"<\/code> или <code>\"С:\/foo\/bar\/baz\/asdf\/.index\"<\/code>, то действие вернет <code>\"\"<\/code>."},"For example, if the path is <code>\"D:\/sqlite\/your.db\"<\/code> and the extension to be removed is <code>\"*\"<\/code>, then the action will return <code>\"your\"<\/code>.":{"ru":"Например, если указан путь <code>\"D:\/sqlite\/your.db\"<\/code> и удаляемое расширение <code>\"*\"<\/code>, то действие вернет <code>\"your\"<\/code>."},"For example, if the script is compiled with protection and is located in the <code>\"D:\/Gparser\"<\/code> folder, then the action will return":{"ru":"Например, если скрипт скомпилирован с защитой и находится в папке <code>\"D:\/Gparser\"<\/code>, то действие вернет"},"For example, if the script is compiled without protection and is located in the <code>\"D:\/Gparser\"<\/code> folder, then the action will return":{"ru":"Например, если скрипт скомпилирован без защиты и находится в папке <code>\"D:\/Gparser\"<\/code>, то действие вернет"},"For example, if the script is not compiled and is running BAS version <code>24.0.8<\/code> installed in the <code>\"C:\/BrowserAutomationStudio\"<\/code> folder, then the action will return":{"ru":"Например, если скрипт не скомпилирован и запущен BAS версии <code>24.0.8<\/code> установленный в папку <code>\"C:\/BrowserAutomationStudio\"<\/code>, то действие вернет"},"For example, if the script is not compiled and the <code>\"Gparser\"<\/code> project located in the <code>\"D:\/projects\"<\/code> folder is open, then the action will return":{"ru":"Например, если скрипт не скомпилирован и открыт проект <code>\"Gparser\"<\/code> находящийся в папке <code>\"D:\/projects\"<\/code>, то действие вернет"},"For example, if the service managed to get the code from SMS, then the action will return <code>\"75588\"<\/code>, and if the service failed to get the code from SMS, then the action will return <code>\"Activation code: 75588\"<\/code>.":{"ru":"Например, если сервису удалось получить код из SMS, то действие вернет <code>\"75588\"<\/code>, а если сервису не удалось получить код из SMS, то действие вернет <code>\"Код активации: 75588\"<\/code>."},"For example, if the specified string is <br><code>\"Just<br>example<br>string.\"<\/code> and the separator is <code>\"\\n\"<\/code>, then the action will return <code>[\"Just\",\"example\",\"string\"]<\/code>.":{"ru":"Например, если указана строка <br><code>\"Просто<br>пример<br>строки.\"<\/code> и разделитель <code>\"\\n\"<\/code>, то действие вернет <code>[\"Просто\",\"пример\",\"строки\"]<\/code>."},"For example, if the specified string is <code>\"Test:text\"<\/code> and the separator is <code>\":\"<\/code>, then the action will return <code>[\"Test\",\"text\"]<\/code>.":{"ru":"Например, если указана строка <code>\"Test:text\"<\/code> и разделитель <code>\":\"<\/code>, то действие вернет <code>[\"Test\",\"text\"]<\/code>."},"For example, if the specified string is <code>\"string\"<\/code> and the separator is <code>\";\"<\/code>, then the action will return <code>[\"string\"]<\/code>.":{"ru":"Например, если указана строка <code>\"string\"<\/code> и разделитель <code>\";\"<\/code>, то действие вернет <code>[\"string\"]<\/code>."},"For example, if the specified string is <code>\"string\"<\/code> and the separator is not specified, then the action will return <code>[\"s\",\"t\",\"r\",\"i\",\"n\",\"g\"]<\/code>.":{"ru":"Например, если указана строка <code>\"string\"<\/code> и разделитель не указан, то действие вернет <code>[\"s\",\"t\",\"r\",\"i\",\"n\",\"g\"]<\/code>."},"For example, if the string <code>\"&lt;div&gt;Blah blah blah&lt;\/div&gt;\"<\/code> is specified and encode mode is activated, the action will return <code>\"&amp;lt;div&amp;gt;Blah blah blah&amp;lt;\/div&amp;gt;\"<\/code>. And if the string <code>\"&amp;lt;h1&amp;gt;Text title&amp;lt;\/h1&amp;gt;\"<\/code> is specified and decode mode is activated, then the action will return <code>\"&lt;h1&gt;Text title&lt;\/h1&gt;\"<\/code>.":{"ru":"Например, если указана строка <code>\"&lt;div&gt;Blah blah blah&lt;\/div&gt;\"<\/code> и активирован режим encode, то действие вернет <code>\"&amp;lt;div&amp;gt;Blah blah blah&amp;lt;\/div&amp;gt;\"<\/code>. А если указана строка <code>\"&amp;lt;h1&amp;gt;Text title&amp;lt;\/h1&amp;gt;\"<\/code> и активирован режим decode, то действие вернет <code>\"&lt;h1&gt;Text title&lt;\/h1&gt;\"<\/code>."},"For example, if the string <code>\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test text&nbsp;&nbsp;&nbsp;\"<\/code> is specified, then the action will return <code>\"Test text\"<\/code>, and if the string <code>\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Just example string&nbsp;&nbsp;&nbsp;&nbsp;\"<\/code> is specified, then the action will return <code>\"Just example string\"<\/code>.":{"ru":"Например, если указана строка <code>\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Тестовый текст&nbsp;&nbsp;&nbsp;\"<\/code>, то действие вернет <code>\"Тестовый текст\"<\/code>, а если указана строка <code>\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Просто пример строки&nbsp;&nbsp;&nbsp;&nbsp;\"<\/code>, то действие вернет <code>\"Просто пример строки\"<\/code>."},"For example, if the string <code>\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test&nbsp;&nbsp;&nbsp;text&nbsp;&nbsp;&nbsp;\"<\/code> is specified, then the action will return <code>\"Test text\"<\/code>, and if the string <code>\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Just&nbsp;&nbsp;example&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;\"<\/code> is specified, then the action will return <code>\"Just example string\"<\/code>.":{"ru":"Например, если указана строка <code>\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Тестовый&nbsp;&nbsp;&nbsp;текст&nbsp;&nbsp;&nbsp;\"<\/code>, то действие вернет <code>\"Тестовый текст\"<\/code>, а если указана строка <code>\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Просто&nbsp;&nbsp;пример&nbsp;&nbsp;&nbsp;строки&nbsp;&nbsp;&nbsp;&nbsp;\"<\/code>, то действие вернет <code>\"Просто пример строки\"<\/code>."},"For example, if the string <code>\"?x=test\"<\/code> is specified and encode mode is activated, the action will return <code>\"%3Fx%3Dtest\"<\/code>. And if the string <code>\"%D1%82%D0%B5%D1%81%D1%82\"<\/code> is specified and decode mode is activated, then the action will return <code>\"тест\"<\/code>.":{"ru":"Например, если указана строка <code>\"?x=test\"<\/code> и активирован режим encode, то действие вернет <code>\"%3Fx%3Dtest\"<\/code>. А если указана строка <code>\"%D1%82%D0%B5%D1%81%D1%82\"<\/code> и активирован режим decode, то действие вернет <code>\"тест\"<\/code>."},"For example, if the string <code>\"Delicious 100% juice.\"<\/code> is specified, then the action will return <code>[\"Delicious\", \"100\", \"juice\"]<\/code>.":{"ru":"Например, если указана строка <code>\"Вкусный 100% сок.\"<\/code>, то действие вернет <code>[\"Вкусный\", \"100\", \"сок\"]<\/code>."},"For example, if the string <code>\"Just sample text. Test text, string\"<\/code> is specified, then the action will return <code>[\"Just sample text.\", \"Test text, string\"]<\/code>, and if the string <code>\"Test text! Test text! Test text!\"<\/code> is specified, then the action will return <code>[\"Test text!\", \"Test text!\", \"Test text!\"]<\/code>.":{"ru":"Например, если указана строка <code>\"Просто пример текста. Тестовый текст, строка\"<\/code>, то действие вернет <code>[\"Просто пример текста.\",\"Тестовый текст, строка\"]<\/code>, а если указана строка <code>\"Тестовый текст! Тестовый текст! Тестовый текст!\"<\/code>, то действие вернет <code>[\"Тестовый текст!\",\"Тестовый текст!\",\"Тестовый текст!\"]<\/code>."},"For example, if the string <code>\"Just string\"<\/code> is specified, the substring <code>\"example \"<\/code> and index 5, then the action will return <code>\"Just example string\"<\/code>.":{"ru":"Например, если указана строка <code>\"Просто строки\"<\/code>, подстрока <code>\"пример \"<\/code> и индекс 7, то действие вернет <code>\"Просто пример строки\"<\/code>."},"For example, if the string <code>\"TEST TEXT\"<\/code> is specified, then the action will return <code>\"Test Text\"<\/code>, and if the string <code>\"JUST EXAMPLE STRING\"<\/code> is specified, then the action will return <code>\"Just Example String\"<\/code>.":{"ru":"Например, если указана строка <code>\"ТЕСТОВЫЙ ТЕКСТ\"<\/code>, то действие вернет <code>\"Тестовый Текст\"<\/code>, а если указана строка <code>\"ПРОСТО ПРИМЕР СТРОКИ\"<\/code>, то действие вернет <code>\"Просто Пример Строки\"<\/code>."},"For example, if the string <code>\"TEST TEXT\"<\/code> is specified, then the action will return <code>\"Test text\"<\/code>, and if the string <code>\"JUST EXAMPLE STRING\"<\/code> is specified, then the action will return <code>\"Just example string\"<\/code>.":{"ru":"Например, если указана строка <code>\"ТЕСТОВЫЙ ТЕКСТ\"<\/code>, то действие вернет <code>\"Тестовый текст\"<\/code>, а если указана строка <code>\"ПРОСТО ПРИМЕР СТРОКИ\"<\/code>, то действие вернет <code>\"Просто пример строки\"<\/code>."},"For example, if the string <code>\"Test text - 89001112233. Just example text - +7 900 999 4455.\"<\/code> is specified, then the action will return <code>[\"89001112233\", \"+7 900 999 4455\"]<\/code>.":{"ru":"Например, если указана строка <code>\"Тестовый текст - 89001112233. Просто пример текста - +7 900 999 4455.\"<\/code>, то действие вернет <code>[\"89001112233\", \"+7 900 999 4455\"]<\/code>."},"For example, if the string <code>\"Test text - test@gmail.com. Just example text - example@gmail.com.\"<\/code> is specified, then the action will return <code>[\"test@gmail.com\", \"example@gmail.com\"]<\/code>.":{"ru":"Например, если указана строка <code>\"Тестовый текст - test@gmail.com. Просто пример текста - example@gmail.com.\"<\/code>, то действие вернет <code>[\"test@gmail.com\", \"example@gmail.com\"]<\/code>."},"For example, if the string <code>\"Test text http:\/\/test.com, string test example.org\"<\/code> is specified, then the action will return <code>[\"http:\/\/test.com\", \"example.org\"]<\/code>.":{"ru":"Например, если указана строка <code>\"Тестовый текст http:\/\/test.com, строка тест example.org\"<\/code>, то действие вернет <code>[\"http:\/\/test.com\", \"example.org\"]<\/code>."},"For example, if the string <code>\"Test text\"<\/code> is specified and the substring <code>\"text\"<\/code> is specified, then the action will return 5, and if the string is <code>\"Just example string\"<\/code> and the substring <code>\"test\"<\/code>, then the action will return -1.":{"ru":"Например, если указана строка <code>\"Тестовый текст\"<\/code> и подстрока <code>\"текст\"<\/code>, то действие вернет 9, а если указана строка <code>\"Просто пример строки\"<\/code> и подстрока <code>\"тест\"<\/code>, то действие вернет -1."},"For example, if the string <code>\"Test text\"<\/code> is specified, then the action will return 2, and if the string <code>\"Just example string\"<\/code> is specified, then the action will return 3.":{"ru":"Например, если указана строка <code>\"Тестовый текст\"<\/code>, то действие вернет 2, а если указана строка <code>\"Просто пример строки\"<\/code>, то действие вернет 3."},"For example, if the string <code>\"Test text\"<\/code> is specified, then the action will return 9, and if the string <code>\"Just example string\"<\/code> is specified, then the action will return 22.":{"ru":"Например, если указана строка <code>\"Тестовый текст\"<\/code>, то действие вернет 14, а если указана строка <code>\"Просто пример строки\"<\/code>, то действие вернет 20."},"For example, if the string <code>\"Test text\"<\/code> is specified, then the action will return <code>[\"Test\",\"text\"]<\/code>, and if the string <code>\"Just example string.\"<\/code> is specified, then the action will return <code>[\"Just\",\"example\",\"string\"]<\/code>.":{"ru":"Например, если указана строка <code>\"Test text\"<\/code>, то действие вернет <code>[\"Test\",\"text\"]<\/code>, а если указана строка <code>\"Просто пример строки.\"<\/code>, то действие вернет <code>[\"Просто\",\"пример\",\"строки\"]<\/code>."},"For example, if the string <code>\"email@gmail.com:mypass1\"<\/code> and the variables <code>USERNAME,PASSWORD<\/code> are specified, then the action will save <code>\"email@gmail.com\"<\/code> to the variable <code>[[USERNAME]]<\/code> and <code>\"mypass1\"<\/code> to the variable <code>[[PASSWORD]]<\/code>.":{"ru":"Например, если указана строка <code>\"email@gmail.com:mypass1\"<\/code> и переменные <code>USERNAME,PASSWORD<\/code>, то действие сохранит <code>\"email@gmail.com\"<\/code> в переменную <code>[[USERNAME]]<\/code> и <code>\"mypass1\"<\/code> в переменную <code>[[PASSWORD]]<\/code>."},"For example, if the string <code>\"test text\"<\/code> is specified and the substring <code>\"te\"<\/code> is specified, then the action will return 2, and if the string is <code>\"Just example string\"<\/code> and the substring <code>\"example\"<\/code>, then the action will return 1.":{"ru":"Например, если указана строка <code>\"Тестовый текст\"<\/code> и подстрока <code>\"те\"<\/code>, то действие вернет 2, а если указана строка <code>\"Просто пример строки\"<\/code> и подстрока <code>\"пример\"<\/code>, то действие вернет 1."},"For example, if the string <code>\"test text\"<\/code> is specified, then the action will return <code>\"Test Text\"<\/code>, and if the string <code>\"just example string\"<\/code> is specified, then the action will return <code>\"Just Example String\"<\/code>.":{"ru":"Например, если указана строка <code>\"тестовый текст\"<\/code>, то действие вернет <code>\"Тестовый Текст\"<\/code>, а если указана строка <code>\"просто пример строки\"<\/code>, то действие вернет <code>\"Просто Пример Строки\"<\/code>."},"For example, if the string <code>\"test text\"<\/code> is specified, then the action will return <code>\"Test text\"<\/code>, and if the string <code>\"just example string\"<\/code> is specified, then the action will return <code>\"Just example string\"<\/code>.":{"ru":"Например, если указана строка <code>\"тестовый текст\"<\/code>, то действие вернет <code>\"Тестовый текст\"<\/code>, а если указана строка <code>\"просто пример строки\"<\/code>, то действие вернет <code>\"Просто пример строки\"<\/code>."},"For example, if the string <code>\"test:123:true\"<\/code> is specified, then the string <code>\"test\"<\/code> will be saved in the first variable, and the number <code>123<\/code> in the second variable and in the third variable the boolean value <code>true<\/code>.":{"ru":"Например, если указана строка <code>\"test:123:true\"<\/code>, то в первую переменную будет сохранена строка <code>\"test\"<\/code>, во вторую переменную число <code>123<\/code> и в третью переменную логическое значение <code>true<\/code>."},"For example, if the string <code>\"кто.рф\"<\/code> is specified and encode mode is activated, the action will return <code>\"xn--j1ail.xn--p1ai\"<\/code>. And if the string <code>\"https:\/\/xn--80aswg.xn--p1ai\/index.html\"<\/code> is specified and decode mode is activated, then the action will return <code>\"https:\/\/сайт.рф\/index.html\"<\/code>.":{"ru":"Например, если указана строка <code>\"кто.рф\"<\/code> и активирован режим encode, то действие вернет <code>\"xn--j1ail.xn--p1ai\"<\/code>. А если указана строка <code>\"https:\/\/xn--80aswg.xn--p1ai\/index.html\"<\/code> и активирован режим decode, то действие вернет <code>\"https:\/\/сайт.рф\/index.html\"<\/code>."},"For example, if the string is <code>\"Test text\"<\/code> and the substring <code>\"Test\"<\/code>, then the action will return true, and if the string is <code>\"Just example string\"<\/code> and substring <code>\"example\"<\/code>, then the action will return false.":{"ru":"Например, если указана строка <code>\"Тестовый текст\"<\/code> и подстрока <code>\"Тестовый\"<\/code>, то действие вернет true, а если указана строка <code>\"Просто пример строки\"<\/code> и подстрока <code>\"пример\"<\/code>, то действие вернет false."},"For example, if the string is <code>\"Test text\"<\/code> and the substring <code>\"text\"<\/code>, then the action will return true, and if the string is <code>\"Just example string\"<\/code> and substring <code>\"example\"<\/code>, then the action will return false.":{"ru":"Например, если указана строка <code>\"Тестовый текст\"<\/code> и подстрока <code>\"текст\"<\/code>, то действие вернет true, а если указана строка <code>\"Просто пример строки\"<\/code> и подстрока <code>\"пример\"<\/code>, то действие вернет false."},"For example, if the string is <code>\"Test text\"<\/code> and the substring <code>\"text\"<\/code>, then the action will return true, and if the string is <code>\"Just example string\"<\/code> and substring <code>\"test\"<\/code>, then the action will return false.":{"ru":"Например, если указана строка <code>\"Тестовый текст\"<\/code> и подстрока <code>\"текст\"<\/code>, то действие вернет true, а если указана строка <code>\"Просто пример строки\"<\/code> и подстрока <code>\"тест\"<\/code>, то действие вернет false."},"For example, if the words \"account\", \"accounts\", \"accounts\" are specified and the number is 1, then the action will return <code>\"account\"<\/code>, and if the number is 22, then the action will return <code>\"accounts\"<\/code>.":{"ru":"Например, если указаны слова \"аккаунт\", \"аккаунта\", \"аккаунтов\" и число равно 5, то действие вернет <code>\"аккаунтов\"<\/code>, а если число равно 22, то действие вернет <code>\"аккаунта\"<\/code>."},"For example, if you specify the string <span style=\"color:black\">offset<\/span> as the key and the number <span style=\"color:black\">100<\/span> as the value, then the resulting object will look like this - <span style=\"color:black\">{\"offset\": 100}<\/span>.":{"ru":"Например, если вы укажете в качестве ключа строку <span style=\"color:black\">offset<\/span>, а в качестве значения число <span style=\"color:black\">100<\/span>, тогда полученный объект будет выглядеть так - <span style=\"color:black\">{\"offset\": 100}<\/span>. "},"For example, the URL <code>\"www.site.com\/api.php?b=two&amp;a=one&amp;c=three\"<\/code> will be normalized to <code>\"https:\/\/site.com\/api.php?a=one&amp;b=two&amp;c=three\"<\/code> if \"https\" is specified in the \"Default protocol\" parameter and the \"Strip WWW\", \"Sort query parameters\" parameters are enabled.":{"ru":"Например, URL <code>\"www.site.com\/api.php?b=two&amp;a=one&amp;c=three\"<\/code> будет нормализован до <code>\"https:\/\/site.com\/api.php?a=one&amp;b=two&amp;c=three\"<\/code>, если в параметр \"Протокол по умолчанию\" указан \"https\" и активированы параметры \"Вырезать WWW\", \"Сортировать параметры запроса\"."},"For example, the number <code>1967567.3245<\/code> will be converted to the string <code>\"1 967 567.3245\"<\/code> if a comma is specified in the \"Decimal separator\" parameter, and a space is specified in the \"Thousandth separator\" parameter.":{"ru":"Например, число <code>1967567.3245<\/code> будет преобразована в строку <code>\"1 967 567,3245\"<\/code>, если в параметре \"Разделитель целой и дробной части\" указана запятая, а в параметре \"Разделитель тысячных\" указан пробел."},"For example, the string <code>\"1 967 567.3245\"<\/code> will be converted to the number <code>1967567.3245<\/code> if a comma is specified in the \"Decimal separator\" parameter, and a space is specified in the \"Thousandth separator\" parameter.":{"ru":"Например, строка <code>\"1 967 567,3245\"<\/code> будет преобразована в число <code>1967567.3245<\/code>, если в параметре \"Разделитель целой и дробной части\" указана запятая, а в параметре \"Разделитель тысячных\" указан пробел."},"For example, the string <code>\"TEST\"<\/code> will be converted to the string <code>\"test\"<\/code>, and the string <code>\"Example String\"<\/code> will be converted to the string <code>\"example string\"<\/code>.":{"ru":"Например строка <code>\"ТЕСТ\"<\/code> будет преобразована в строку <code>\"тест\"<\/code>, а строка <code>\"Пример Строки\"<\/code> будет преобразована в строку <code>\"пример строки\"<\/code>."},"For example, the string <code>\"test\"<\/code> will be converted to the string <code>\"TEST\"<\/code>, and the string <code>\"example string\"<\/code> will be converted to the string <code>\"EXAMPLE STRING\"<\/code>.":{"ru":"Например строка <code>\"тест\"<\/code> будет преобразована в строку <code>\"ТЕСТ\"<\/code>, а строка <code>\"пример строки\"<\/code> будет преобразована в строку <code>\"ПРИМЕР СТРОКИ\"<\/code>."},"For example, the string <code>\"ỆᶍǍᶆṔƚÉ áéíóúýčďěňřšťžů\"<\/code> will be converted to the string <code>\"ExAmPlE aeiouycdenrstzu\"<\/code>, and the string <code>\"Привет мир!\"<\/code> will be converted to the string <code>\"Privet mir!\"<\/code>.":{"ru":"Например строка <code>\"ỆᶍǍᶆṔƚÉ áéíóúýčďěňřšťžů\"<\/code> будет преобразована в строку <code>\"ExAmPlE aeiouycdenrstzu\"<\/code>, а строка <code>\"Привет мир!\"<\/code> будет преобразована в строку <code>\"Privet mir!\"<\/code>."},"For example, to get the substring <code>\"Text title\"<\/code> from the string <code>\"&lt;h1&gt;Text title&lt;\/h1&gt;\"<\/code>, you need to specify <code>\"&lt;h1&gt;\"<\/code> in the \"Left substring\" parameter and specify <code>\"&lt;\/h1&gt;\"<\/code> in the \"Right substring\" parameter.":{"ru":"Например, чтобы получить из строки <code>\"&lt;h1&gt;Заголовок текста&lt;\/h1&gt;\"<\/code> подстроку <code>\"Заголовок текста\"<\/code>, нужно в параметр \"Левая подстрока\" указать <code>\"&lt;h1&gt;\"<\/code>, а в парамет \"Правая подстрока\" указть <code>\"&lt;\/h1&gt;\"<\/code>."},"For example, to get the substring <code>\"example\"<\/code> from the string <code>\"Just example string\"<\/code>, you need to specify 5 in the \"From index\" parameter and specify 12 in the \"To index\" parameter.":{"ru":"Например, чтобы получить из строки <code>\"Просто пример строки\"<\/code> подстроку <code>\"пример\"<\/code>, нужно в параметр \"С индекса\" указать 7, а в парамет \"До индекса\" указть 13."},"For most mail services, you also need to allow imap\/pop3 access in your account settings. Here are <a href=\"#\" class=\"tr\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/support.google.com\/mail\/answer\/7126229?hl=en');return false\">settings<\/a> for gmail.":{"ru":"Для большинства почтовых сервисов вам также необходимо разрешить доступ по imap\/pop3 в настройках учетной записи. Вот <a href=\"#\" class=\"tr\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/support.google.com\/mail\/answer\/7126229?hl=ru');return false\">настройки<\/a> для gmail."},"Force http":{"ru":"Принудительно http"},"Force https":{"ru":"Принудительно https"},"Format":{"ru":"Формат"},"Format and convert the specified number to a string.":{"ru":"Форматировать и преобразовать в строку указанное число."},"Found x coordinate in target image":{"ru":"Найденая координата x в целевом изображении"},"Found y coordinate in target image":{"ru":"Найденая координата y в целевом изображении"},"Fragment":{"ru":"Фрагмент\/Якорь"},"Fragment is the part of the URL that starts with the \"#\" character and can indicate a title within a document or the id attribute of an element. Following the link with the fragment, the browser will open the page and move the window to the specified element.":{"ru":"Фрагмент\/Якорь - это часть URL-адреса, начинающаяся с символа \"#\", он может указывать заголовок внутри документа или id атрибут элемента. По ссылке с фрагментом\/якорем браузер откроет страницу и переместит окно к указанному элементу."},"France":{"ru":"Франция"},"French Guiana":{"ru":"Французская Гвиана"},"From":{"ru":"От"},"From 15 to 30 sec":{"ru":"От 15 до 30 сек"},"From 150 to 300 sec":{"ru":"От 150 до 300 сек"},"From 25 to 35 sec":{"ru":"От 25 до 35 сек"},"From 50 to 70 sec":{"ru":"От 50 до 70 сек"},"From 8 to 13 sec":{"ru":"От 8 до 13 сек"},"From contains":{"ru":"От содержит"},"From date":{"ru":"От даты"},"From folder":{"ru":"Из папки"},"From index":{"ru":"С индекса"},"From not contains":{"ru":"От не содержит"},"From the beginning of the string":{"ru":"С начала строки"},"From the first character":{"ru":"С первого символа"},"From the last character":{"ru":"С последнего символа"},"From the second character":{"ru":"С второго символа"},"Full list of offsets can be found":{"ru":"Полный список смещений можно найти"},"Function must be defined beforehand. BAS allows define functions through \"Function Manager\"":{"ru":"Функция должна быть определена заранее. BAS позволяет определять функции используя \"Менеджер функций\""},"Functions are containers, which holds action list. It helps to group several actions which does same task. For example, there can be function which logins to account, function that checks account balance, etc. It makes your code clear and well organized.":{"ru":"Функции - это контейнеры, в которых содержится список действий. Они помогают группировать несколько действий, которые выполняют одну и ту же задачу. Например, может быть функция, которая логинится на сайте, функция, которая проверяет баланс и т. д. Это делает ваш код понятным и хорошо организованным."},"Gabon":{"ru":"Габон"},"Gambia":{"ru":"Гамбия"},"Generate URL from specified items.":{"ru":"Создать URL из указанных элементов."},"Generate a random string with a given length and allowed characters.":{"ru":"Сгенерировать случайную строку с заданной длиной и разрешенными символами."},"Geolocation object":{"ru":"Объект геолокации"},"Georgia":{"ru":"Грузия"},"Germany":{"ru":"Германия"},"Get a full copy of the list.":{"ru":"Получить полную копию списка."},"Get a list of flags for the specified message.":{"ru":"Получить список флагов для указанного письма."},"Get a list of folders in the specified mailbox.":{"ru":"Получить список папок в указанном почтовом ящике."},"Get a sublist of a certain number of items from a list.":{"ru":"Получить подсписок состоящий из определенного количества элементов оригинального списка."},"Get a substring between two substrings.":{"ru":"Получить подстроку между двумя подстроками."},"Get a substring from the string.":{"ru":"Получить подстроку из строки."},"Get an activation code from the specified number.":{"ru":"Получить код активации с указанного номера."},"Get attach":{"ru":"Получить вложенные"},"Get body of message":{"ru":"Получить тело письма"},"Get browser fingerprint, which contains: user agent, screen size, navigator, fonts and many more.":{"ru":"Получить отпечаток браузера, который содержит: юзер агент, размер экрана, свойства navigator, шрифты и многое другое."},"Get detailed information about a file or folder: size, base folder, check existence, etc.":{"ru":"Получить подробную информацию о файле или папке: размер, базовая папка, проверить существование и т. д."},"Get element of the list at specific index.":{"ru":"Получить элемент списка по заданному индексу."},"Get flags of message":{"ru":"Получить флаги письма"},"Get group list from database.":{"ru":"Получить список групп из базы данных."},"Get image data with specific id in base64 format. Can be used to save to file.":{"ru":"Получить данные изображения с заданным идентификатором в формате base64. Действие может быть использовано для сохранения в файл."},"Get image width and height.":{"ru":"Получить ширину и высоту изображения."},"Get information about the folder in the specified mailbox.":{"ru":"Получить информацию о папке в указанном почтовом ящике."},"Get information for selected ip, this includes timezone UTC offset and other.":{"ru":"Получить информацию для заданном ip, включает смещение относительно UTC, часовой пояс и другое."},"Get list of attached file names":{"ru":"Получить список имён вложенных файлов"},"Get list of countries of the SMS receiving service.":{"ru":"Получить список стран сервиса приема SMS."},"Get list of file attachment names of the message from server and save":{"ru":"Получить список имён вложенных файлов письма с сервера и сохранить"},"Get list of sites of the SMS receiving service.":{"ru":"Получить список сайтов сервиса приема SMS."},"Get list of supported hashing algorithms.":{"ru":"Получить список поддерживаемых алгоритмов хеширования."},"Get message":{"ru":"Получить"},"Get message attachments from server and save":{"ru":"Получить вложения письма с сервера и сохранить"},"Get message body (raw) from server and save":{"ru":"Получить тело письма (raw) с сервера и сохранить"},"Get message body (text\/html) from server and save":{"ru":"Получить тело письма (text\/html) с сервера и сохранить"},"Get message body (text\/plain) from server and save":{"ru":"Получить тело письма (text\/plain) с сервера и сохранить"},"Get message date from server and save":{"ru":"Получить дату письма с сервера и сохранить"},"Get message flags from server and save":{"ru":"Получить флаги письма с сервера и сохранить"},"Get message id":{"ru":"Получить id письма"},"Get message recipient from server and save":{"ru":"Получить получателя письма с сервера и сохранить"},"Get message sender from server and save":{"ru":"Получить отправителя письма с сервера и сохранить"},"Get message size":{"ru":"Получить размер письма"},"Get message size from server and save":{"ru":"Получить размер письма с сервера и сохранить"},"Get message subject":{"ru":"Получить тему письма"},"Get message subject from server and save":{"ru":"Получить тему письма с сервера и сохранить"},"Get message technical headers from server and save":{"ru":"Получить технические заголовки письма с сервера и сохранить"},"Get number of items in resource.":{"ru":"Получить количество элементов в ресурсе."},"Get number of items in the list.":{"ru":"Получить количество элементов в списке."},"Get number of records matching criteria.":{"ru":"Получить количество записей удовлетворяющих фильтрам."},"Get phone number from the SMS receiving service.":{"ru":"Получить номер телефона от сервиса приема SMS."},"Get receiving date":{"ru":"Получить дату получения"},"Get recipient of message":{"ru":"Получить получателя письма"},"Get resource loaction. Resource location is filename for LinesFromFile resource, url for LinesFromUrl and directory location for FilesFromDirectory resource type.":{"ru":"Получить расположение ресурса. Расположение ресурса - путь к файлу для ресурса с типом 'Из файла', url для ресурса с типом 'Из ссылки' и путь к папке для типа ресурса 'Файлы из папки'."},"Get sender of message":{"ru":"Получить отправителя письма"},"Get technical headers of message":{"ru":"Получить технические заголовки письма"},"Get the balance of the SMS receiving service.":{"ru":"Получить баланс сервиса приема SMS."},"Get the color of a pixel by its coordinates in the image.":{"ru":"Получить цвет пикселя по его координатам на изображении."},"Get the content of the last message in the specified folder.":{"ru":"Получить содержимое последнего письма в указанной папке."},"Get the content of the message with the specified id.":{"ru":"Получить содержимое письма с указанным id."},"Get the count of available numbers on the SMS receiving service.":{"ru":"Получить количество доступных номеров на сервисе приема SMS."},"Get the current date and time.":{"ru":"Получить текущую дату и время."},"Get the day of the month from the specified date.":{"ru":"Получить день месяца из указанной даты."},"Get the day of the week from the specified date.":{"ru":"Получить день недели из указанной даты."},"Get the day of the year from the specified date.":{"ru":"Получить день года из указанной даты."},"Get the difference in seconds between the specified dates.":{"ru":"Получить разницу в секундах между указанными датами."},"Get the directory of the specified path.":{"ru":"Получить директорию указанного пути."},"Get the file extension of the specified path.":{"ru":"Получить расширение файла указанного пути."},"Get the first item from the specified list.":{"ru":"Получить первый элемент из указанного списка."},"Get the full installation path.":{"ru":"Получить полный путь установки."},"Get the full path to the project directory.":{"ru":"Получить полный путь к директории проекта."},"Get the full path to the project file.":{"ru":"Получить полный путь к файлу проекта."},"Get the item index with a specific value from the list.":{"ru":"Получить индекс элемента с определенным значением из списка."},"Get the last item from the specified list.":{"ru":"Получить последний элемент из указанного списка."},"Get the last part of the specified path.":{"ru":"Получить последнюю часть указанного пути."},"Get the month from the specified date.":{"ru":"Получить месяц из указанной даты."},"Get the number of characters from a string.":{"ru":"Получить количество символов из строки."},"Get the number of hours from the specified date.":{"ru":"Получить число часов из указанной даты."},"Get the number of messages that match the specified criteria.":{"ru":"Получить количество писем соответствующих указанным критериям."},"Get the number of milliseconds from the specified date.":{"ru":"Получить число миллисекунд из указанной даты."},"Get the number of minutes from the specified date.":{"ru":"Получить число минут из указанной даты."},"Get the number of seconds from the specified date.":{"ru":"Получить число секунд из указанной даты."},"Get the number of substrings in the string.":{"ru":"Получить количество подстрок в строке."},"Get the number of successful executions of the current script.":{"ru":"Получить количество успешных выполнений текущего скрипта."},"Get the number of the current working thread.":{"ru":"Получить номер текущего работающего потока."},"Get the number of unsuccessful executions of the current script.":{"ru":"Получить количество неудачных выполнений текущего скрипта."},"Get the number of words from a string.":{"ru":"Получить количество слов из строки."},"Get the random item from the specified list.":{"ru":"Получить случайный элемент из указанного списка."},"Get the system path with the specified name.":{"ru":"Получить системный путь с указанным именем."},"Get the timezone of an existing date.":{"ru":"Получить часовой пояс существующей даты."},"Get the year from the specified date.":{"ru":"Получить год из указанной даты."},"Gets 1 - 100 record from database":{"ru":"Получить записи от 1 до 100 из базы"},"Gets 1 - 1000 record from database":{"ru":"Получить записи от 1 до 1000 из базы"},"Gets 1001 - 2000 record from database":{"ru":"Получить записи от 1001 до 2000 из базы"},"Getting fingerprint with PerfectCanvas can only performed in single thread, you can still use several threads, but rest of the threads will be waiting, while only one will work.":{"ru":"Получение отпечатка с помощью PerfectCanvas может выполняться только в одном потоке, вы можете использовать несколько потоков, но остальные потоки будут ожидать, а работать будет только один."},"Getting fingerprint with PerfectCanvas may require some time depending on request queue length and tag combination that you are using. If you are using combination of tags which are rare, this can be slow. Use * as input for \"Tags\" field to speed up process. Obtaining fingerprint for popular service may also be slow.":{"ru":"Получение отпечатка с помощью PerfectCanvas может занять некоторое время в зависимости от длины очереди запросов и используемой комбинации тегов. Если вы используете комбинацию тегов, которые встречаются редко, это может привести к медленной работе этого действия. Используйте * в качестве значения для поля \"Теги\", чтобы ускорить процесс. Получение отпечатка для популярного сервиса также может быть медленным."},"Ghana":{"ru":"Гана"},"Gibraltar":{"ru":"Гибралтар"},"Give control over the browser to user.":{"ru":"Передать контроль над браузером пользователю."},"Gmail also requires to":{"ru":"Gmail также требует"},"Going beyond":{"ru":"Выход за рамки"},"Going beyond chance":{"ru":"Шанс выхода за рамки"},"Going beyond the screen and returning back.":{"ru":"Выход за границы экрана и возврат обратно."},"Greece":{"ru":"Греция"},"Greedy":{"ru":"Жадный"},"Greedy Usage Algorithm":{"ru":"Жадный алгоритм"},"Grenada":{"ru":"Гренада"},"Group description, which you are creating. Can be any string.":{"ru":"Описание группы, которую вы создаете. Может быть любой строкой."},"Group id":{"ru":"Ид группы"},"Group id where record will be inserted. It can be obtained from \"Create Group\" action or from \"Get Group List\". Leave blank to insert in last created group.":{"ru":"Ид группы, куда будет вставлена запись. Его можно получить как результат выполнения действия \"Создать Группу\" или из действия \"Получить Список Групп\". Оставьте поле пустым, чтобы вставить запись в последнюю созданную группу."},"Group id will be written to this variable after action will be completed. You can use this id to interact with this group letter, for example, delete it or change.":{"ru":"Идентификатор группы будет записан в эту переменную после того, как действие будет завершено. Вы можете использовать этот идентификатор для взаимодействия с группой после завершение действия, например, удалить ее или изменить описание."},"Group id, in which record will be moved. It can be obtained from \"Create Group\" action or from \"Get Group List\". Leave blank to delete record from all groups.":{"ru":"Идентификатор группы, в которую будет перенесена запись. Его можно получить как результат выполнения действия \"Создать Группу\" или из действия \"Получить Список Групп\". Оставьте поле пустым, чтобы удалить запись из всех групп."},"Group id, which will be changed. It can be obtained from \"Create Group\" action or from \"Get Group List\". Leave blank to change last created group.":{"ru":"Идентификатор группы, которая будет изменена. Его можно получить как результат выполнения действия \"Создать Группу\" или из действия \"Получить Список Групп\". Оставьте поле пустым, чтобы изменить последнюю созданную группу."},"Group id, which will be deleted. It can be obtained from \"Create Group\" action or from \"Get Group List\"":{"ru":"Идентификатор группы, которая будет удалена. Его можно получить как результат выполнения действия \"Создать Группу\" или из действия \"Получить Список Групп\""},"Group id, which will be duplicated. It can be obtained from \"Create Group\" action or from \"Get Group List\". Leave blank to copy last created group.":{"ru":"Идентификатор группы, которая будет скопирована. Его можно получить как результат выполнения действия \"Создать Группу\" или из действия \"Получить Список Групп\". Оставьте поле пустым, чтобы скопировать последнюю созданную группу."},"Group list":{"ru":"Список групп"},"Group name, which you are creating. Can be any string.":{"ru":"Имя группы, которую вы создаете. Может быть любой строкой."},"Groups are analogous of files. Same as each file may contain several lines, each group may contain several records.":{"ru":"Группы являются аналогом файлов. Так же, как каждый файл может содержать несколько строк, каждая группа может содержать несколько записей."},"Groups are displayed and may be edited in database manager":{"ru":"Группы отображаются и могут быть отредактированы в менеджере базы данных"},"Groups may be created manually in database manager":{"ru":"Группы могут быть созданы вручную в менеджере базы данных"},"Guadeloupe":{"ru":"Гваделупа"},"Guatemala":{"ru":"Гватемала"},"Guinea":{"ru":"Гвинея"},"Guinea-Bissau":{"ru":"Гвинея-Бисау"},"Guyana":{"ru":"Гайана"},"Haiti":{"ru":"Гаити"},"Has fingerprint":{"ru":"Содержит отпечаток"},"Has proxy":{"ru":"Содержит прокси"},"Headings":{"ru":"Заголовки"},"Hello, my number is +1 323 123-4567":{"ru":"Здравствуйте, мой номер +1 323 123-4567"},"Honduras":{"ru":"Гондурас"},"Hong Kong":{"ru":"Гонконг"},"Horizontal":{"ru":"Горизонтально"},"Horizontal align":{"ru":"Горизонтальное выравнивание"},"Host":{"ru":"Хост"},"Hostname or ip (IPv4 or IPv6).":{"ru":"Имя хоста или ip (IPv4 или IPv6)."},"Hour. From 0 to 23":{"ru":"Час. От 0 до 23"},"Hours":{"ru":"Часы"},"Hours to add. Can be negative.":{"ru":"Прибавить часов. Может быть отрицательным."},"Hover position":{"ru":"Позиция для наведения"},"How canvas data is being replaced?":{"ru":"Как происходит замена данных canvas?"},"How to <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/core.telegram.org\/bots#3-how-do-i-create-a-bot')\">create bot<\/a> token and <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('http:\/\/stackoverflow.com\/questions\/32423837\/telegram-bot-how-to-get-a-group-chat-id-ruby-gem-telegram-bot')\">get chat id<\/a>":{"ru":"<a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/habrahabr.ru\/post\/306222\/')\">Как создать бота и получить chat id<\/a>"},"How to get PerfectCanvas request?":{"ru":"Как получить запрос PerfectCanvas?"},"How well the image fits. 100 - exactly fits, 0 - does not fit at all.":{"ru":"Насколько хорошо подходит изображение. 100 - точно подходит, 0 - не подходит совсем."},"However, you may get fingerprints for free with Microsoft Windows,Chrome tags and with requests limits. In order to run free version, leave 'Service key' field blank.":{"ru":"Тем не менее, вы можете бесплатно получать отпечатки с тегами Microsoft Windows,Chrome и с ограничениями на количество запросов. Чтобы использовать бесплатную версию, оставьте поле 'Ключ сервиса' пустым."},"Html to apply query is obtained from 'Text To Apply' setting.":{"ru":"Html для применения xpath запроса получается из настройки 'Текст для применения xpath'."},"Hungary":{"ru":"Венгрия"},"Iceland":{"ru":"Исландия"},"Icons":{"ru":"Иконки"},"Iddle":{"ru":"Бездействие"},"Identifier for thread, where function will start. By default function will be started in new thread, but you can change that behavior by modifying this value.":{"ru":"ID потока, в котором будет запускаться функция. По умолчанию функция будет запущена в новом потоке, но вы можете изменить это поведение, задав данное значение."},"Idle emulation":{"ru":"Эмуляция бездействия"},"Idle emulation is a more plausible replacement for the \"<a href=\"#!\/sleep\">Sleep<\/a>\" action. It emulates viewing the current page as if the user is exploring it or searching for something on it.":{"ru":"Эмуляция бездействия - более правдоподобная замена действия \"<a href=\"#!\/sleep\">Спать<\/a>\". Таким образом выполняется просмотр текущей страницы, как будто пользователь изучает её или что то ищет на ней."},"Idle for 5 minutes":{"ru":"Бездействие в течение 5 минут"},"Idle for one minute":{"ru":"Бездействие в течение одной минуты"},"Idle type and filling":{"ru":"Тип ожидания и его наполнение"},"If \"Additional processing\" is checked, than this action will process dynamic templates, i.e template will be taken from variable. Consider following example: you have file with content \"{Hello|Hi}, &lt;EMaleName&gt;{!|}\" and want to expand it with BAS. At first you have to load file to variable [[FILE_CONTENT]]. If you put [[FILE_CONTENT]] to template action and don't set \"Additional processing\" flag, that result will be the same as original file content. But if you set this flag, BAS will expand [[FILE_CONTENT]] first and then expend result again, finally you will get something like this \"Hello, John!\".":{"ru":"Если выбрана установка \"Дополнительная обработка\", то это действие будет работать с динамическим шаблоном, т. е. шаблон будет взят из переменной. Рассмотрим следующий пример: у вас есть файл с содержанием \"{Hello|Hi}, &lt;EMaleName&gt; {!|}\" и вам нужно его обработать с помощью BAS. Сначала нужно загрузить файл в переменную [[FILE_CONTENT]]. Если вы поместите [[FILE_CONTENT]] в действие \"шаблон\" и не устанавливаете флаг \"Дополнительная обработка\", то результат будет таким же, как и исходное содержимое файла. Но если вы установите этот флаг, BAS сначала заменит переменную [[FILE_CONTENT]] на содержание файла, а затем проведет замену переменых, спинтакса и ресурсов уже в содержании файла. Наконец, результат будет похож на \"Hi, John!\"."},"If \"Thread id\" parameter contains list, each thread from this list will be stopped.":{"ru":"Если параметр \"ID потока\" содержит список, то каждый поток из этого списка будет остановлен."},"If \"Use PerfectCanvas\" option is set to true and data for certain image is present inside fingerprint, image will be replaced with data obtained from real device.":{"ru":"Если настройка \"Использовать PerfectCanvas\" включена и данные для определенного изображения присутствуют в отпечатке, изображение будет заменено данными, полученными из реального устройства."},"If 'Only write to file\/database' is selected, then container with list of data inside resources won't be updated, only actual resource source will be change, like file or database.":{"ru":"Если выбрана настройка 'Только добавить в файл\/базу', то список данных внутри ресурса не будет обновляться, будет изменен только источник ресурса, например файл или база данных."},"If PerfectCanvas data for specific image is not available, or PerfectCanvas is not available at all, either noise will be added to image, or image obtained from current device will be used. This behavior depends on following settings: \"Add noise to canvas data\", \"Add noise to WebGL data\" and \"Add noise to audio data\".":{"ru":"Если данных PerfectCanvas для конкретного изображения нет, или PerfectCanvas вообще недоступен, к изображению будет добавлен шум, или будет использовано изображение, полученное с текущего устройства. Это поведение зависит от следующих настроек: \"Добавить шум в данные Canvas\", \"Добавить шум в данные WegGL\" и \"Добавить шум в данные Audio\"."},"If a resource is specified in the \"File path\" parameter, resource location will be used.":{"ru":"Если в параметре \"Путь к файлу\" указан ресурс, вместо содержимого ресурса будет браться его расположение."},"If activated, after successfully receiving the message will be deleted from the mailbox. When this parameter is enabled, the \"Set flags after receiving\" parameter is ignored.":{"ru":"Если активирован, то после удачного получения письмо будет удалено с почтового ящика. При активации этого параметра, параметр \"Установить флаги после получения\" игнорируется."},"If activated, after successfully receiving the message, one or more of the specified flags will be set for it. This parameter is ignored if the \"Delete message after receiving\" parameter is enabled.":{"ru":"Если активирован, то после удачного получения письма для него будет установлен один или несколько указанных флагов. Этот параметр игнорируется, если активирован параметр \"Удалить письмо после получения\"."},"If an error occurred while execute action or code is not received within timeout specified in additional settings, the thread will stop with fail message. If you want to continue thread, use \"Ignore errors\" action.":{"ru":"Если во время выполнения действия произойдет ошибка или код не будет получен в течение таймаута, указанного в дополнительных настройках, поток остановится с сообщением об ошибке. Если вы хотите продолжить работу, используйте действие \"Игнорировать ошибки\"."},"If an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use \"Ignore errors\" action.":{"ru":"Если во время выполнения действия произойдет ошибка, поток остановится с сообщением об ошибке. Если вы хотите продолжить работу, используйте действие \"Игнорировать ошибки\"."},"If an error occurs during parsing, an empty string will be returned.":{"ru":"Если во время парсинга произойдёт ошибка, будет возвращена пустая строка."},"If an invalid URL is specified, the thread will stop with fail message. If you want to continue thread, use \"Ignore errors\" action, or deactivate the corresponding parameter in the additional settings.":{"ru":"Если указан недействительный URL, поток остановится с сообщением об ошибке. Если вы хотите продолжить работу, используйте действие \"Игнорировать ошибки\", или деактивируйте соответствующий параметр в дополнительных настройках."},"If another action will require access to server, connection will be reused.":{"ru":"Если другое действие снова потребует доступа к серверу, соединение будет повторно использовано."},"If any of the paths is not a string, the thread will stop with fail message. If you want to continue thread, use \"Ignore errors\" action.":{"ru":"Если в качестве какого либо из путей указана не строка, поток остановится с сообщением об ошибке. Если вы хотите продолжить работу, используйте действие \"Игнорировать ошибки\"."},"If both \"Capitalize all words\" and \"All other letters in lowercase\" are both enabled, the first letters in all words will be uppercase and all other lowercase.":{"ru":"Если активированы оба параметра \"Сделать все слова заглавными\" и \"Все остальные буквы в нижний регистр\", то первые буквы во всех словах будут иметь верхний регистр, а все остальные нижний регистр."},"If both parameters \"From Index\" and \"To Index\" are specified, all characters from specified to specified will be received.":{"ru":"Если оба параметра \"С индекса\" и \"До индекса\" указаны, будут получены все символы с указанного до указанного."},"If both parameters \"Left substring\" and \"Right substring\" are specified, all characters from the specified substring to the specified substring will be received.":{"ru":"Если оба параметра \"Левая подстрока\" и \"Правая подстрока\" указаны, будут получены все символы от указанной подстроки до указанной подстрки."},"If captcha has any description, it can be added with this field.":{"ru":"Если у captcha есть какое-либо описание, его можно добавить в это поле."},"If connection is already closed or not open yet, this action will do nothing.":{"ru":" Если соединение уже закрыто или ещё не открыто, это действие ничего не сделает."},"If debug is enabled, all queries and their results will be displayed in the log.":{"ru":"Если отладка включена, все запросы и их результаты будут выводится в лог."},"If debug is enabled, then during idle emulation, detailed information about the status of its execution will be displayed in the log.":{"ru":"Если отладка включена, то во время эмуляции бездействия в лог будет выводится подробная информация о статусе её выполнения."},"If enabled and the URL contains a relative protocol, then the protocol from the \"Default protocol\" parameter will be added to the URL.":{"ru":"Если активирован и URL содержит относительный протокол, то к URL будет добавлен протокол из параметра \"Протокол по умолчанию\"."},"If enabled, authentication data will be stripped from the URL.":{"ru":"Если активирован, то из URL будут вырезаны данные аутентификации."},"If enabled, the WWW will be stripped from the URL.":{"ru":"Если активирован, то из URL будут вырезан WWW."},"If enabled, the action will not fail if the messages is not found according to the specified criteria, but will wait for the specified time, and only if the messages is not found within the specified time, the action will fail.":{"ru":"Если активирован, то действие не завершится ошибкой, если письма не будут найдены по заданным критериям, а будет ждать их указанное время, и только если за указанное время письма не будут найдены, действие завершится ошибкой."},"If enabled, the fragment will be stripped from the URL.":{"ru":"Если активирован, то из URL будут вырезан фрагмент\/якорь."},"If enabled, the http protocol will be replaced with https in the URL.":{"ru":"Если активирован, то в URL протокол http будут заменен на https."},"If enabled, the https protocol will be replaced with http in the URL.":{"ru":"Если активирован, то в URL протокол https будут заменен на http."},"If enabled, the protocol will be stripped from the URL.":{"ru":"Если активирован, то из URL будут вырезан протокол."},"If enabled, the query parameters will be sorted alphabetically by name.":{"ru":"Если активирован, то параметры запроса будут отсортированы по имени в алфавитном порядке."},"If enabled, the query will be stripped from the URL.":{"ru":"Если активирован, то из URL будут вырезан запрос."},"If enabled, the specified flags will be added to the existing flags, rather than replacing them.":{"ru":"Если активирован, то указанные флаги будут добавлены к существующим, а не заменят их."},"If enabled, the trailing slash will be removed from the URL.":{"ru":"Если активирован, то из URL будет удален завершающий слэш."},"If enabled, then all links will be extracted from the retrieved message body (raw) and stored in the variable below.":{"ru":"Если активирован, то из полученного тела письма (raw) будут извлечены все ссылки и сохранены в переменную указанную ниже."},"If enabled, then all links will be extracted from the retrieved message body (text\/html) and stored in the variable below.":{"ru":"Если активирован, то из полученного тела письма (text\/html) будут извлечены все ссылки и сохранены в переменную указанную ниже."},"If enabled, then all links will be extracted from the retrieved message body (text\/plain) and stored in the variable below.":{"ru":"Если активирован, то из полученного тела письма (text\/plain) будут извлечены все ссылки и сохранены в переменную указанную ниже."},"If enabled, then all the headers of message will be retrieved from the server and stored in the variable below as an object.":{"ru":"Если активирован, то все заголовки письма будут получены с сервера и сохранены в переменную, указанную ниже, в виде объекта."},"If enabled, then the action will not fail if the message is not found according to the specified criteria, but will wait for the specified time, and only if the message is not found within the specified time, the action will fail.":{"ru":"Если активирован, то действие не завершится ошибкой, если письмо не будет найдено по заданным критериям, а будет ждать его указанное время, и только если за указанное время письмо не будет найдено, действие завершится ошибкой."},"If enabled, then the attachments of the message will be retrieved from the server and saved to the computer as files with a random name, a list of objects with information about attachments will be written to the variable specified below the mask.":{"ru":"Если активирован, то вложения письма будут получены с сервера и сохранены на компьютер в виде файлов со случайным названием, в переменную указанную ниже маски, будет записан список объектов с информацией о вложениях."},"If enabled, then the body of the message in html format (text\/html) will be retrieved from the server and stored in the variable below.":{"ru":"Если активирован, то тело письма в html формате (text\/html) будет получено с сервера и сохранено в переменную указанную ниже."},"If enabled, then the body of the message in raw form (raw) will be retrieved from the server and stored in the variable below.":{"ru":"Если активирован, то тело письма в сыром виде (raw) будет получено с сервера и сохранено в переменную указанную ниже."},"If enabled, then the body of the message in text format (text\/plain) will be retrieved from the server and stored in the variable below.":{"ru":"Если активирован, то тело письма в текстовом формате (text\/plain) будет получено с сервера и сохранено в переменную указанную ниже."},"If enabled, then the date of the message will be retrieved from the server and stored in the variable below.":{"ru":"Если активирован, то дата письма будет получена с сервера и сохранена в переменную указанную ниже."},"If enabled, then the list of filenames attached to the message will be retrieved from the server and stored in the variable below.":{"ru":"Если активирован, то список имен файлов, прикрепленных к письму, будет получен с сервера и сохранен в переменную указанную ниже."},"If enabled, then the list of message flags will be retrieved from the server and stored in the variable below.":{"ru":"Если активирован, то список флагов письма будет получен с сервера и сохранен в переменную указанную ниже."},"If enabled, then the message id will be stored in the variable below.":{"ru":"Если активирован, то id письма будет сохранен в переменную указанную ниже."},"If enabled, then the recipient of the message will be retrieved from the server and stored in the variable below.":{"ru":"Если активирован, то получатель письма будет получен с сервера и сохранен в переменную указанную ниже."},"If enabled, then the sender of the message will be retrieved from the server and stored in the variable below.":{"ru":"Если активирован, то отправитель письма будет получен с сервера и сохранен в переменную указанную ниже."},"If enabled, then the size of the message will be retrieved from the server and stored in the variable below.":{"ru":"Если активирован, то размер письма будет получен с сервера и сохранен в переменную указанную ниже."},"If enabled, then the subject of the message will be retrieved from the server and stored in the variable below.":{"ru":"Если активирован, то тема письма будет получена с сервера и сохранена в переменную указанную ниже."},"If enabled, trailing slashes will be removed from the path.":{"ru":"Если активирован, то из пути будет удалены завершающие слэши."},"If enabled, when specifying the \"Query\" parameter, its value will completely replace the old query string. If deactivated, when specifying the \"Query\" parameter, its value will be merged with the value of the old query string.":{"ru":"Если активирован, то при указании параметра \"Запрос\" его значение будет полностью заменять старую строку запроса. Если деактивирован, то при указании параметра \"Запрос\" его значение будет объединено со значением старой строки запроса."},"If ip was parsed correctly. This values must always be checked before others.":{"ru":"Эта переменная возвращает значение, которое идентифицирует, был ли ip распознан корректно. Только если значение этой переменной равно true, могут быть использованы другие возвращаемые значения."},"If line is":{"ru":"Если строка"},"If negative, indicates an offset from the end of the string.":{"ru":"Если отрицателен, то указывает смещение от конца строки."},"If new function will be started in thread, that already has function started, new function will be postponed. This new function will be started immediately after old one gets finished.":{"ru":"Если в потоке будет запущена функция, в то время, пока идет выполнение какой-то другой функции, то новая будет отложена. Она будет запущена сразу после завершения старой."},"If regexp is":{"ru":"Если регулярное выражение"},"If resource is created in writeonly mode, this action can add data inside it. In that case, it would write string from 'Data' parameter into file selected by user during 'Select resources' stage on script start":{"ru":"Если ресурс создан в режиме 'только запись', то это действие может добавлять в него данные. В этом случае он будет записывать строку из параметра 'Данные' в файл, выбранный пользователем на этапе выбора ресурсов при запуске скрипта"},"If script outputs some data like user accounts or parsed posts, a good practice would be to create group during script start(in function OnApplicationStart) and place all data inside this group. This will help to discern data for different script lauches.":{"ru":"Если скрипт в результате работы получает некоторые данные, такие как зарегистрированные аккаунты или ссылки на посты, то вы можете создать группу во время запуска скрипта (в функции OnApplicationStart) и помещать все данные внутрь этой группы. Это поможет разделить данные созданные при разных запусках скрипта."},"If separator is not specified, the string will be split character by character, each character will be a separate item of the list.":{"ru":"Если разделитель не будет указан, то строка будет разделена посимвольно, каждый символ будет отдельным элементом списка."},"If some of the parameters (\"Item 1\", \"Item 2\", \"Item 3\", \"List of items\") are not specified, all parameters will be used except for them.":{"ru":"Если какие-то из параметров (\"Элемент 1\", \"Элемент 2\", \"Элемент 3\", \"Список элементов\") не указаны, будут использованы все параметры кроме них."},"If some of the parameters (\"Path 1\", \"Path 2\", \"Path 3\", \"List of paths\") are not specified, all parameters will be used except for them.":{"ru":"Если какие-то из параметров (\"Путь 1\", \"Путь 2\", \"Путь 3\", \"Список путей\") не указаны, будут использованы все параметры кроме них."},"If some of the parameters (\"String 1\", \"String 2\", \"String 3\", \"List of strings\") are not specified, all parameters will be used except for them.":{"ru":"Если какие-то из параметров (\"Строка 1\", \"Строка 2\", \"Строка 3\", \"Список строк\") не указаны, будут использованы все параметры кроме них."},"If specified folder already exists, than browser will load all data from it.":{"ru":"Если указанная папка уже существует, браузер будет загружать из нее данные профиля."},"If specified folder doesn't exist it will be created.":{"ru":"Если заданная папка не существует, она будет создана."},"If string matches":{"ru":"Подходит ли строка по рег выражение"},"If the \"All other letters in lowercase\" parameter is enabled, then all letters that were not converted to uppercase will be converted to lowercase.":{"ru":"Если активирован параметр \"Все остальные буквы в нижний регистр\", то все буквы, которые не были преобразованы в верхний регистр, будут преобразованы в нижний регистр."},"If the \"Capitalize all words\" parameter is enabled, the first letters in all words will be uppercase.":{"ru":"Если активирован параметр \"Сделать все слова заглавными\", то первые буквы во всех словах будут иметь верхний регистр."},"If the \"Clear old query string\" parameter is activated, then when the \"Query\" parameter is specified, its value will completely replace the old query string in the specified URL.":{"ru":"Если активирован параметр \"Очистить старую строку запроса\", то при указании параметра \"Запрос\" его значение будет полностью заменять старую строку запроса в указанном URL."},"If the \"Clear old query string\" parameter is disabled, specifying the \"Query\" parameter will merge its value with the value of the old query string in the specified URL. If an item with the same name is present in both the old and the new query, then only the value from the new query will be added to the final URL. Items present only in the old or only in the new query will be added to the final URL unchanged. Items new query containing <code>\"-BAS-CLEAR-\"<\/code> will be removed from the final URL.":{"ru":"Если параметр \"Очистить старую строку запроса\" деактивирован, то при указании параметра \"Запрос\" его значение будет объединено со значением старой строки запроса в указанном URL. Если элемент с одинаковым именем присутствует как в старом, так и в новом запросе, то в итоговый URL будет добавлено только значение из нового запроса. Элементы, присутствующие только в старом или только в новом запросе, будут добавлены в итоговый URL без изменений. Элементы нового запроса содержащие <code>\"-BAS-CLEAR-\"<\/code>, будут удалены из итогового URL."},"If the \"From index\" and \"To index\" parameters are not specified, the entire string will be received.":{"ru":"Если параметры \"С индекса\" и \"До индекса\" не указаны, будут получена вся строка."},"If the \"From index\" parameter is not specified and the \"To index\" parameter is specified, all characters from the first to the specified one will be received.":{"ru":"Если параметр \"С индекса\" не указан, а параметр \"До индекса\" указан, будут получены все символы с первого до указанного."},"If the \"From index\" parameter is specified and the \"To index\" parameter is not specified, all characters from the specified to the end of the string will be received.":{"ru":"Если параметр \"С индекса\" указан, а параметр \"До индекса\" не указан, будут получены все символы с указанного до конца строки."},"If the \"Left substring\" and \"Right substring\" parameters are not specified, the entire string will be received.":{"ru":"Если параметры \"Левая подстрока\" и \"Правая подстрока\" не указаны, будут получена вся строка."},"If the \"Left substring\" parameter is not specified and the \"Right substring\" parameter is specified, all characters from the first to the specified substring will be received.":{"ru":"Если параметр \"Левая подстрока\" не указан, а параметр \"Правая подстрока\" указан, будут получены все символы с первого до указанной подстрки."},"If the \"Left substring\" parameter is specified and the \"Right substring\" parameter is not specified, all characters from the specified substring to the end of the string will be received.":{"ru":"Если параметр \"Левая подстрока\" указан, а параметр \"Правая подстрока\" не указан, будут получены все символы от указанной подстроки до конца строки."},"If the \"Path\" parameter is not a string, the thread will stop with fail message. If you want to continue thread, use \"Ignore errors\" action.":{"ru":"Если в параметр \"Путь\" будет указана не строка, поток остановится с сообщением об ошибке. Если вы хотите продолжить работу, используйте действие \"Игнорировать ошибки\"."},"If the \"Remove empty lines\" parameter is activated, then all empty lines will be removed from the resulting list.":{"ru":"Если активирован параметр \"Удалить пустые строки\", то из итогового списка будут удалены все пустые строки."},"If the \"Remove trailing slashes\" parameter is enabled, trailing slashes will be removed from the path, for example, path <code>\"С:\\path\\\"<\/code> will be normalized to <code>\"С:\/path\"<\/code>.":{"ru":"Если активирован параметр \"Удалите завершающие слэши\", то из пути будет удалены завершающие слэши, например, путь <code>\"С:\\path\\\"<\/code> будет нормализирован в <code>\"С:\/path\"<\/code>."},"If the element contains a separator, then it will be enclosed in quotes.":{"ru":"Если элемент содержит разделитель, то он будет заключен в кавычки."},"If the index is a negative number, then it is interpreted as the number of characters from the end of the string.":{"ru":"Если индекс отрицательное число, то он интерпретируется как количество символов с конца строки."},"If the message does not contain a body with this type, then an empty string will be stored.":{"ru":"Если письмо не содержит тела с таким типом, то будет сохранена пустая строка."},"If the number of variables is greater than the number of items in the string, then an empty string will be written to the excess variables.":{"ru":"Если количество переменных больше, чем количество элементов в строке, то в лишние переменные будет записана пустая строка."},"If the object at the specified query is not found or will not contain elements, the result will be zero.":{"ru":"Если объект по указанному запросу не будет найден или не будет содержать элементов, результатом будет ноль."},"If the parameter \"Carriage return\" is activated, then a carriage return will be added before the line break.":{"ru":"Если активирован параметр \"Возврат каретки\", то перед переносом строки будет добавлен возврат каретки."},"If the parameter \"Path\" or \"File extension to remove\" is not a string, the thread will stop with fail message. If you want to continue thread, use \"Ignore errors\" action.":{"ru":"Если в параметр \"Путь\" или \"Удаляемое расширение файла\" будет указана не строка, поток остановится с сообщением об ошибке. Если вы хотите продолжить работу, используйте действие \"Игнорировать ошибки\"."},"If the required service is not in the list of available ones, but it works through an API similar to the selected service, then you can specify its server url in the corresponding parameter located in the additional settings.":{"ru":"Если нужного сервиса нет в списке доступных, но он работает через API аналогичный выбранному сервису, то вы можете указать его url сервера в соответствующий параметр находящийся в дополнительных настройках."},"If the required service is not in the list of available ones, but it works through an API similar to the selected service, then you can specify required server URL in the <code>Service URL<\/code> field located in the additional settings.":{"ru":"Если нужного сервиса нет в списке доступных, но он работает через API аналогичный выбранному сервису, вы можете указать необходимый URL сервера в поле <code>URL сервиса<\/code>, находящееся в дополнительных настройках."},"If the result of the action is a single key, a list containing this key will be returned.":{"ru":"Если результатом действия будет один ключ, будет возвращён список, содержащий этот ключ."},"If the result of the action is a single value, a list containing this value will be returned.":{"ru":"Если результатом действия будет одно значение, будет возвращён список, содержащий это значение."},"If the separator does not occur in the original string, then the resulting list will contain one element, the original string.":{"ru":"Если разделитель не встречается в исходной строке, то итоговый список будет содержать один элемент, исходную строку."},"If the service does not support the specified status, then the action will do nothing.":{"ru":"Если сервис не поддерживает указанный статус, то действие ничего не сделает."},"If the status cannot be changed or an error occurred while execute action, the thread will stop with fail message. If you want to continue thread, use \"Ignore errors\" action.":{"ru":"Если не удастся изменить статус или во время выполнения действия произойдет ошибка, поток остановится с сообщением об ошибке. Если вы хотите продолжить работу, используйте действие \"Игнорировать ошибки\"."},"If the string is encoded in base64, activate the \"String is base64 encoded\" parameter located in the additional settings. In that case, string will be treated as raw data encoded in base64.":{"ru":"Если строка закодирована в base64, активируйте параметр \"Строка закодирована в base64\", расположенный в дополнительных настройках. В этом случае строка будет рассматриваться как необработанные данные, закодированные в base64."},"If the value is <code>true<\/code> and the username is an email address along with a domain, then the action will try to automatically determine the server address, port and encryption type.":{"ru":"Если значение равно <code>true<\/code> и в качестве логина указан адрес электронной почты вместе с доменом, то действие попытается автоматически определить адрес сервера, порт и тип шифрования."},"If there is no period in the last part or there are no characters before the last period, then the action will return an empty string.":{"ru":"Если в последней части пути нет точки или перед последней точкой нет символов, то действие вернет пустую строку."},"If there was error during function call, use THREAD_IS_SUCCESS and THREAD_ERROR to check it and obtain error message.":{"ru":"Если во время вызова функции произошла ошибка, используйте переменную THREAD_IS_SUCCESS и THREAD_ERROR, чтобы проверить было ли выполнение успешным и получить сообщение об ошибке."},"If this settings is set to true battery API will show different values for each thread, this prevents sites for detecting your real identity. In case if device from which fingerprint was obtained doesn't have battery API, 100% charge level will always be returned.":{"ru":"Если в этом поле установлено значение true, заряд батареи будет показывать разные значения для каждого потока, что предотвращает обнаружение вас сайтом. В случае, если устройство, из которого был получен отпечаток, не имеет API для работы с батареей, всегда будет возвращен уровень заряда 100%."},"If this settings is set to true, PerfectCanvas replacement will be enabled. Fingerprint must contain PerfectCanvas data in order to make it work. See \"Get fingerprint\" action for explanation.":{"ru":"Если в этом поле установлено значение true, замена данных PerfectCanvas будет включена. Чтобы это работало, отпечаток должен содержать данные PerfectCanvas. Смотрите действие \"Получить отпечаток\" чтобы узнать больше."},"If this settings is set to true, WebGL will be enabled, noise will be added to WebGL canvas and your hardware properties, like video card vendor and renderer, will be changed":{"ru":"Если в этом поле установлено значение true, WebGL будет включен, шум будет добавлен к изображениям получаемым из элементов отображаемым с помощью WebGL, а ваши реальные свойства видеокарты будут изменены"},"If this settings is set to true, audio will be enabled, noise will be added to sound and your hardware properties, like sample rate and naumber of channels, will be changed":{"ru":"Если в этом поле установлено значение true, audio api будет включен, шум будет добавлен к звуку, а ваши реальные свойства железа будут изменены"},"If this settings is set to true, canvas will be enabled and noise will be added to all data returned from canvas":{"ru":"Если в этом поле установлено значение true, получение данных из canvas будет включено, но к этим данным будет добавлен шум."},"If this settings is set to true, results of API which returns element coordinates will be updated to protect against 'client rects' fingerprinting.":{"ru":"Если в этом поле установлено значение true, результаты API, который возвращают координаты элемента, будут изменены для защиты от техники получения отпечатков браузера 'ClientRect'."},"If thread must be stopped after this function will finish execution. Default value is true, which helps to prevent hanging threads. Set it to false only if you want to use this thread later.":{"ru":"Должен ли поток быть остановлен после того, как эта функция завершит выполнение. Значение по умолчанию - true, оно помогает избежать утечки потоков. Если вы хотите использовать этот поток позже, установите значение false."},"If you are the site owner, you can collect fingerprints from users of your site.":{"ru":"Если вы являетесь владельцем сайта, вы можете собирать отпечатки у пользователей вашего сайта."},"If you have \"PerfectCanvas request\" field prepared for \"site A\", and you visit \"site B\" then canvas data for \"site B\" will be replaced by adding noise. If you want canvas data to be replaced for both sites, you have to prepare request for both \"site A\" and \"site B\".":{"ru":"Если поле \"Запрос PerfectCanvas\", было подготовленно для \"сайта A\", и вы посещаете \"сайт Б\", то данные canvas для \"сайта Б\" будут заменены с помощью добавления шума. Если вы хотите, чтобы данные canvas заменялись для обоих сайтов, необходимо подготовить запрос как для \"сайта A\", так и для \"сайта Б\"."},"If you have created resource with type database, then you can select one or several groups to set data with which script will be working.":{"ru":"Если вы создали ресурс с типом \"База\", вы можете выбрать одну или несколько групп для выбора данных, с которыми будет работать скрипт."},"If you leave \"PerfectCanvas request\" field empty, this action will return standart fingerprint with noise canvas replacement.":{"ru":"Если вы оставите поле \"Запрос PerfectCanvas\" пустым, это действие вернет стандартный отпечаток с подменой canvas с помощью добавления шума."},"If you leave the key empty in one of the fields, the value will not be set, even if you specify it - similar to the action for creating lists.":{"ru":"Если вы оставите ключ пустым в одном из полей, значение не будет задано, даже если вы укажете его - аналогично действию для создания списков."},"If you need to compare paths, then first normalize them with this action.":{"ru":"Если вам нужно сравнить пути, то сначала нормализуйте их этим действием."},"If you need to convert the first letter to uppercase, and the rest to lowercase, then use the action \"Capitalize word\".":{"ru":"Если вам нужно преобразовать первую букву в верхний регистр, а остальные в нижний регистр, то используйте действие \"Слово с большой буквы\"."},"If you need to not only insert a substring, but also delete part of the original string, then use the \"Remove string part\" action.":{"ru":"Если вам нужно не только вставить подстроку, но и удалить часть исходной строки, то используйте действие \"Удалить часть строки\"."},"If you only need to insert a substring, then you can use the \"Insert at\" action.":{"ru":"Если вам нужно только вставить подстроку, то вы можете использовать действие \"Вставить в\"."},"If you specify an object of the wrong type or an incorrect format, the result will be the same object.":{"ru":"Если вы укажете объект неподходящего типа, либо неверный формат, результатом будет тот же объект."},"If you use programs such as <code>CapMonster<\/code>, <code>XEvil<\/code> or similar software, you must fill in the <code>Service URL<\/code> field in accordance with the documentation for this software.":{"ru":"Если вы используете такие программы, как <code>CapMonster<\/code>, <code>XEvil<\/code> или аналоги, вы должны заполнить поле <code>URL сервиса<\/code> в соответствии с документацией к данному ПО."},"If you want obtain information from user, use 'Ask user input' action or resource system.":{"ru":"Если вы хотите получить информацию от пользователя, используйте действие 'Запросить ввод пользователя' или систему ресурсов."},"If you want to add more properties or change existing ones, you can use the <a href=\"#!\/JsonChangeValue\">Change value<\/a> action.":{"ru":"Если вы хотите добавить больше свойств или изменить существующие, вы можете использовать действие <a href=\"#!\/JsonChangeValue\">Изменить значение<\/a>."},"If you want to apply xpath query to last http response, you need to use 'Http Client' module.":{"ru":"Если вы хотите применить xpath запрос к последнему ответу http клиента, вам нужно использовать модуль 'HTTP-Клиент'."},"If you want to capture only part of entire match, then you should use groups. Groups are created by adding brackets into regular expression. For example, if you want to process following string":{"ru":"Если вы хотите извлечь только часть всего найденного текста, вам следует использовать группы. Группы создаются путем добавления скобок в регулярное выражение. Например, если вы хотите обработать следующую строку"},"If you want to do certain actions on all online profiles, create new resource and place all profile ids there. Best place to do that is OnApplicationStart function because it is executed only once and you don't want to repeat it in each thread. After that, you can use new resources in the same way as any other, BAS will distribute them across threads and prevent them to be reused.":{"ru":"Если вы хотите совершить определенные действия для каждого онлайн профиля, создайте новый ресурс и поместите туда id всех профилей. Лучшее место для этого - функция OnApplicationStart, потому что она выполняется только один раз, а не каждый раз для каждого потока. После этого вы можете использовать новый ресурс так же, как и любые другие, BAS будет распределять профили по потокам и не давать нескольким потокам использовать одни и те же профили одновременно."},"If you want to get user input before script starts, or craft enhanced user interface, then it is better to user resource system.":{"ru":"Если вы хотите получить значения от пользователя перед запуском скрипта или создать продвинутый пользовательский интерфейс, то лучше использовать систему ресурсов."},"If you want to replace with regexp, use \"Replace text with regexp\" action.":{"ru":"Используйте действие \"Заменить строку\" из модуля \"Регулярные выражения\" для замены с помощью регулярного выражения."},"If you want to select fingerprint with specific browser version, set \"Minimum browser version\" and \"Maximum browser version\" parameter to same value. Instead of selecting specific version, you can use special word \"current\". By using \"current\" in both minium and maximum version parameters you can unsure that BAS browser version will match browser version from fingerprint. Therefore browser authenticity will be significantly increased.":{"ru":"Если вы хотите выбрать отпечаток с определенной версией браузера, установите параметры \"Минимальная версия браузера\" и \"Максимальная версия браузера\" в одинаковые значения. Вместо выбора конкретной версии вы можете использовать специальное слово \"current\". Используя \"current\" как для минимальных, так и для максимальных параметров версии, вы можете быть уверены, что версия браузера BAS будет соответствовать версии браузера из отпечатка. Поэтому подлинность браузера будет значительно увеличена."},"If you want to set emulation before specific action, you can edit emulation settings inside the action itself.":{"ru":"Если вы хотите установить эмуляцию перед конкретным действием, вы можете редактировать настройки эмуляции внутри самого действия."},"If you want to start emulation instantly, use <a href=\"#!\/IdleEmulationNew\">idle emulation<\/a> action.":{"ru":"Если вы хотите начать эмуляцию немедленно, используйте <a href=\"#!\/IdleEmulationNew\">эмуляция бездействия<\/a>."},"If you want to update only certain fields, leave other fields blank. Those that will be blank won't be updated. If you want to update field of string type with empty string, change field type to \"expression\" and fill it with two quotes \"\".":{"ru":"Если вы хотите обновить только определенные поля, заполните только их, а остальные поля оставьте пустыми. Те поля, которые будут пустыми, не будут обновляться. Если вы хотите изменить значение поля типа строка на пустую строку, то поменяйте тип на \"expression\" и заполните поле двумя кавычками \"\"."},"If you want to use PerfectCanvas, you only need to fill this field:":{"ru":"Если вы хотите использовать PerfectCanvas, то необходимо заполнить только это поле:"},"Image data in base64 format":{"ru":"Данные изображения в формате base64"},"Image format":{"ru":"Формат изображения"},"Image id":{"ru":"Id изображения"},"Image source id":{"ru":"Id изображения источника"},"Image target id":{"ru":"Id целевого изображения"},"Images":{"ru":"Изображения"},"Imitate user behavior on webpage.":{"ru":"Имитировать просмотр пользователем веб-страницы."},"In a similar way, we can do the inverse transformation, i.e. make a JSON format string from the object. For example, we have an object with two parameters. One of them is an array of three numbers, the other is a simple string. Let it be student performance data for the subject. After converting, we can get a JSON string of the form like <span style=\"color:black\">{\"name\":\"John\",\"grades\":[5,5,4]}<\/span>.":{"ru":"Подобным образом мы можем сделать и обратное преобразование, т.е. сделать из объекта строку в формате JSON. Например, у нас есть объект с двумя параметрами. Один из них - это массив из трёх чисел, другой - это обычная строка. Пусть это будет информация об успеваемости студента за предмет. После преобразования, мы получим JSON строку подобного вида - <span style=\"color:black\">{\"name\":\"John\",\"grades\":[5,5,4]}<\/span>."},"In addition to deleting tabs, activated by the corresponding parameter, you can specify your own characters that will be deleted in the \"Remove characters\" parameter located in the additional settings.":{"ru":"Кроме удаления табуляции, активируемой соответствующим параметром, можно указать свои символы, которые будут удалены, в параметр \"Удалять символы\", находящийся в дополнительных настройках."},"In case if fingerprint with specified PerfectCanvas request is not present in static database, canvas data will be rendered in real time from machines which are currently connected. This is default behavior, but sometimes you may avoid dynamic rendering to save time or for some other reason. In order to do that, set this value to false. This settings has no effect if PerfectCanvas request is not set.":{"ru":"В случае, если отпечаток с заданным запросом PerfectCanvas отсутствует в базе, данные canvas будут получаться в реальном времени с одной из машин, которая в данный момент находится online. Так действие работает по умолчанию, но вам также может понадобиться отключить получение PerfetCanvas в реальном времени, например, чтобы сэкономить время или по какой-либо другой причине. Для этого установите значение false. Эта настройка не действуют, если не задан запрос PerfectCanvas."},"In case if fingerprint with specified PerfectCanvas request is not present in static database, canvas data will be rendered in real time from machines which are currently connected. This is default behavior, but sometimes you may avoid quering static database and use dynamic rendering instantly. In order to do that, set this value to false. This settings has no effect if PerfectCanvas request is not set or if CustomServers are used.":{"ru":"В случае, если отпечаток с заданным запросом PerfectCanvas отсутствует в базе, данные canvas будут получаться в реальном времени с одной из машин, которая в данный момент находится online. Так действие работает по умолчанию, но вам также может понадобиться отключить получение PerfetCanvas из статичной базы и сразу получать отпечаток в реальном времени. Для этого установите значение false. Эта настройка не действуют, если не задан запрос PerfectCanvas или если используется CustomServers."},"In case if profile folder already exists and has fingerprint data, tells BAS to apply fingerpint used latest for that profile.":{"ru":"В случае, если папка профиля уже существует и имеет данные отпечатка, эта настройка говорит BAS применять отпечаток использованный для данного профиля последним."},"In case if profile folder already exists and has proxy data, tells BAS to apply proxy used latest for that profile.":{"ru":"В случае, если папка профиля уже существует и имеет данные прокси, эта настройка говорит BAS применять прокси использованный для данного профиля последним."},"In case if temporary profile is used, new temporary profile will be created.":{"ru":"В случае использования временного профиля будет создан новый временный профиль."},"In idle state thread will look for postdonded functions, thoose, which was queued due to 'Maximum async tasks executed simultaneously' setting. If such function will be found, it will be executed in current thread.":{"ru":"В состоянии бездействия поток будет искать отложенные функции, то есть те, которые были поставлены в очередь из-за установки 'Максимальное количество асинхронных функций, выполняемых одновременно'. Если такая функция будет найдена, она будет выполнена в текущем потоке."},"In most cases, the checksum is used to check the integrity of data during transmission and storage, as well as to quickly compare a set of data. More information about checksums can be found in the <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/en.wikipedia.org\/wiki\/Checksum');return false\">Wiki<\/a>.":{"ru":"В большинстве случаев контрольная сумма используется для проверки целостности данных при передаче и хранении, а также для быстрого сравнения набора данных. Подробнее о контрольных суммах можно узнать в <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D1%83%D0%BC%D0%BC%D0%B0');return false\">Wiki<\/a>."},"In order to check if data for PerfectCanvas was actually replaced check log at BrowserAutomationStudio\/apps\/CURRENT_BAS_VERSION\/s\/PROCESS_ID.txt file.":{"ru":"Чтобы проверить, действительно ли данные для PerfectCanvas были заменены, проверьте лог в файле BrowserAutomationStudio\/apps\/ТЕКУЩАЯ_ВЕРСИЯ_BAS\/s\/ID_ПРОЦЕССА.txt."},"In order to embed fingerprints into your compiled script, you can ask each user to buy its own key. Alternative way is to use":{"ru":"Чтобы встроить отпечатки в ваш скомпилированный скрипт, вы можете попросить каждого пользователя купить собственный ключ. Альтернативный способ - использовать"},"In order to execute this action correctly you need to run \"Configure receiving mail\" action first.":{"ru":"Для правильной работы необходимо сначала выполнить действие \"Настроить получение почты\"."},"In order to manage resource lifetime manually, you should first set resource success and fail number to a big value.":{"ru":"Чтобы управлять жизнью ресурсов вручную нужно установить количество успехов и неудач при создании ресурса в большое значение."},"In order to replace fingerprint with PerfectCanvas, it is sufficient to call this action with \"PerfectCanvas request\" field filled out, and then use fingerprint by calling \"Apply fingerprint\" action.":{"ru":"Чтобы заменить отпечаток с использованием PerfectCanvas, достаточно вызвать это действие с заполненым параметром \"Запрос PerfectCanvas\", а затем использовать этот отпечаток вызвав действие \"Применить отпечаток\"."},"In order to reset default values, set \"Time deformation from\" and \"Time deformation to\" parameters with 1.0 value.":{"ru":"Для сброса значений установите параметры \"Деформация времени от\" и \"Время деформации до\" в 1.0."},"In order to use this action, function must be started asynchronously with 'Call function asynchronously' action.":{"ru":"Для работы этого действия необходимо, чтобы функция запускалась асинхронно с помощью действия \"Вызов функции асинхронно\"."},"In the \"Sorting\" block, you can set the order and field for sorting.":{"ru":"В блоке \"Сортировка\" вы можете задать порядок и поле для сортировки."},"In the additional settings, you can specify the name of the folder from which the message will be copied, otherwise the folder specified in the \"Configure receiving mail\" action will be used.":{"ru":"В дополнительных настройках можно указать имя папки, из которой будет скопировано письмо, иначе будет использоваться папка, указанная в действии \"Настроить получение почты\"."},"In the additional settings, you can specify the name of the folder from which the message will be moved, otherwise the folder specified in the \"Configure receiving mail\" action will be used.":{"ru":"В дополнительных настройках можно указать имя папки, из которой будет перемещено письмо, иначе будет использоваться папка, указанная в действии \"Настроить получение почты\"."},"In the additional settings, you can specify the name of the folder in which this action will be performed, otherwise the folder specified in the \"Configure receiving mail\" action will be used.":{"ru":"В дополнительных настройках можно указать имя папки, в которой будет выполнятся это действие, иначе будет использоваться папка, указанная в действии \"Настроить получение почты\"."},"Include Files":{"ru":"Искать Файлы"},"Include Folders":{"ru":"Искать Папки"},"Include in search profiles, which are currently in use":{"ru":"Включать в поиск профили, которые сейчас используются"},"Index":{"ru":"Индекс"},"India":{"ru":"Индия"},"Indonesia":{"ru":"Индонезия"},"Inform about the availability of the number.":{"ru":"Сообщить о готовности номера."},"Input fields":{"ru":"Поля ввода"},"Insert":{"ru":"Вставить"},"Insert a substring into a string.":{"ru":"Вставить подстроку в строку."},"Insert an item into specific position inside the list.":{"ru":"Вставить элемент в заданную позицию в списке."},"Insert new record to database.":{"ru":"Добавить новую запись в базу данных."},"Insert one image into another using specific coordinates.":{"ru":"Вставить одно изображение в другое используя заданные координаты."},"Insert record in last created group.":{"ru":"Вставить запись в последнюю созданную группу."},"Insertable substring":{"ru":"Вставляемая подстрока"},"Instead of function result, this variable contains identifier, which can be used to obtain function result when function will finish. It also allows communicating with function, with help of it you can: obtain function result, wait for function completion or stop function.":{"ru":"Вместо результата функции эта переменная содержит идентификатор, который можно использовать для получения результата функции после ее завершения. Он также позволяет взаимодействовать с функцией, с помощью него вы можете: получить результат функции, дождаться завершения функции или остановить функцию."},"Instead of setting flags, you can add them to the existing ones by activating the corresponding parameter in the additional settings.":{"ru":"Вместо установки флагов, вы можете добавить их к уже существующим, активировав соответствующий параметр в дополнительных настройках."},"Intensity":{"ru":"Интенсивность"},"Intensity of actions is a parameter controls the level of algorithm activity during emulation. If the intensity is high, the algorithm will interact with the page more frequently and dynamically. At low intensity, on the contrary, the algorithm will behave more restrained and patient.":{"ru":"Интенсивность действий - этот параметр управляет уровнем активности алгоритма во время эмуляции. При высокой интенсивности алгоритм будет взаимодействовать со страницей более часто и динамично. При низкой интенсивности алгоритм наоборот, будет вести себя более сдержанно и терпеливо."},"Internal date of the message (disregarding time and timezone)":{"ru":"Внутренняя дата письма (без учета времени и часового пояса)"},"Interval":{"ru":"Интервал"},"Interval (seconds)":{"ru":"Интервал (секунд)"},"Interval Between Usage":{"ru":"Интервалы между использованиями"},"Interval between usage in milliseconds.":{"ru":"Интервал между использованием в миллисекундах."},"Interval in seconds to check existence messages matching the specified criteria.":{"ru":"Интервал в секундах для проверки наличия писем, соответствующих указанным критериям."},"Ip address":{"ru":"Ip адрес"},"Ip city":{"ru":"Город"},"Ip string. Ipv6 string should be enclosed with square brackets.":{"ru":"Ip в виде строки. Ipv6 адреса должны быть заключены в квадратные скобки."},"Ip was parsed correctly":{"ru":"Информация об ip получена корректно"},"Ipv4 example":{"ru":"Пример ipv4"},"Ipv6 example":{"ru":"Пример ipv6"},"Iran, Islamic Republic of":{"ru":"Иран, Исламская Республика"},"Iraq":{"ru":"Ирак"},"Ireland":{"ru":"Ирландия"},"Is Directory":{"ru":"Является Ли Папкой"},"Is Valid":{"ru":"Ip распознан корректно"},"Is folder":{"ru":"Это папка"},"Is it necessary to add logs while obtaining fingerprint with PerfectCanvas.":{"ru":"Нужно ли добавлять логи при получении отпечатков с PerfectCanvas."},"Is online profile":{"ru":"Хранится ли профиль онлайн"},"Is running":{"ru":"Работает ли функция"},"Is success":{"ru":"Результат выполнения успешный"},"Israel":{"ru":"Израиль"},"It also adds thread identifier to THREAD_LIST variable. This variable has a list type and can be processed with \"List\" module. It accumulates all started threads so, you can perform bulk actions on it, for example, stop them immediately all together.":{"ru":"Данное действие также добавляет ID потока в переменную THREAD_LIST. Эта переменная имеет тип список и может обрабатываться модулем \"Список\". Он накапливает все запущенные потоки, поэтому вы можете выполнять с помощью него действия сразу над несколькими потоками, например, немедленно останавливать их."},"It can help to embed fingerprints inside compiled script.":{"ru":"Это поможет встроить отпечатки в скомпилированный скрипт."},"It is better to use <a href=\"#!\/result\">Result<\/a> action to output result.":{"ru":"Лучше использовать действие <a href=\"#!\/result\">Результат<\/a> для вывода результатов"},"It is important to understand that async function call returns immediately without result, and you can obtain its actual result only by calling this action later, when function will finish.":{"ru":"Важно понимать, что действие \"Вызов функции асинхронно\" немедленно завершает свою работу после запуска, и чтобы получить результат выполнения функции нужно предварительно дождавшись ее завершения с помощью действия \"Ждать завершение асинхронной функции\"."},"It is important to understand that async function call returns immediately, and you can obtain its actual result by waiting for function completion with this action.":{"ru":"Важно понимать, что действие \"Вызов функции асинхронно\" немедленно завершает свою работу после запуска, и вы можете получить результат выполнения функции только дождавшись ее завершения с помощью этого действия."},"It is important to understand that because of function will be started in a new thread, all local variables won't be available inside function. Function will use completely different browser. It means that, for example, authorization on sites performed in thread that called function won't be available inside function.":{"ru":"Важно понимать, что из-за того, что функция будет запущена в новом потоке, все локальные переменные не будут доступны внутри нее. Функция будет использовать совершенно другой браузер. Это означает, что, например, авторизация на сайте, выполненная в потоке, который вызвал функцию, не будет доступна внутри функции."},"It is recommended to use 'Proxy' action instead of this one, because it will set position automatically according to current proxy.":{"ru":"Рекомендуется использовать действие 'Прокси' вместо этого, потому что оно автоматически установит месторасположение браузера в соответствии с текущим прокси."},"It is recommended to use 'Proxy' action instead of this one, because it will set timezone and geolocation automatically according to current proxy.":{"ru":"Рекомендуется использовать действие 'Прокси' вместо этого, потому что оно автоматически установит часовой пояс в браузере соответствии с текущим прокси."},"It is recommended to use 'Proxy' action instead of this one, because it will set timezone automatically according to current proxy.":{"ru":"Рекомендуется использовать действие 'Прокси' вместо этого, потому что оно автоматически установит часовой пояс в браузере соответствии с текущим прокси."},"It is strongly recommended not to use this action in code which runs in several threads, because each thread will create a new resource and that is probably not your intention. Use it in OnApplicationStart function instead. This function is executed only once for whole script lifetime before any other function and thus is the best place to create resource":{"ru":"Настоятельно рекомендуется не использовать это действие в коде, который работает в нескольких потоках, потому что каждый поток создаст свой новый ресурс, и это, вероятно, не то, что вам нужно. Вместо этого используйте данное действие в функции OnApplicationStart. Эта функция выполняется только один раз для всего скрипта до любой другой функции и, следовательно, является лучшим местом для создания ресурса"},"It is synchronous, so feel free to use action in several threads.":{"ru":"Действие является синхронным, поэтому может быть использовано в нескольких потоках."},"It is very important to understand, that changing resulting list won't affect resource itself.":{"ru":"Очень важно понимать, что изменение возвращаемого списка не влияет на сам ресурс."},"It makes no sense to check THREAD_RESULT until THREAD_IS_RUNNING is set to true, ie until function is still running.":{"ru":"Нет смысла проверять значение переменной THREAD_RESULT до тех пор, пока переменная THREAD_IS_RUNNING не будет равна false, то есть до тех пор, пока функция все еще работает."},"It may be convenient to call it when the thread starts. In that case key specified here will be used for any action which requires FingerprintSwitcher key.":{"ru":"Может быть удобно вызывать это действие при запуске потока. В этом случае ключ, указанный здесь, будет использоваться для любого другого действия, которое требует ключ FingerprintSwitcher."},"It may take a lot of time if you are deleting a lot of records.":{"ru":"Действие может занять много времени, если вы удаляете много записей."},"It may take a lot of time if you are updating a lot of records.":{"ru":"Действие может выполняться долго, если вы обновляете большое число записей."},"It will be preserved for a time specified in \"Reset timeout\" parameter located in the additional settings.":{"ru":"Оно будет храниться в течение времени, указанного в параметре \"Таймаут сброса\", находящемся в дополнительных настройках."},"It will be preserved for a time specified in this parameter.":{"ru":"Оно будет храниться в течение времени, указанного в этом параметре."},"It will do nothing if 'Override key' action was not called previously.":{"ru":"Это действие не будет иметь эффекта, если действие 'Переопределить ключ' не было вызвано ранее."},"Italy":{"ru":"Италия"},"Item":{"ru":"Элемент"},"Items from separate fields and a list are added to a general list of items that will be joined.":{"ru":"Элементы из отдельных полей и списка складываются в общий список элементов которые будут объединены."},"JSON is a text format for data exchange, serialization (storage) of objects, arrays, numbers, strings, logical values and <span style=\"color:black\">null<\/span> values. It is based on JavaScript syntax, but still different from it: not every JavaScript code is JSON, and not every JSON is JavaScript code.":{"ru":"JSON - текстовый формат обмена данными, сериализации (хранения) объектов, массивов, чисел, строк, логических значений и значения <span style=\"color:black\">null<\/span>. Он основывается на синтаксисе JavaScript, однако всё же отличается от него: не каждый код на JavaScript является JSON, и не каждый JSON является кодом на JavaScript."},"JSON string or object to change":{"ru":"JSON строка или объект для изменения"},"JSON string or object to change value. You can specify a valid JSON string here or an object whose type is not simple. Simple types include numbers, boolean values, null value.":{"ru":"JSON строка или объект для изменения значения. Вы можете указать здесь валидную JSON строку либо объект, тип которого не является простым. К простым типам относятся числа, булевы значения, значение null."},"JSON string or object to count":{"ru":"JSON строка или объект для подсчёта"},"JSON string or object to count. You can specify a valid JSON string here or an object whose type is not simple. Simple types include numbers, boolean values, null value.":{"ru":"JSON строка или объект для подсчёта. Вы можете указать здесь валидную JSON строку либо объект, тип которого не является простым. К простым типам относятся числа, булевы значения, значение null."},"JSON string or object to format changing. You can specify a valid JSON string here or an object whose type is not simple. Simple types include numbers, boolean values, null value.":{"ru":"JSON строка или объект для изменения формата. Вы можете указать здесь валидную JSON строку либо объект, тип которого не является простым. К простым типам относятся числа, булевы значения, значение null."},"JSON string or object to parse":{"ru":"JSON строка или объект для парсинга"},"JSON string or object to parse. You can specify a valid JSON string here or an object whose type is not simple. Simple types include numbers, boolean values, null value.":{"ru":"JSON строка или объект для парсинга. Вы можете указать здесь валидную JSON строку либо объект, тип которого не является простым. К простым типам относятся числа, булевы значения, значение null."},"JSON string or object to remove":{"ru":"JSON строка или объект для удаления"},"JSON string or object to remove value. You can specify a valid JSON string here or an object whose type is not simple. Simple types include numbers, boolean values, null value.":{"ru":"JSON строка или объект для удаления значения. Вы можете указать здесь валидную JSON строку либо объект, тип которого не является простым. К простым типам относятся числа, булевы значения, значение null."},"JSON string to check":{"ru":"JSON строка для проверки"},"JSONPath is a powerful tool for working with the JSON data type. It is built on the basis of logic, which is very similar to XPath, but has some limitations, because the data type itself is much simpler than XML.":{"ru":"JSONPath - мощный инструмент для работы с типом данных JSON. Он построен на основе логики, которая очень похожа на XPath, но имеет некоторые ограничения, так как сам тип данных намного проще XML."},"JSONPath query can be empty in this action. In this case, the total number of keys of the object or string in JSON format will be calculated.":{"ru":"JSONPath запрос может быть пустым в этом действии. В этом случае будет подсчитано общее количество ключей объекта или строки в формате JSON."},"JSONPath query should not be empty. If you want to change the data format, use the <a href=\"#!\/JsonToString\">JSON to string<\/a> or <a href=\"#!\/JsonFromString\">String to JSON<\/a> action.":{"ru":"JSONPath запрос не должен быть пустым. Если вы хотите изменить формат данных, используйте действие <a href=\"#!\/JsonToString\">JSON в строку<\/a> или <a href=\"#!\/JsonFromString\">Строку в JSON<\/a>."},"JSONPath query to change value":{"ru":"JSONPath запрос для изменения значения"},"JSONPath query to count":{"ru":"JSONPath запрос для подсчёта"},"JSONPath query to parse":{"ru":"JSONPath запрос для парсинга"},"JSONPath query to remove value":{"ru":"JSONPath запрос для удаления значения"},"JUST SAMPLE TEXT":{"ru":"ПРОСТО ПРИМЕР ТЕКСТА"},"Jamaica":{"ru":"Ямайка"},"Japan":{"ru":"Япония"},"Join all elements of the list into a string using a specific separator.":{"ru":"Объединить все элементы списка в строку используя указанный разделитель."},"Join multiple paths into one.":{"ru":"Объединить несколько путей в один."},"Join multiple strings into one.":{"ru":"Объединить несколько строк в одну."},"Join strings without separator":{"ru":"Объединить строки без разделителя"},"Jordan":{"ru":"Иордания"},"Just not sample text":{"ru":"Просто не пример текста"},"Just sample text":{"ru":"Просто пример текста"},"Just sample text. Test text, string":{"ru":"Просто пример текста. Тестовый текст, строка"},"Just&nbsp;&nbsp;&nbsp;&nbsp;sample&nbsp;&nbsp;text":{"ru":"Просто&nbsp;&nbsp;&nbsp;&nbsp;пример&nbsp;&nbsp;текста"},"Just<br>sample<br>text":{"ru":"Просто<br>пример<br>текста"},"Kazakhstan":{"ru":"Казахстан"},"Kenya":{"ru":"Кения"},"Key 1. Can be empty":{"ru":"Ключ 1. Может быть пустым"},"Key 2. Can be empty":{"ru":"Ключ 2. Может быть пустым"},"Key 3. Can be empty":{"ru":"Ключ 3. Может быть пустым"},"Key example":{"ru":"Пример ключа"},"Key example, it is required if fingerprint was obtained with paid version.":{"ru":"Пример ключа, его необходимо использовать, если отпечаток был получен с помощью платной версии."},"Key example, will override any FingerprintSwitcher key set in actions such as 'Get fingerprint' or 'Apply fingerprint'.":{"ru":"Пример ключа, который переопределит любой ключ FingerprintSwitcher, установленный в действиях, таких как 'Получить отпечаток' или 'Применить отпечаток'."},"Key1":{"ru":"Ключ1"},"Key2":{"ru":"Ключ2"},"Key3":{"ru":"Ключ3"},"Korea, Republic of":{"ru":"Корея, Республика"},"Kosovo":{"ru":"Косово"},"Kuwait":{"ru":"Кувейт"},"Kyivstar":{"ru":"Киевстар"},"Kyrgyzstan":{"ru":"Киргизия"},"Label which is shown to user":{"ru":"Текст, который будет показан пользователю"},"Lao People's Democratic Republic":{"ru":"Лаос"},"Last Modified":{"ru":"Последнее Изменение"},"Last part":{"ru":"Последняя часть"},"Latinize Cyrillic":{"ru":"Латинизировать кириллицу"},"Latitude":{"ru":"Широта"},"Latitude. Can be blank":{"ru":"Широта. Может быть пустым"},"Latvia":{"ru":"Латвия"},"Learn more.":{"ru":"Узнать больше."},"Leave any field blank if you don't want to change it.":{"ru":"Оставьте любое поле пустым, если вы не хотите менять его значение."},"Lebanon":{"ru":"Ливан"},"Left":{"ru":"Слева"},"Left substring":{"ru":"Левая подстрока"},"Length":{"ru":"Длина"},"Lesotho":{"ru":"Лесото"},"Liberia":{"ru":"Либерия"},"Libyan Arab Jamahiriya":{"ru":"Ливийская Арабская Джамахирия"},"Limit":{"ru":"Лимит"},"Limit the number of returned ids to the specified number. If this parameter is specified, then the resulting id list will be truncated to the specified number. If the parameter is not specified or equal to 0, then the limit will not be applied and the full result will be returned.":{"ru":"Ограничить количество возвращаемых id указанным числом. Если этот параметр указан, то итоговый список id будет обрезан до указанного количества. Если параметр не указан или равен 0, то ограничение не будет применятся и будет возвращен полный результат."},"Limit the number of threads to 100.":{"ru":"Ограничить количество потоков до 100."},"Limit the number of threads to 30. Default.":{"ru":"Ограничить количество потоков до 30. Значение по умолчанию."},"Line break":{"ru":"Перенос строки"},"Line break with or without carriage return, split multiline text":{"ru":"Перевод строки с возвратом каретки или без него, разделить многострочный текст"},"Line break, split multiline text":{"ru":"Перенос строки, разделить многострочный текст"},"Line breaks":{"ru":"Перенос строки"},"Line ending":{"ru":"Окончание строки"},"Links":{"ru":"Ссылки"},"Links from body of message":{"ru":"Ссылки из тела письма"},"Links html":{"ru":"Ссылки html"},"Links raw":{"ru":"Ссылки raw"},"Links text":{"ru":"Ссылки текст"},"List":{"ru":"Список"},"List Element":{"ru":"Элемент Списка"},"List To Compare":{"ru":"Список Для Сравнения"},"List To Merge":{"ru":"Список Для Объединения"},"List To Save":{"ru":"Список Для Сохранения Данных"},"List To Write To File":{"ru":"Список Для Записи В Файл"},"List attach":{"ru":"Список вложенных"},"List containing the coordinates of the points to be clicked. Each item in this list contains <code>X<\/code> and <code>Y<\/code> coordinates of one particular point. For example, if the service returns a list of the form <code>[[1,2], [3,5]]<\/code>, then there are only two points to click. The first point is located at position 1 horizontally and at position 2 vertically. The second point is used in the same way. After getting such a list, you can process it with loops like <code>for<\/code> or <code>foreach<\/code>. Inside the loop, you need to call an action that will perform a click on the coordinates, such as the <code>Click<\/code> action.<br>For the <code>X<\/code> coordinate you can use a construction like this - <code>[[COORDINATES_LIST]][pointIndex][0]<\/code>.<br>For the <code>Y<\/code> coordinate you can use a construction like this - <code>[[COORDINATES_LIST]][pointIndex][1]<\/code>.":{"ru":"Список, содержащий координаты точек, по которым нужно кликать. Каждый элемент этого списка содержит координаты <code>X<\/code> и <code>Y<\/code> одной конкретной точки. Например, если сервис вернул список вида <code>[[1,2], [3,5]]<\/code>, значит есть всего две точки, по которым нужно кликнуть. Первая точка расположена на позиции 1 по горизонтали и на позиции 2 по вертикали. Вторая точка используется аналогично. После получения такого списка, вы можете обработать его с помощью циклов, например <code>for<\/code> или <code>foreach<\/code>. Внутри цикла вам необходимо вызвать действие, которое выполнит клик по координатам, например, действие <code>Кликнуть<\/code>.<br>Для координаты <code>X<\/code> вы можете использовать конструкцию такого вида - <code>[[COORDINATES_LIST]][pointIndex][0]<\/code>.<br>Для координаты <code>Y<\/code> вы можете использовать конструкцию такого вида - <code>[[COORDINATES_LIST]][pointIndex][1]<\/code>."},"List of all captured groups. Results will be written into that list. The first element of the list will contain all the text extracted by the regular expression.":{"ru":"Список всех извлеченных групп. Результаты будут получены в виде списка. Первый элемент списка будет содержать весь текст извлеченный с помощью регулярного выражения."},"List of captured groups":{"ru":"Список извлеченных групп"},"List of flags that the searched message should contain.":{"ru":"Список флагов, которые должно содержать искомое письмо."},"List of flags that the searched message should not contain.":{"ru":"Список флагов, которые не должно содержать искомое письмо."},"List of items":{"ru":"Список элементов"},"List of items to add to the CSV string.":{"ru":"Список элементов, которые нужно добавить  в CSV строку."},"List of items. Results will be written into that list.":{"ru":"Список со всеми результатами. Результаты будут записаны в этот список."},"List of path items":{"ru":"Список элементов пути"},"List of paths":{"ru":"Список путей"},"List of paths to be joined.":{"ru":"Список путей которые нужно объединить."},"List of separators":{"ru":"Список разделителей"},"List of strings":{"ru":"Список строк"},"List of strings or regular expressions.":{"ru":"Список, состоящий из строк или регулярных выражений."},"List of strings to be joined.":{"ru":"Список строк которые нужно объединить."},"List of variable names separated by comma. Each variable will contain one captured group. To set group in regular expression, use brackets. By default first group will be placed into GROUP1 variable, second - into GROUP2 and third into GROUP3":{"ru":"Список имен переменных, разделенных запятой. Каждая переменная будет содержать одну извлеченную группу. Чтобы задать группу в регулярном выражении, используйте скобки. По умолчанию первая группа будет помещена в переменную GROUP1, вторая - в GROUP2 и третья в GROUP3"},"List of variables separated by commas. Results will be written into that variables.":{"ru":"Список переменных разделенных запятыми. В эти переменные будут записаны результаты."},"List or one flag which needs to remove from the message.":{"ru":"Список или один флаг, которые нужно удалить с письма."},"List or one flag which needs to set for the message.":{"ru":"Список или один флаг, которые нужно установить для письма."},"List where thread id will be added":{"ru":"Список, куда будет добавлен ID потока"},"List, where thread id will be added. This variable has a list type and can be processed with \"List\" module. It accumulates all started threads so, you can perform bulk actions on it, for example, stop them immediately all together. If variable doesn't exist, it will be created.":{"ru":"Список, куда будет добавлен ID потока. Эта переменная имеет тип список и может обрабатываться модулем \"Список\". Он накапливает все запущенные потоки, поэтому вы можете выполнять с помощью него действия сразу над несколькими потоками, например, немедленно останавливать их. Если переменная не существует, она будет создана."},"Lists can be processed using actions from the \"List\" module.":{"ru":"Списки можно обработать с помощью действий из модуля \"Список\"."},"Lithuania":{"ru":"Литва"},"Load image from binary data (base64 format). Obtain image id, which will help to manipulate image.":{"ru":"Загрузить изображение из бинарных данных (формат base64). Получить идентификатор изображения, который поможет работать с изображением."},"Logs":{"ru":"Логи"},"Long emulation time":{"ru":"Долгое время эмуляции"},"Long move":{"ru":"Длинное движение"},"Long move chance":{"ru":"Шанс длинного движения"},"Long move to element":{"ru":"Длинное движение к элементу"},"Long movements":{"ru":"Длинные движения"},"Longitude":{"ru":"Долгота"},"Longitude. Can be blank":{"ru":"Долгота. Может быть пустым"},"Luxembourg":{"ru":"Люксембург"},"Macao":{"ru":"Макао"},"Macedonia, The Former Yugoslav Republic Of":{"ru":"Республика Македония"},"Madagascar":{"ru":"Мадагаскар"},"Mail Body. Can be blank.":{"ru":"Текст письма. Может быть пустым."},"Mail From. Can be blank.":{"ru":"От кого. Может быть пустым."},"Mail Subject. Can be blank.":{"ru":"Тема письма. Может быть пустым."},"Mail To":{"ru":"Кому"},"Mail does not contain messages matching the specified criteria":{"ru":"Почта не содержит писем, соответствующих указанным критериям"},"Mail server authorization method. Determines how the client authenticates when connecting to the mail server. Allows for a choice between classic password-based authentication or the more modern and secure OAuth 2.0 method.":{"ru":"Метод авторизации на почтовом сервере. Определяет способ аутентификации клиента при подключении к почтовому серверу. Позволяет выбрать между классической авторизацией с использованием пароля или более современным и безопасным методом OAuth 2.0."},"Mail.ru doesn't allow to make search in mailbox.":{"ru":"Mail.ru не позволяет искать письма в почтовом ящике."},"Mailbox can contain several folders, and you can work with messages from a specific folder by changing \"Folder name\" parameter located in the additional settings. By default it is set to \"INBOX\", this folder contains incoming messages. Each mail service provides its own default names for different folders. For example, this is default name of gmail trash folder \"[Gmail]\/Trash\" and spam folder is \"[Gmail]\/Spam\". You can also create your own folders and use them in this action.":{"ru":"Почтовый ящик может содержать несколько папок, и вы можете работать с письмами из определенной папки, изменяя параметр \"Имя папки\", находящийся в дополнительных настройках. По умолчанию он установлен в \"INBOX\", эта папка содержит входящие письма. Каждый почтовый сервис предоставляет свои собственные имена по умолчанию для разных папок. Например, имя по умолчанию для папки удаленных писем в gmail - \"[Gmail]\/Trash\", для папки спама - \"[Gmail]\/Spam\". Вы также можете создавать свои собственные папки и использовать их в этом действии."},"Malawi":{"ru":"Малави"},"Malaysia":{"ru":"Малайзия"},"Maldives":{"ru":"Мальдивы"},"Mali":{"ru":"Мали"},"Manual":{"ru":"Руководство"},"Manual parameter setting":{"ru":"Ручная настройка параметров"},"Marketing":{"ru":"Маркетинг"},"Mask":{"ru":"Маска"},"Mask for profile name":{"ru":"Маска имени профиля"},"Mask, which is applied to profile name":{"ru":"Маска, которая применяется к имени профиля"},"Match list":{"ru":"Список извлеченных строк"},"Mauritania":{"ru":"Мавритания"},"Mauritius":{"ru":"Маврикий"},"Max height":{"ru":"Макс высота"},"Max measurement time":{"ru":"Максимальное время измерений"},"Max threads":{"ru":"Макс потоков"},"Max version":{"ru":"Макс версия"},"Max width":{"ru":"Макс ширина"},"Maximum async tasks executed simultaneously":{"ru":"Максимальное количество асинхронных функций, выполняемых одновременно"},"Maximum browser height":{"ru":"Максимальная высота браузера"},"Maximum browser version":{"ru":"Максимальная версия браузера"},"Maximum browser width":{"ru":"Максимальная ширина браузера"},"Maximum delay":{"ru":"Максимальная задержка"},"Maximum element area":{"ru":"Максимальная площадь элемента"},"Maximum emulation time":{"ru":"Максимальное время эмуляции"},"Maximum execution time of emulation before action.":{"ru":"Максимальное время выполнения эмуляции перед действием."},"Maximum miss distance":{"ru":"Максимальное расстояние промаха"},"Maximum mouse speed":{"ru":"Максимальная скорость мыши"},"Maximum moving distance":{"ru":"Максимальное расстояние движения"},"Maximum moving speed":{"ru":"Максимальная скорость движения"},"Maximum number of fail usages of current resource. Usage of resource is considered as fail if thread, which used it is ended with failure. For example, if resource holds proxies and script creates accounts, then this parameter indicates how many bad retries is allowed for one proxy.":{"ru":"Максимальное количество неудачных использований текущего ресурса. Использование ресурса считается неудачным, если поток, который использовал его, заканчивается неудачей. Например, если ресурс содержит прокси и скрипт создает учетные записи, то этот параметр указывает, сколько неудачнх регистраций возможно для одного прокси."},"Maximum number of movements":{"ru":"Максимальное количество движений"},"Maximum number of results":{"ru":"Максимальное количество результатов"},"Maximum number of success usages of current resource. Usage of resource is considered successful if thread, which used it is ended with success. For example, if resource holds proxies and script creates accounts, then this parameter indicates how many accounts may be registered for with one proxy.":{"ru":"Максимальное количество успешных применений текущего ресурса. Использование ресурса считается успешным, если поток, который использовал его, был выполнен успешно. Например, если ресурс содержит прокси и скрипт регистрирует аккаунты, то этот параметр указывает, сколько учетных записей может быть зарегистрировано для одного прокси."},"Maximum pause":{"ru":"Максимальная пауза"},"Maximum price":{"ru":"Максимальная цена"},"Maximum scroll distance":{"ru":"Максимальное расстояние прокрутки"},"Maximum simultaneous usages. For example, if resource holds proxies, then this parameter indicates how many times single proxy may be used simultaneously.":{"ru":"Максимальное количество одновременных использований. Например, если ресурс содержит прокси, то этот параметр указывает, сколько раз прокси может использоваться одновременно."},"Maximum simultaneously running threads with async functions per application. If function will be started beyond the limit, it will be postponed and will be started immediately after some other async function will finish and the limit will not be exceeded. This is very powerful setting, it allows you to start as many threads as you want and let BAS balance thread number.":{"ru":"Максимум одновременно работающих потоков с асинхронными функциями. Лимит устанавливается для всего приложения целиком. Если функция будет запущена свыше этого предела, она будет отложена до того момента, когда завершится какая-то другая функция и число потоков упадет ниже предела. Это очень мощная настройка, она позволяет запускать неограниченное число потоков, при этом BAS будет балансировать нагрузку самостоятельно."},"Maximum sleep time":{"ru":"Максимальное время сна"},"Maximum waiting time for SMS code in minutes. If the specified time expires and the SMS is not received, then the action will end with an error.":{"ru":"Максимальное время ожидания SMS кода в минутах. Если указанное время выйдет и SMS не будет получено, то действие завершится ошибкой."},"Maximum waiting time for messages in seconds. If the specified time expires and the messages are not found, then the action will end with an error.":{"ru":"Максимальное время ожидания писем в секундах. Если указанное время выйдет и письма не будут найдены, то действие завершится ошибкой."},"MegaFon":{"ru":"МегаФон"},"Message has been answered":{"ru":"На письмо был дан ответ"},"Message has been read":{"ru":"Письмо прочитано"},"Message has not completed composition (marked as a draft)":{"ru":"Письмо не завершено (помечено как черновик)"},"Message id":{"ru":"id письма"},"Message is \"flagged\" for urgent\/special attention":{"ru":"Письмо \"помечено\" как требующее срочного\/особого внимания"},"Message is marked for removal":{"ru":"Письмо отмечено для удаления"},"Message received is earlier than the specified date.":{"ru":"Письмо получено раньше указанной даты."},"Message received is within or later than the specified date.":{"ru":"Письмо получено в пределах или позже указанной даты."},"Message size":{"ru":"Размер письма"},"Message subject":{"ru":"Тема письма"},"Message subject, \"Subject\" field":{"ru":"Тема письма, поле \"Subject\""},"Message text":{"ru":"Текст сообщения"},"Mexico":{"ru":"Мексика"},"Micro move":{"ru":"Микро движения"},"Micro move chance":{"ru":"Шанс микро движения"},"Micro movement":{"ru":"Микро движение"},"Milliseconds":{"ru":"Миллисекунды"},"Milliseconds. From 0 to 999":{"ru":"Миллисекунды. От 0 до 999"},"Mime Type":{"ru":"Mime Тип"},"Min height":{"ru":"Мин высота"},"Min messages":{"ru":"Мин писем"},"Min version":{"ru":"Мин версия"},"Min width":{"ru":"Мин ширина"},"Minimum added date":{"ru":"Минимальная дата добавления"},"Minimum browser height":{"ru":"Минимальная высота браузера"},"Minimum browser version":{"ru":"Минимальная версия браузера"},"Minimum browser width":{"ru":"Минимальная ширина браузера"},"Minimum delay":{"ru":"Минимальная задержка"},"Minimum element size":{"ru":"Минимальный размер элемента"},"Minimum miss distance":{"ru":"Минимальное расстояние промаха"},"Minimum mouse speed":{"ru":"Минимальная скорость мыши"},"Minimum moving distance":{"ru":"Минимальное расстояние движения"},"Minimum moving speed":{"ru":"Минимальная скорость движения"},"Minimum number of characters in the number":{"ru":"Минимальное количество символов в числе"},"Minimum number of movements":{"ru":"Минимальное количество движений"},"Minimum pause":{"ru":"Минимальная пауза"},"Minimum scroll distance":{"ru":"Минимальное расстояние прокрутки"},"Minimum sleep time":{"ru":"Минимальное время сна"},"Minimum text length":{"ru":"Минимальная длина текста"},"Minutes":{"ru":"Минуты"},"Minutes to add. Can be negative.":{"ru":"Прибавить минут. Может быть отрицательным."},"Minutes. From 0 to 59":{"ru":"Минуты. От 0 до 59"},"Miss":{"ru":"Промахи"},"Miss chance":{"ru":"Шанс промаха"},"Misses on an element":{"ru":"Промахи по элементу"},"Modified":{"ru":"Дата изменения"},"Modify performance fingerprint.":{"ru":"Изменить отпечаток производительности."},"Moldova":{"ru":"Молдова, Республика"},"Monaco":{"ru":"Монако"},"Mongolia":{"ru":"Монголия"},"Montenegro":{"ru":"Черногория"},"Month":{"ru":"Месяц"},"Month. From 1 to 12":{"ru":"Месяц. От 1 до 12"},"Montserrat":{"ru":"Монтсеррат"},"More info":{"ru":"Больше информации"},"More info about font pack and download link can be found":{"ru":"Дополнительную информацию о паке шрифтов и ссылку для скачивания можно найти"},"Morocco":{"ru":"Марокко"},"Most of the times you don't need to convert base64 data to string, some actions accept base64 data as input parameters, for example: \"Write File\", \"Start working with image\". Moreover, if you try to decode binary data encoded as base64 string, result string may be damaged, so it is better to use base64 data without decoding.":{"ru":"В большинстве случаев вам не нужно декодировать base64 строки, некоторые действия принимают входные данные прямо в формате base64, это такие действия как: \"Запись В Файл\", \"Начать работу с изображением\". Более того, если вы попытаетесь декодировать бинарные данные, закодированные как base64, результат может быть поврежден, поэтому лучше использовать строку в формате base64 без декодирования."},"Mouse emulate":{"ru":"Эмуляция мыши"},"Move file or folder to a new location.":{"ru":"Переместить файл или папку в новое место."},"Move or copy action to other group.":{"ru":"Переместить или скопировать запись в другую группу."},"Move the specified message from one mailbox folder to another.":{"ru":"Переместить указанное письмо из одной папки почтового ящика в другую."},"Movement along text":{"ru":"Движение по тексту"},"Movement along text chance":{"ru":"Шанс движения по тексту"},"Movement to a random element, with a large search radius for elements.":{"ru":"Движение к случайному элементу, с большим радиусом поиска элементов."},"Movement to a random element, with a small search radius for elements.":{"ru":"Движение к случайному элементу, с маленьким радиусом поиска элементов."},"Movements on one element":{"ru":"Движения по одному элементу"},"Movements on one element chance":{"ru":"Шанс движений по одному элементу"},"Moving messages is not supported by all mail services, if the service does not support moving, then the action will fail.":{"ru":"Перемещение писем поддерживается не всеми почтовыми сервисами, если сервис не поддерживает перемещение, то действие завершится ошибкой."},"Mozambique":{"ru":"Мозамбик"},"Multilogin profile id":{"ru":"id профиля Multilogin"},"Multiple spaces":{"ru":"Несколько пробелов"},"Myanmar":{"ru":"Мьянма"},"Name":{"ru":"Имя"},"Name can contain special symbols. * - any number of any characters, ? - any single character.":{"ru":"Имя может содержать специальные символы. * - любое количество любых символов, ? - любой символ."},"Namibia":{"ru":"Намибия"},"Nepal":{"ru":"Непал"},"Netherlands":{"ru":"Нидерланды"},"New Caledonia":{"ru":"Новая Каледония"},"New List":{"ru":"Новый Список"},"New Record id":{"ru":"Ид новой записи"},"New Zealand":{"ru":"Новая Зеландия"},"New data format":{"ru":"Новый формат данных"},"New data format for your variable. You can use only two options: String or JSON.":{"ru":"Новый формат данных для вашей переменной. Вы можете использовать только два варианта: String или JSON."},"New folder name":{"ru":"Новое имя папки"},"New group description. Can be any string. Leave blank not to change the description.":{"ru":"Новое описание группы. Это может быть любая строка. Оставьте пустым, чтобы не изменять описание."},"New group name. Can be any string. Leave blank not to change the name.":{"ru":"Новое название группы. Это может быть любая строка. Оставьте поле пустым, чтобы не изменять имя."},"New item value, could be any string.":{"ru":"Значение нового элемента, может быть любой строкой."},"New value":{"ru":"Новое значение"},"New value for object":{"ru":"Новое значение для объекта"},"New value for object that matches query.":{"ru":"Новое значение для объекта, удовлетворяющего запросу."},"Nicaragua":{"ru":"Никарагуа"},"Niger":{"ru":"Нигер"},"Nigeria":{"ru":"Нигерия"},"No forced protocol change":{"ru":"Без принудительной смены протокола"},"No record found":{"ru":"Записей не найдено"},"No sorting":{"ru":"Без сортировки"},"No time deformation will be applied.":{"ru":"Деформация времени не будет применена."},"None of the parameters are specified":{"ru":"Ни один параметр не указан"},"Normalize":{"ru":"Нормализовать"},"Normalize URL before changing":{"ru":"Нормализовать URL перед изменением"},"Normalize URL before parsing":{"ru":"Нормализовать URL перед парсингом"},"Normalize URL.":{"ru":"Нормализовать URL."},"Normalize path.":{"ru":"Нормализовать путь."},"Normalize protocol":{"ru":"Нормализовать протокол"},"Normally you don't need to call that action manually, resources may be cleared automatically, if 'Read and delete lines after use' setting is selected during resource creation.":{"ru":"Обычно вам не нужно вызывать это действие для удаление ресурсов, использованные ресурсы могут быть очищены автоматически, если при создании ресурса выбран параметр 'Чтение и удаление строк после использования'."},"Norway":{"ru":"Норвегия"},"Not absolute path":{"ru":"Не абсолютный путь"},"Not compiled script":{"ru":"Не скомпилированный скрипт"},"Not correct, ip string can't contain port.":{"ru":"Неправильно, ip адрес не может содержать порт."},"Not empty string":{"ru":"Не пустая строка"},"Not string":{"ru":"Не строка"},"Notify that the number is used and cancel the activation.":{"ru":"Сообщить о том, что номер использован и отменить активацию."},"Number":{"ru":"Номер"},"Number of characters to remove":{"ru":"Количество удаляемых символов"},"Number of decimal places":{"ru":"Количество знаков в дробной части"},"Number of messages":{"ru":"Количество писем"},"Number of online profiles is limited and depends on your license, unlike local profiles.":{"ru":"Количество онлайн профилей ограничено и зависит от вашей лицензии, в отличие от локальных профилей."},"Numbеr":{"ru":"Число"},"OAuth 2.0 token":{"ru":"OAuth 2.0 токен"},"OS name":{"ru":"Название ОС"},"OS version":{"ru":"Версия ОС"},"Object":{"ru":"Объект"},"Object list - a list that consists of objects, in an object, <span style=\"color:black\">name<\/span> property contains the name, <span style=\"color:black\">attribs<\/span> contains a list of attributes, and <span style=\"color:black\">delimiter<\/span> contains the delimiter of folder.":{"ru":"Object list - это список, состоящий из объектов, в объекте свойство <span style=\"color:black\">name<\/span> содержит имя, <span style=\"color:black\">attribs<\/span> содержит список атрибутов, а <span style=\"color:black\">delimiter<\/span> содержит разделитель папки."},"Object or query string.":{"ru":"Объект или строка запроса."},"Objects can be processed using actions from the \"JSON\" module.":{"ru":"Объекты можно обработать с помощью действий из модуля \"JSON\"."},"Obtain asynchronous function result.":{"ru":"Получить результат выполнения асинхронной функции."},"Obtain fingerprint from common server.":{"ru":"Получить отпечаток из стандартного сервера."},"Offset":{"ru":"Смещение"},"Old folder name":{"ru":"Старое имя папки"},"Oman":{"ru":"Оман"},"On idle":{"ru":"Поведение во время бездействия потока"},"One example of using this action is generating data, for example, for sending HTTP requests. You can also convert the resulting object to a string using the <a href=\"#!\/JsonToString\">JSON to string<\/a> action.":{"ru":"Один из примеров использования данного действия это формирование данных, например, для отправки HTTP запросов. Вы также можете преобразовать полученный объект в строку с помощью действия <a href=\"#!\/JsonToString\">JSON в строку<\/a>."},"Online profile id":{"ru":"Id онлайн профиля"},"Online profile name":{"ru":"Имя онлайн профиля"},"Online profiles can be found by id, you can find it in Multilogin interface manually or with \"Search for single online profile\" or \"Search online profile list\" actions automatically.":{"ru":"Онлайн профили возможно найти по id, вы можете найти id в интерфейсе Multilogin вручную или с помощью действий \"Поиск первого онлайн профиля\" или \"Поиск списка онлайн профилей\" автоматически."},"Online profiles may be accessed manually later, from Multilogin interface.":{"ru":"Онлайн профили доступны для работы в ручном режиме позже, из интерфейса Multilogin."},"Only add":{"ru":"Только добавить"},"Only line break (\\n)":{"ru":"Только перенос строки (\\n)"},"Only the specified parameters will be saved to the general settings, and the previously set values or default values will be used for unspecified parameters.":{"ru":"В общие настройки будут сохранены только указанные параметры, а для неуказанных будут использованы значения установленные ранее или значения по умолчанию."},"Only write to file\/database":{"ru":"Только добавить в файл\/базу"},"Operator":{"ru":"Оператор"},"Optional parameter.":{"ru":"Необязательный параметр."},"Options":{"ru":"Параметры"},"Options below will help you to adjust different browser settings to match specified IP, for example: timezone and geolocation. Default settings will work fine.":{"ru":"Параметры ниже помогут вам задать различные настройки браузера в соответствии с новым ip, например: часовой пояс и месторасположение. Настройки по умолчанию обеспечат оптимальную работу."},"Other":{"ru":"Любой другой"},"Output all letters to log":{"ru":"Вывод всех букв в лог"},"Overlap":{"ru":"Перекрытие"},"Overlap by points":{"ru":"Перекрытие по точкам"},"Page number":{"ru":"Номер страницы"},"Page number - 1, page size - 100":{"ru":"Номер страницы - 1, Размер страницы - 100"},"Page number - 1, page size - 1000":{"ru":"Номер страницы - 1, Размер страницы - 1000"},"Page number - 2, page size - 1000":{"ru":"Номер страницы - 2, Размер страницы - 1000"},"Page size":{"ru":"Размер страницы"},"Pakistan":{"ru":"Пакистан"},"Panama":{"ru":"Панама"},"Papua New Guinea":{"ru":"Папуа-Новая Гвинея"},"Paraguay":{"ru":"Парагвай"},"Parse CSV string into items.":{"ru":"Распарсить CSV строку на элементы."},"Parse links from body of message":{"ru":"Парсить ссылки из тела письма"},"Parse the URL string into items.":{"ru":"Распарсить строку URL на элементы."},"Parse the User-Agent string into items.":{"ru":"Распарсить строку User-Agent на элементы."},"Parse the path into items.":{"ru":"Распарсить путь на элементы."},"Parsing":{"ru":"Парсинг"},"Part of the message by which sorting will be performed.":{"ru":"Часть письма, по которой будет производится сортировка."},"Part of the message recipient address":{"ru":"Часть адреса получателя письма"},"Part of the message sender address":{"ru":"Часть адреса отправителя письма"},"Part of the message subject":{"ru":"Часть темы письма"},"Part of the message text":{"ru":"Часть текста письма"},"Pass":{"ru":"Пароль"},"Password":{"ru":"Пароль"},"Path":{"ru":"Путь"},"Path name":{"ru":"Имя пути"},"Paths from separate fields and a list are added to a general list of paths that will be joined.":{"ru":"Пути из отдельных полей и списка складываются в общий список путей которые будут объединены."},"PerfectCanvas logs":{"ru":"PerfectCanvas логи"},"PerfectCanvas request":{"ru":"Запрос PerfectCanvas"},"PerfectCanvas request contains all data required to render canvas on remote machine. In order to obtain request, use CanvasInspector application, see wiki for more information and download link. \"PerfectCanvas request\" data is obtained one time for site, not for each fingerprint request.":{"ru":"Запрос PerfectCanvas содержит все данные, необходимые для отрисовки canvas на удаленной машине. Чтобы получить строку запроса, используйте приложение CanvasInspector, смотрите вики для получения дополнительной информации и ссылки для скачивания. \"Запрос PerfectCanvas\" должен быть получен один раз для сайта, а не для каждого отпечатка."},"PerfectCanvas request. Can be blank.":{"ru":"Запрос PerfectCanvas. Может быть пустым."},"PerfetCanvas rendering in real time":{"ru":"Получение PerfetCanvas в реальном времени"},"Perform":{"ru":"Выполнять"},"Perform additional emulation during certain actions, such as \"<b>Type Text<\/b>\", \"<b>Move And Click On Element<\/b>\" and others.":{"ru":"Выполнять дополнительную эмуляцию во время некоторых действий, таких как \"<b>Ввод текста<\/b>\", \"<b>Двигать Мышь И Кликнуть На Элемент<\/b>\" и других."},"Peru":{"ru":"Перу"},"Philippines":{"ru":"Филиппины"},"Platform":{"ru":"Платформа"},"Platform type":{"ru":"Тип платформы"},"Play Sound":{"ru":"Воспроизвести Звук"},"Play sound notification.":{"ru":"Воспроизвести звуковое уведомление."},"Please input data for [[ACCOUNT]]":{"ru":"Пожалуйста, введите данные для [[ACCOUNT]]"},"Please note that if you specify as a variable for checking not a string, but a variable of any other type - the result will always be <span style=\"color:black\">false<\/span>. In this regard, this action is different from the JavaScript function <span style=\"color:black\">JSON.parse()<\/span>, as there is an additional check for suitable types.":{"ru":"Обратите внимание, если вы укажете в качестве переменной для проверки не строку, а переменную любого другого типа - результатом всегда будет <span style=\"color:black\">false<\/span>. В этом плане данное действие отличается от JavaScript функции <span style=\"color:black\">JSON.parse()<\/span>, так как происходит дополнительная проверка на подходящие типы."},"Please note, if you use the path <span style=\"color:black\">$.messages[*]<\/span> - the output will be a list of values and the number of elements will be 3, but if you specify a query <span style=\"color:black\">$.messages<\/span>, then the number of elements will be 1, because this query points to the object as a whole, and not to its elements.":{"ru":"Обратите внимание, если использовать путь <span style=\"color:black\">$.messages[*]<\/span> - на выходе получится список значений и число элементов будет равно 3, но если вы укажете запрос вида <span style=\"color:black\">$.messages<\/span> число элементов будет равно 1, потому что данный запрос указывает на объект в целом, а не на его элементы."},"Please note, if you use the path <span style=\"color:black\">$.messages[*]<\/span> - the output will be a list of values, but the actions <span style=\"color:black\">Get Value<\/span> or <span style=\"color:black\">Get Key<\/span> will return only the first element from the list,i.e. <span style=\"color:black\">m1<\/span>, not <span style=\"color:black\">[m1, m2, m3]<\/span>. If you need a list, use the <span style=\"color:black\">Get all values<\/span> or <span style=\"color:black\">Get all keys<\/span> actions.":{"ru":"Обратите внимание, если использовать путь <span style=\"color:black\">$.messages[*]<\/span> - на выходе получится список значений, но действия <span style=\"color:black\">Получить значение<\/span> или <span style=\"color:black\">Получить ключ<\/span> вернут только первый элемент из списка, т.е <span style=\"color:black\">m1<\/span>, а не <span style=\"color:black\">[m1, m2, m3]<\/span>. Если вам нужен именно список, используйте действия <span style=\"color:black\">Получить все значения<\/span> или <span style=\"color:black\">Получить все ключи<\/span>."},"Please note, if you use this action - the output will be always a list of values, but the action <span style=\"color:black\">Get key<\/span> will return only the first element from the list.":{"ru":"Обратите внимание, если вы используете это действие - результатом всегда будет список значений, но действие <span style=\"color:black\">Получить ключ<\/span> вернёт только первый подходящий элемент из списка."},"Please note, if you use this action - the output will be always a single value, but the action <span style=\"color:black\">Get all keys<\/span> will return all elements as list.":{"ru":"Обратите внимание, если вы используете это действие - результатом всегда будет одно значение, но действие <span style=\"color:black\">Получить все ключи<\/span> вернёт все подходящие элементы в виде списка."},"Please solve captcha":{"ru":"Пожалуйста, решите капчу"},"Poland":{"ru":"Польша"},"Port":{"ru":"Порт"},"Port number of the mail server.":{"ru":"Номер порта почтового сервера."},"Portugal":{"ru":"Португалия"},"Position":{"ru":"Позиция"},"Position close to the center":{"ru":"Позиция близкая к центру"},"Possible statuses:":{"ru":"Возможные статусы:"},"Possible usecase would be to create group for parsed posts and update parse date in its description with this action.":{"ru":"Один из вариантом использования данного действия - создание группы для данных получаемых скриптом и изменение даты последнего парсинга помещенного в описание группы с помощью этого действия."},"Precomputed":{"ru":"Предварительное вычисление"},"Previous example splits string by one of following symbols: , or ; or |":{"ru":"Предыдущий пример разбивает строку с помощью одного из следующих символов: , или ; или |"},"Price":{"ru":"Цена"},"Process error output":{"ru":"Вывод процесса с ошибками"},"Process standart output":{"ru":"Стандартный вывод процесса"},"Processing html is much easier and faster with 'Xpath' module.":{"ru":"Обработка html намного проще и быстрее с помощью модуля 'Xpath'."},"Processor architecture":{"ru":"Архитектура процессора"},"Profile folder path":{"ru":"Путь к папке профиля"},"Profile folder path or online profile id":{"ru":"Путь к папке профиля или id онлайн профиля"},"Profile must be created beforehand to use in this action, if you want to create it automatically, use \"Create online profile\" action.":{"ru":"Для использования в этом действии профиль должен быть создан заранее, если вы хотите создать его автоматически, используйте действие \"Создать онлайн профиль\"."},"Profile name":{"ru":"Имя профиля"},"Profile path":{"ru":"Путь к профилю"},"Property with dot in name.":{"ru":"Свойство с точкой в имени."},"Protected compiled script":{"ru":"Защищенный скомпилированный скрипт"},"Protocol":{"ru":"Протокол"},"Protocol\/Scheme":{"ru":"Протокол\/Схема"},"Proxy with empty parameter will reset it to default value(direct connection).":{"ru":"Пустой параметр сбросит прокси до значения по умолчанию(прямое соединение)."},"Puerto Rico":{"ru":"Пуэрто-Рико"},"Punycode is a method of converting sequences of Unicode characters to the ASCII character sequence allowed in domain names. You can learn more about Punycode in <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/en.wikipedia.org\/wiki\/Punycode');return false\">Wiki<\/a>.":{"ru":"Punycode - это метод преобразования последовательностей Unicode-символов в последовательность ASCII-символов, разрешенных в доменных именах. Подробнее о Punycode можно узнать в <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/ru.wikipedia.org\/wiki\/Punycode');return false\">Wiki<\/a>."},"Qatar":{"ru":"Катар"},"Query":{"ru":"Запрос"},"Query parameters whose names match any of the specified list items will be removed.":{"ru":"Параметры запроса, имена которых соответствуют любому из указанных элементов списка, будут удалены."},"Random move":{"ru":"Случайное движение"},"Random move chance":{"ru":"Шанс случайного движения"},"Random movement":{"ru":"Случайное движение"},"Random position":{"ru":"Случайная позиция"},"Random position or close to the center":{"ru":"Случайная позиция или близкая к центру"},"Raw hash data encoded in base64. Example: <code style=\"font-size:85%\">XUFAKrxLKna5cZ2REBfFkg==<\/code>":{"ru":"Необработанные хеш-данные, кодируются в base64. Пример: <code style=\"font-size:85%\">XUFAKrxLKna5cZ2REBfFkg==<\/code>"},"Re-hovering":{"ru":"Повторное наведение"},"Re-hovering over an element":{"ru":"Повторное наведение на элемент"},"Read data of the specified type from the clipboard.":{"ru":"Прочитать данные указанного типа из буфера обмена."},"Read file content to the variable.":{"ru":"Прочитать содержимое файла в переменную."},"Read the content of the specified file to list. Each element of the list will contain one line of original file.":{"ru":"Прочитать содержимое указанного файла в список. Каждый элемент списка будет содержать одну строку исходного файла."},"Realtime":{"ru":"В реальном времени"},"Receiving date":{"ru":"Дата получения"},"Recent messages":{"ru":"Недавних писем"},"Recent messages are messages received during the current session and have the <code>\\Recent<\/code> flag.":{"ru":"Недавние письма - это письма, полученные за текущую сессию и имеющие флаг <code>\\Recent<\/code>."},"Recipient of message":{"ru":"Получатель письма"},"Recipient of message, \"To\" field":{"ru":"Получатель письма, поле \"To\""},"Record":{"ru":"Запись"},"Record id":{"ru":"Ид записи"},"Record id after move":{"ru":"Ид записи после перемещения"},"Record id will be written to this variable after action will be completed. You can use this id to interact with this record letter, for example, delete it or change.":{"ru":"Идентификатор записи будет записан в эту переменную после того, как действие будет завершено. Вы можете использовать этот идентификатор для взаимодействия с записью после завершение действия, например, удалить ее или изменить ее."},"Record id, which will be deleted. It can be obtained from resource with type \"Database\" or from list returned from \"Select Records\" action.":{"ru":"Идентификатор записи, которая будет удалена. Его можно получить из ресурса с типом \"База\" или из списка, возвращаемого из действия \"Получить Записи\"."},"Record id, which will be moved to group. It can be obtained from resource with type \"Database\" or from list returned from \"Select Records\" action.":{"ru":"Идентификатор записи, которая будет перемещена в группу. Его можно получить из ресурса с типом \"База\" или из списка, возвращаемого из действия \"Получить Записи\"."},"Record id, which will be selected. It can be obtained from resource with type \"Database\" or from list returned from \"Select Records\" action.":{"ru":"Идентификатор записи, которая будет получена. Его можно получить из ресурса с типом \"База\" или из списка, возвращаемого из действия \"Получить Записи\"."},"Record id, which will updated. It can be obtained from resource with type \"Database\" or from list returned from \"Select Records\" action.":{"ru":"Идентификатор записи, которая будет изменена. Его можно получить из ресурса с типом \"База\" или из списка, возвращаемого из действия \"Получить Записи\"."},"Record id. Leave blank to update last record obtained as resource":{"ru":"Ид записи. Оставьте поле пустым, чтобы обновить последнюю запись, полученную как ресурс"},"Record list":{"ru":"Список записей"},"Record move type":{"ru":"Тип перемещения записи"},"Record will be copied to a group filled in \"Group id\" field. Old copy will remain, so there will two same records after action completes.":{"ru":"Запись будет скопирована в группу, заданную в поле \"Ид группы\". Старая копия останется, поэтому после завершения действия в базе будут две одинаковые записи."},"Record will be removed from current group and will be added to a group filled in \"Group id\" field":{"ru":"Запись будет удалена из текущей группы и добавлена в группу, заданную в поле \"Ид группы\""},"Records are displayed and may be edited in database manager.":{"ru":"Записи отображаются и могут быть изменены в менеджере базы данных."},"Regular Expression":{"ru":"Регулярное Выражение"},"Regular Expression Constructor":{"ru":"Конструктор Регулярных Выражений"},"Regular expression for splitting may be more complex and contain more symbols. This mechanism is more powerfull than splitting with static string.":{"ru":"Регулярное выражение для разделения строки может быть более сложным и содержать больше символов. Этот механизм более мощный, чем разделение на части простой строкой."},"Regular expression is convenient mechanism to process strings. It helps to search for string parts, split string, etc":{"ru":"Регулярное выражение - удобный механизм для обработки строк. Он помогает искать строки, разделять строку на части и т. д."},"Regular expression. Can contain groups, all captured groups will be placed into variables. Regular expressions are applied in multiline mode, if you want to match any character including line break use following expression [\\S\\s]+. Dot .+ captures any character except line break.":{"ru":"Регулярное выражение. Может содержать группы, все извлеченные группы будут помещены в переменные. Регулярные выражения применяются в многострочном режиме, если вы хотите, извлечь любой символ, включая перенос строки, используйте следующее выражение [\\S\\s]+. Точка .+ извлекает любой символ, кроме переноса строки."},"Regular expression. Can contain groups. Regular expressions are applied in multiline mode, if you want to match any character including line break use following expression [\\S\\s]+. Dot .+ captures any character except line break.":{"ru":"Регулярное выражение. Оно может содержать группы. Регулярные выражения применяются в многострочном режиме, если вы хотите, извлечь любой символ, включая перенос строки, используйте следующее выражение [\\S\\s]+. Точка .+ извлекает любой символ, кроме переноса строки."},"Regular expression. Regular expressions are applied in multiline mode, if you want to match any character including line break use following expression [\\S\\s]+. Dot .+ captures any character except line break.":{"ru":"Регулярное выражение. Регулярные выражения применяются в многострочном режиме, если вы хотите, извлечь любой символ, включая перенос строки, используйте следующее выражение [\\S\\s]+. Точка .+ извлекает любой символ, кроме переноса строки."},"Reload lines from file or rows from database.":{"ru":"Перезагрузить строки из файла или записи из базы данных."},"Remember that this function is required for a simple conversion. You can use other actions with both the object and the string. It is recommended that you use the <span style=\"color:black\">Get value<\/span> or <span style=\"color:black\">Get all values<\/span> actions if you want to get specific information about an object or JSON string.":{"ru":"Помните, что данная функция используется для простого преобразования. Вы можете использовать другие действия как с объектом, так и со строкой. Но всё же рекомендуется сразу обращаться к функциям <span style=\"color:black\">Получить значение<\/span> или <span style=\"color:black\">Получить все значения<\/span>, если вы хотите собрать особую информацию об объекте или строке в формате JSON."},"Remove":{"ru":"Удалить"},"Remove From List":{"ru":"Удалить Из Списка"},"Remove a flag or several flags from the specified message.":{"ru":"Удалить флаг или несколько флагов с указанного письма."},"Remove a specific range of items from the list.":{"ru":"Удалить определенный диапазон элементов из списка."},"Remove all filters":{"ru":"Убрать все фильтры"},"Remove all items with a specific value from the list.":{"ru":"Удалить все элементы имеющие заданное значение из списка."},"Remove an item with a specific index from the list.":{"ru":"Удалить элемент имеющий определенный индекс из списка."},"Remove any file extension":{"ru":"Удалять любое расширение файла"},"Remove characters":{"ru":"Удалять символы"},"Remove directory index":{"ru":"Удалить индекс каталога"},"Remove duplicate items from the specified list.":{"ru":"Удалить повторяющиеся элементы из указанного списка."},"Remove empty":{"ru":"Удалить пустые"},"Remove empty lines":{"ru":"Удалить пустые строки"},"Remove ext":{"ru":"Убрать расширение"},"Remove file or folder.":{"ru":"Удалить файл или папку."},"Remove part of the string and\/or insert a new one.":{"ru":"Удалите часть строки и\/или вставьте новую."},"Remove query parameters":{"ru":"Удалить параметры запроса"},"Remove record from all groups.":{"ru":"Удалить запись из всех групп."},"Remove slashes":{"ru":"Убрать слэши"},"Remove tabs":{"ru":"Удалять табуляцию"},"Remove the \"c\" item from the query if the \"Clear old query string\" parameter is disabled":{"ru":"Удалить из запроса элемент \"c\", если деактивирован параметр \"Очистить старую строку запроса\""},"Remove this item from the specified URL":{"ru":"Удалить этот элемент из указанного URL"},"Remove trailing slash":{"ru":"Удалить завершающий слэш"},"Remove trailing slashes":{"ru":"Удалите завершающие слэши"},"Removes online profile.":{"ru":"Удалить онлайн профиль."},"Removes profile.":{"ru":"Удалить профиль"},"Rename the specified mailbox folder.":{"ru":"Переименовать указанную папку почтового ящика."},"Renaming INBOX is allowed and has special behavior. It moves all messages from INBOX to a new folder with the specified name, while INBOX remains empty.":{"ru":"Переименование INBOX разрешено и имеет особое поведение. Оно перемещает все письма из INBOX в новую папку с указанным именем, а INBOX остается пустой."},"Replace characters with space":{"ru":"Заменять символы на пробел"},"Replace existing flags with the specified ones":{"ru":"Заменить существующие флаги указанными"},"Replace ip exposed by WebRTC with specified ip. If you want WebRTC to return custom ip, please use 'Browser Settings' action.":{"ru":"Заменить ip, возвращаемый WebRTC на заданный ip. Если вы хотите задать произвольное значение, используйте действие 'Настройки браузера'."},"Replace line breaks with space":{"ru":"Заменить переносы строк пробелом"},"Replace multiple spaces with single ones":{"ru":"Заменять многочисленные пробелы на одиночные"},"Replace resource data with data from list.":{"ru":"Заменить данные ресурса данными из списка."},"Replace with":{"ru":"Заменить на"},"Replace with spaces":{"ru":"Заменить пробелами"},"Replacement string may contain parts of match by using special special strings: \\1, \\2, \\3, etc. \\1 will be replaced with first group for current match, \\2 will be replaced with second group and so on.":{"ru":"Параметр 'Заменить на' также может содержать специальные строки: \\1, \\2, \\3 и т. д. \\1 будет заменено значением первой группы, \\2 будет заменено второй группой и так далее."},"Request another code.":{"ru":"Запросить еще один код."},"Researching sites protection":{"ru":"Исследование защиты сайтов"},"Reset the previously set value and use the default value.":{"ru":"Сбросить значение установленное ранее и использовать значение по умолчанию."},"Reset timeout":{"ru":"Таймаут сброса"},"Reset timeout (seconds)":{"ru":"Таймаут сброса (секунд)"},"Resource":{"ru":"Ресурс"},"Resource Location is filename for LinesFromFile resource, url for LinesFromUrl and directory location for FilesFromDirectory resource type.":{"ru":"Расположение Ресурса является именем файла для ресурса типа Из Файла, url для типа Из Ссылки и путь к папке для ресурса типа Файлы Из Папки."},"Resource data will be completely recreated. All data about resource items state(successes and failures) will be lost. If some resource items was deleted, then this information will be lost too.":{"ru":"Данные ресурса будут полностью заменены на новые. Все состояния всех данных (количество успехов и неудач ресурса) также будет сброшено. Если некоторые строки были удалены, эта информация также будет потеряна."},"Resource name":{"ru":"Имя ресурса"},"Resource name for which location will be obtained.":{"ru":"Имя ресурса, для которого будет получено расположение."},"Resource name in which new item will be inserted.":{"ru":"Имя ресурса, в который будет добавлен новый элемент."},"Resource name is used to identify it. Could be any string.":{"ru":"Имя ресурса, потом оно может быть использовано для его идентификации. Может быть любой строкой."},"Resource name to count items":{"ru":"Имя ресурса в котором будет подсчитаны элементы"},"Resource name which data will be replaced with data from list.":{"ru":"Имя ресурса, данные которого будут заменены данными из списка."},"Resource name, for which last acquired item will be deleted.":{"ru":"Имя ресурса, для которого последний использованный элемент будет удален."},"Resource name, which will be copied to list":{"ru":"Имя ресурса, который будет скопирован в список"},"Resource name, which will be reloaded":{"ru":"Имя ресурса, который будет перезагружен"},"Resource port.":{"ru":"Порт ресурса."},"Resource will be cleared automatically if successful or fail number of usage will exceed. For example, if 'Use each file one time' is set, resource item will be deleted automatically after single usage":{"ru":"Ресурс будет автоматически очищен в случае достижения заданного числа успешных или неудачных использований ресурса. Например, если при создании ресурса вы указали 'Используйте каждую строку один раз', то ресурс будет удален автоматически после первого использования"},"Resources {{resource}} also will be expanded to resource value.":{"ru":"Ресурсы {{resource}} также будут заменены на их значения."},"Result List":{"ru":"Результат В Виде Списка"},"Result format":{"ru":"Формат результата"},"Result formats:":{"ru":"Форматы результата:"},"Result group id":{"ru":"Ид созданной группы"},"Result has a list type, so it can be manipulated with 'List' module or with javascript.":{"ru":"Результат имеет тип список, поэтому с ним можно работать с помощью модуля 'Список' или с помощью javascript."},"Result of thread execution. In order to set this value from executed function, you need to use 'Result' action. If there was no call of 'Result' action inside function, null will be returned.":{"ru":"Результат работы асинхронной функции. Чтобы установить это значение из выполняемой функции, вам нужно использовать действие \"Return\". Если в функции не было вызова действия \"Return\", возвращается значение null."},"Result thread id":{"ru":"Результат. ID потока"},"Result variable contains entire match, all next variables contains captured groups.":{"ru":"Переменная Результат содержит совпадение целиком, все следующие переменные содержат захваченные группы."},"Result with records count":{"ru":"Результат с количеством записей"},"Result, which was entered by user in user input field.":{"ru":"Результат, который был введен пользователем."},"Results as a list of items":{"ru":"Результаты в виде списка"},"Return information about current profile.":{"ru":"Получить информацию о текущем профиле."},"Reunion":{"ru":"Реюньон"},"Reverse":{"ru":"Обратный скролл"},"Reverse scroll chance":{"ru":"Шанс обратной прокрутки"},"Right":{"ru":"Справа"},"Right substring":{"ru":"Правая подстрока"},"Romania":{"ru":"Румыния"},"Root":{"ru":"Корень"},"Round to whole number":{"ru":"Округлить до целого числа"},"Run executable":{"ru":"Запустить исполняемый файл"},"Run executable or batch script.":{"ru":"Выполнить исполняемый файл или batch скрипт."},"Run executable with command line parameters":{"ru":"Запуск исполняемого файла с параметрами командной строки"},"Run in BAS folder":{"ru":"Запустить в папке BAS"},"Run several executables one by one":{"ru":"Запуск нескольких исполняемых файлов один за другим"},"Russian Federation":{"ru":"Российская Федерация"},"Rwanda":{"ru":"Руанда"},"SMS receiving service for which need to get a balance.":{"ru":"Сервис приема SMS, для которого нужно получить баланс."},"SMS receiving service for which need to get a list of countries.":{"ru":"Сервис приема SMS, для которого нужно получить список стран."},"SMS receiving service for which need to get a list of sites.":{"ru":"Сервис приема SMS, для которого нужно получить список сайтов."},"SMS receiving service for which need to get the count of available numbers.":{"ru":"Сервис приема SMS, для которого нужно получить количество доступных номеров."},"SMS receiving service.":{"ru":"Сервис приема SMS."},"SMTP Server Host":{"ru":"Адрес SMTP сервера"},"Safe Battery":{"ru":"Безопасное использование батареи"},"Safe Element Size":{"ru":"Безопасное использование ClientRect"},"Saint Kitts and Nevis":{"ru":"Сент-Китс и Невис"},"Saint Lucia":{"ru":"Сент-Люсия"},"Saint Vincent and the Grenadines":{"ru":"Сент-Винсент и Гренадины"},"Samoa":{"ru":"Самоа"},"Sao Tome and Principe":{"ru":"Сан-Томе и Принсипи"},"Saudi Arabia":{"ru":"Саудовская Аравия"},"Save In Base64 Format":{"ru":"Сохранить в формате base64"},"Save attached files":{"ru":"Сохранить вложенные файлы"},"Save message id":{"ru":"Сохранить id письма"},"Save name into GROUP1 variable by using group":{"ru":"Сохранить имя в переменной GROUP1 используя группы"},"Scalable speed":{"ru":"Масштабируемая скорость"},"Scale":{"ru":"Масштаб"},"Script execution won't finish until at least one asynchronous function is working. You can use that behavior to stop script automatically when all tasks are done. For example, if main thread starts two functions, one takes 1 minute and second takes 2 minutes. In that case, script will finish in 2 minutes even if main thread will finish immediately after start.":{"ru":"Выполнение скрипта не завершится, пока будет работать хотя бы одна асинхронная функция. Вы можете использовать это поведение для автоматической остановки скрипта, когда все задачи выполнены. Расмотрим пример, если основной поток запускает две функции, выполнение одной занимает 1 минуту, а второй - 2 минуты. В этом случае скрипт завершится через 2 минуты, даже если основной поток завершит работу сразу после запуска."},"Scroll at random distance.":{"ru":"Прокрутка на случайное расстояние."},"Scroll chance":{"ru":"Шанс прокрутки"},"Scroll direction":{"ru":"Направление прокрутки"},"Scroll target":{"ru":"Прокрутка к цели"},"Scroll to target":{"ru":"Прокрутка к цели"},"Scrolling is faster, the pauses between several spins of the wheel is shorter":{"ru":"Прокрутка быстрее, паузы между несколькими прокрутками колеса меньше"},"Scrolling is slower, the pauses between several spins of the wheel is longer":{"ru":"Прокрутка медленнее, паузы между несколькими прокрутками колеса больше"},"Search In Folder":{"ru":"Папка Для Поиска"},"Search In Subfolders":{"ru":"Поиск В Подпапках"},"Searches a string defined with \"Original String\" for a specified value defined with \"Replace From\", and returns a new string where the specified values are replaced to value defined with \"Replace To\" parameter.":{"ru":"Это действие ищет в строке, определенной с помощью параметра \"Оригинальная Строка\", значения, определенные с помощью параметра \"Заменить Из\", и заменяет их на значение определенное с помощью параметра \"Заменить На\"."},"Searches several online profiles by name.":{"ru":"Поиск списка онлайн профилей по имени."},"Searches single online profile by name.":{"ru":"Поиск одного профиля по имени."},"Seconds":{"ru":"Секунды"},"Seconds to add. Can be negative.":{"ru":"Прибавить секунд. Может быть отрицательным."},"Seconds. From 0 to 59":{"ru":"Секунды. От 0 до 59"},"See following":{"ru":"Смотрите данное"},"See full documentation and examples <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/cheshirecaat.github.io\/bas-docs\/json-path\/json-path-en.html'); return false;\"><span class=\"tr\">here.<\/span><\/a>":{"ru":"Смотрите полную документацию и примеры <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/cheshirecaat.github.io\/bas-docs\/json-path\/json-path-ru.html'); return false;\"><span class=\"tr\">здесь.<\/span><\/a>"},"See the settings of the used protocol for your mail.":{"ru":"Смотрите настройки используемого протокола для вашей почты."},"Select Chrome fingerprint for Windows. This is the only type of fingerprint which can be used for free.":{"ru":"Выбрать отпечаток Chrome для Windows. Это единственный тип отпечатков, который можно использовать бесплатно."},"Select Chrome fingerprint for any platform":{"ru":"Выберать отпечаток Chrome для любой платформы"},"Select all images where there is a boat":{"ru":"Выберите все изображения, на которых есть лодка"},"Select all images where there is a plane":{"ru":"Выберите все изображения, на которых есть самолёт"},"Select any fingerprint":{"ru":"Выбрать любой отпечаток"},"Select if you want to add new record to resources system besides database. If there is no resource connected to current table, this setting will do nothing.":{"ru":"Выберите, хотите ли вы добавить новую запись в систему ресурсов, помимо добавления этой записи в базу данных. Если ресурс не подключен к текущей таблице, эта настройка не сделает ничего."},"Select if you want to delete record from resources system besides database. If there is no resource connected to current table, this setting will do nothing.":{"ru":"Выберите, хотите ли вы удалить запись из системы ресурсов, помимо удаления этой записи из базы данных. Если ресурс не подключен к текущей таблице, эта настройка не сделает ничего."},"Select if you want to delete records from resources system besides database. If there is no resource connected to current table, this setting will do nothing.":{"ru":"Выберите, хотите ли вы удалить записи из системы ресурсов, помимо удаления этих записей из базы данных. Если ресурс не подключен к текущей таблице, эта настройка не сделает ничего."},"Select if you want to update record in resources system besides database. If there is no resource connected to current table, this setting will do nothing.":{"ru":"Выберите, хотите ли вы изменить существующую запись в системе ресурсов, помимо изменений этой записи в базе данных. Если ресурс не подключен к текущей таблице, эта настройка не сделает ничего."},"Select if you want to update records in resources system besides database. If there is no resource connected to current table, this setting will do nothing.":{"ru":"Выберите, хотите ли вы изменить существующие записи в системе ресурсов, помимо изменений этих записей в базе данных. Если ресурс не подключен к текущей таблице, эта настройка не сделает ничего."},"Select one database record by id.":{"ru":"Получить одну запись по ее идентификатору."},"Select only fingerprints, which added date matches certain condition":{"ru":"Выбирать только те отпечатки, дата добавления которых соответствует определенному условию"},"Select only fingerprints, which has certain browser version. It is recommended to use this option together with explicitly specifying browser name. For example, you can select fingerprints for Chrome browser with version greater than 75. By setting \"Minimum browser version\" and \"Maximum browser version\" to same value, you can select exact version. If you use \"current\" as input parameter for both minimum and maximum browser version, it will help to avoid discrepancy between BAS browser version and browser version from fingerprint. Therefore browser authenticity will be significantly increased.":{"ru":"Выбирать только те отпечатки, которые имеют определенную версию браузера. Рекомендуется использовать эту опцию вместе с явным указанием названия браузера. Например, вы можете выбрать отпечатки для браузера Chrome с версией не меньше 75. Установив для параметров \"Минимальная версия браузера\" и \"Максимальная версии браузера\" одинаковые значения, вы можете выбрать точную версию. Если вы используете специальное слово \"current\" в качестве входного параметра как для минимальной, так и для максимальной версии браузера, это поможет избежать несоответствия между версией браузера BAS и версией браузера в отпечатке. Поэтому аутентичность браузера будет значительно увеличена."},"Select only fingerprints, which has certain browser version. It is recommended to use this option together with explicitly specifying browser name. For example, you can select fingerprints for Chrome browser with version less than 75. By setting \"Minimum browser version\" and \"Maximum browser version\" to same value, you can select exact version. If you use \"current\" as input parameter for both minimum and maximum browser version, it will help to avoid discrepancy between BAS browser version and browser version from fingerprint. Therefore browser authenticity will be significantly increased.":{"ru":"Выбирать только те отпечатки, которые имеют определенную версию браузера. Рекомендуется использовать эту опцию вместе с явным указанием названия браузера. Например, вы можете выбрать отпечатки для браузера Chrome с версией не больше 75. Установив для параметров \"Минимальная версия браузера\" и \"Максимальная версии браузера\" одинаковые значения, вы можете выбрать точную версию. Если вы используете специальное слово \"current\" в качестве входного параметра как для минимальной, так и для максимальной версии браузера, это поможет избежать несоответствия между версией браузера BAS и версией браузера в отпечатке. Поэтому аутентичность браузера будет значительно увеличена."},"Select only fingerprints, which has maximum browser height.":{"ru":"Выбирать только те отпечатки, высота которых меньше заданного значения."},"Select only fingerprints, which has maximum browser width.":{"ru":"Выбирать только те отпечатки, ширина которых меньше заданного значения."},"Select only fingerprints, which has minimum browser height.":{"ru":"Выбирать только те отпечатки, высота которых больше заданного значения."},"Select only fingerprints, which has minimum browser width.":{"ru":"Выбирать только те отпечатки, ширина которых больше заданного значения."},"Select only fingerprints, which was added to database no more than 15 days ago":{"ru":"Выбирать только те отпечатки, которые были добавлены не позже 15 дней назад"},"Select records from database.":{"ru":"Получить записи из базы данных"},"Select system and device for which you want to obtain fingerprint. Several tags may be combined together, in that case service will return only fingerprints, which matches all tags.":{"ru":"Выберите систему и устройство, для которых вы хотите получить отпечаток. Несколько параметров могут быть объединены вместе, в этом случае сервис вернет только те отпечатки, которые соответствуют всем параметрам."},"Selecting an element to hover":{"ru":"Выбор элемента для наведения"},"Send an email message using the SMTP client. It must be configured with \"SMTP settings\" action preliminarily.":{"ru":"Отправить сообщение электронной почты, используя SMTP-клиент. Он должен быть предварительно настроен с помощью действия \"SMTP Настройки\"."},"Send as HTML":{"ru":"Отправить как HTML"},"Send message to the specific Telegram chat.":{"ru":"Отправить сообщение в заданный Telegram чат."},"Sender of message":{"ru":"Отправитель письма"},"Sender of message, \"From\" field":{"ru":"Отправитель письма, поле \"From\""},"Senegal":{"ru":"Сенегал"},"Sensors":{"ru":"Датчики"},"Separator":{"ru":"Разделитель"},"Separator Regular Expression":{"ru":"Регулярное Выражение Разделитель"},"Separator between integer and decimal parts of a number.":{"ru":"Разделитель между целой и дробной частями числа."},"Separator between thousandths.":{"ru":"Разделитель между тысячными."},"Separator to insert between elements of CSV string.":{"ru":"Разделитель, вставляемый между элементами CSV строки."},"Separator to insert between the joined strings.":{"ru":"Разделитель, вставляемый между объединенными строками."},"Separators":{"ru":"Разделители"},"Sequential movements":{"ru":"Последовательные движения"},"Serbia":{"ru":"Сербия"},"Server address":{"ru":"Адрес сервера"},"Server url":{"ru":"Url сервера"},"Service":{"ru":"Сервис"},"Service URL":{"ru":"URL сервиса"},"Service URL. Can be blank. You can use this option if the service you want is not on the list of available services. In this case, specify the name of the service that works on a similar API and use the address you need.":{"ru":"URL сервиса. Может быть пустым. Вы можете использовать этот параметр, если нужного вам сервиса нет в списке доступных. В таком случае укажите название сервиса, который работает по аналогичному API, и используйте нужный вам адрес."},"Service for receiving SMS, from which need to get a phone number.":{"ru":"Сервис приема SMS, от которого нужно получить номер телефона."},"Service key":{"ru":"Ключ сервиса"},"Service key. Can be empty":{"ru":"Ключ сервиса. Может быть пустым"},"Service name":{"ru":"Название сервиса"},"Set a flag or several flags for the specified message.":{"ru":"Установить флаг или несколько флагов для указанного письма."},"Set browser location. Geolocation can be changed by \"Proxy\" action as well.":{"ru":"Установить месторасположение браузера. Месторасположение также можно изменить с помощью действия \"Прокси\"."},"Set browser timezone and position the same as timezone and position of selected ip.":{"ru":"Установить часовой пояс и месторасположение браузера в те же значения, что и часовой пояс и месторасположение ip."},"Set browser timezone. Timezone can be changed by \"Proxy\" action as well.":{"ru":"Установить часовой пояс браузера. Часовой пояс также можно изменить с помощью действия \"Прокси\"."},"Set deformation coefficient to exact value.":{"ru":"Установить коэффициент деформации в точное значение."},"Set flags after receiving":{"ru":"Установить флаги после получения"},"Set message flags after receiving":{"ru":"Установить флаги письма после получения"},"Set new resource data":{"ru":"Задать новые данные для ресурса."},"Set only those fields that you want to change in the database.":{"ru":"Задайте только те поля, которые хотите заменить в базе."},"Set the color of a pixel by its coordinates in the image.":{"ru":"Установить цвет пикселя по его координатам на изображении."},"Several additional features may be used to make your browser less detectable. Apply proxy through 'Proxy' action. Change timezone with 'Set timezone and geolocation by ip' action. Use, store and reuse profiles, because starting browser on newly created profiles may be suspicious.":{"ru":"Некоторые дополнительные действия могут быть использованы, чтобы сделать ваш браузер более защищенным. Задайте прокси сервер через действие 'Прокси'. Измените часовой пояс с помощью действия 'Установить часовой пояс и координаты по ип'. Используйте, сохраняйте и повторно используйте профили, потому что запуск браузера на только что созданных профилях может быть подозрительным."},"Several groups may be captured. If line is":{"ru":"Можно извлечь сразу несколько групп. Если строка "},"Seychelles":{"ru":"Сейшелы"},"Shake length":{"ru":"Длина shake"},"Shake result length":{"ru":"Длина результата shake"},"Sharing data. You can pass data to function by setting input parameters, results from function may be obtained by using \"Get async function result\" action. Results are available only after function finished working.":{"ru":"Обмен данными. Вы можете передать данные в функцию, установив входные параметры, результаты из нее можно получить с помощью действия \"Получить результат асинхронной функции\". Результаты доступны только после завершения работы функции."},"Short emulation time":{"ru":"Короткое время эмуляции"},"Short move":{"ru":"Короткое движение"},"Short move chance":{"ru":"Шанс короткого движения"},"Short move to element":{"ru":"Короткое движение к элементу"},"Short movements":{"ru":"Короткие движения"},"Show content of download folder":{"ru":"Показать содержимое папки загрузки"},"Show user input field to user, wait until user will enter some value and save that value into variable.":{"ru":"Показать поле для ввода пользователю, дождаться, пока он введет какое-то значение и сохранить это значение в переменной."},"Shuffle all list items in the random order.":{"ru":"Перемешать все элементы списка в случайном порядке."},"Sierra Leone":{"ru":"Сьерра-Леоне"},"Signs":{"ru":"Знаков"},"Simultaneous":{"ru":"Одновременно"},"Simultaneous Usage":{"ru":"Одновременных использований"},"Singapore":{"ru":"Сингапур"},"Site":{"ru":"Сайт"},"Site can obtain information about system timezone and location using internal apis (":{"ru":"Сайт может получать информацию о системном часовом поясе и местоположении с использованием внутреннего апи ("},"Site can obtain information about system timezone by using internal '":{"ru":"Сайт может получать информацию о системном часовом поясе, используя класс '"},"Site can obtain information about your position using ":{"ru":"Сайт может получить информацию о вашем месторасположении используя "},"Size":{"ru":"Размер"},"Sleep chance":{"ru":"Шанс сна"},"Sleep random time.":{"ru":"Спать случайное время."},"Slovakia":{"ru":"Словакия"},"Slovenia":{"ru":"Словения"},"Slowly moving the cursor over an element with text from left to right to emulate reading.":{"ru":"Медленное перемещение курсора по элементу с текстом слева-направо для эмуляции чтения."},"Small movements of the cursor, simulating raising the mouse.":{"ru":"Небольшие движения курсора, имитирующие поднятие мыши."},"Solomon Islands":{"ru":"Соломоновы острова"},"Solve any type of captcha that requires clicking on images.":{"ru":"Решить любой тип капчи, который требует кликать по изображениям."},"Solve captcha using https:\/\/2captcha.com\/ service":{"ru":"Решить капчу используя сервис https:\/\/2captcha.com\/"},"Solve captcha using https:\/\/anti-captcha.com\/ service":{"ru":"Решить капчу используя сервис https:\/\/anti-captcha.com\/"},"Solve captcha using https:\/\/capmonster.cloud\/ service":{"ru":"Решить капчу используя сервис https:\/\/capmonster.cloud\/"},"Solve captcha using https:\/\/rucaptcha.com\/ service":{"ru":"Решить капчу используя сервис https:\/\/rucaptcha.com\/"},"Solve captcha with clicks":{"ru":"Решить капчу кликами"},"Somalia":{"ru":"Сомали"},"Some services may not have a country name in English or have a name in English in the <code>name<\/code> property and have no name in Russian at all.":{"ru":"Некоторые сервисы могут не иметь названия страны на Английском или в свойстве <code>name<\/code> иметь название на Английском и вообще не иметь названия на Русском."},"Sort ascending":{"ru":"Сортировать по возрастанию"},"Sort descending":{"ru":"Сортировать по убыванию"},"Sort field":{"ru":"Поле сортировки"},"Sort query parameters":{"ru":"Сортировать параметры запроса"},"Sort query params":{"ru":"Сортировать параметры запроса"},"Sort the elements of the list.":{"ru":"Сортировать элементы списка."},"Sort type":{"ru":"Тип сортировки"},"Sorting":{"ru":"Сортировка"},"Sorting column":{"ru":"Поле для сортировки"},"Sorting field":{"ru":"Поле сортировки"},"Sorting is not supported by all mail services, if sorting is enabled, but the service does not support it, the action will fail.":{"ru":"Сортировка поддерживается не всеми почтовыми сервисами, если сортировка включена, но сервис её не поддерживает, действие завершится ошибкой."},"Sorting type":{"ru":"Тип сортировки"},"Source":{"ru":"Источник"},"South Africa":{"ru":"Южная Африка"},"South Sudan":{"ru":"Южный Судан"},"Spaces":{"ru":"Пробелы"},"Spain":{"ru":"Испания"},"Spam folder, on some mails":{"ru":"Спам-папка, на некоторых почтах"},"Specific browser version or higher":{"ru":"Заданная версией браузера или выше"},"Specific browser version or lower":{"ru":"Заданная версией браузера или ниже"},"Specifies how much the timing measurement results will be stretched. Big values means that site will think, that code execution will take longer than it actually would. Values which are close to 0.0 creates a sense that code executes faster. For example, if resulting time deformation is 1.1 and execution of particular code will take 10 msec, site will think, that code was executed in 11 msec instead. Values below zero are irrelevant. This parameter works only with \"Time deformation from\" parameter.":{"ru":"Определяет, насколько сильно будут изменены результаты измерения времени. Большие значения означают, что сайт будет считать, что выполнение кода займет больше времени, чем на самом деле. Значения, близкие к 0.0, создадут ощущение, что код выполняется быстрее. Например, если коэффициент деформации времени равен 1.1, а выполнение конкретного кода занимает 10 мс, сайт будет считать, что код был выполнен за 11 мс. Значения не может быть меньше нуля. Этот параметр работает только вместе с другим параметром \"Деформация времени от\"."},"Specifies how much the timing measurement results will be stretched. Big values means that site will think, that code execution will take longer than it actually would. Values which are close to 0.0 creates a sense that code executes faster. For example, if resulting time deformation is 1.1 and execution of particular code will take 10 msec, site will think, that code was executed in 11 msec instead. Values below zero are irrelevant. This parameter works only with \"Time deformation to\" parameter.":{"ru":"Определяет, насколько сильно будут изменены результаты измерения времени. Большие значения означают, что сайт будет считать, что выполнение кода займет больше времени, чем на самом деле. Значения, близкие к 0.0, создадут ощущение, что код выполняется быстрее. Например, если коэффициент деформации времени равен 1.1, а выполнение конкретного кода занимает 10 мс, сайт будет считать, что код был выполнен за 11 мс. Значения не может быть меньше нуля. Этот параметр работает только вместе с другим параметром \"Деформация времени до\"."},"Specify connection settings manually":{"ru":"Указать настройки подключения вручную"},"Specify new values for the items to be changed in the URL, specify <code>\"-BAS-CLEAR-\"<\/code> if the item needs to be removed, leave the field blank if the item does not need to be changed.":{"ru":"Укажите новые значения для элементов, которые нужно изменить в URL, укажите <code>\"-BAS-CLEAR-\"<\/code> если элемент нужно удалить, оставьте поле пустым если элемент не нужно менять."},"Specify the protocol, imap or pop3, by which the connection to the mail server will be made in the \"Protocol\" parameter, please note that when using the pop3, most of the module functions will not be available. If the action is not available on pop3, then it will end with an appropriate error.":{"ru":"Укажите протокол, imap или pop3, по которому будет производится подключение к почтовому серверу в параметр \"Протокол\", учтите что при использовании pop3 большинство функций модуля будут не доступны. Если действие недоступно по pop3, то оно завершится соответствующей ошибкой."},"Specify values for the items need to be added to the URL, leave empty items that do not need to be added.":{"ru":"Укажите значения для элементов которые нужно добавить в URL, оставьте пустыми элементы которые не нужно добавлять."},"Spintax":{"ru":"Спинтакс"},"Spintax {value1|value2} will be expanded to value1 or value2.":{"ru":"Спинтакс {value1|value2} будет заменен на одно из значений value1 или value2."},"Split a string into words.":{"ru":"Разделить строку на слова."},"Split string into a list by a specific separator.":{"ru":"Разделить строку в список по определенному разделителю."},"Split string into lines.":{"ru":"Разделить строку на строки."},"Split text with regular expression.":{"ru":"Разделить текст регулярным выражением."},"Split the original string character by character, each character will be a separate item in the list.":{"ru":"Разделить исходную строку посимвольно, каждый символ будет отдельным элементом списка."},"Split the string into sentences.":{"ru":"Разделить строку на предложения."},"Sri Lanka":{"ru":"Шри-Ланка"},"Start":{"ru":"Начало"},"Start Index":{"ru":"Начальный Индекс"},"Start in a new thread":{"ru":"Запуск в новом потоке"},"Start position":{"ru":"Первый байт"},"Start task in a new thread. New thread id will be returned in 'Result thread id' parameter.":{"ru":"Запустить функцию в новом потоке. ID созданного потока будет возвращен в параметре 'Результат. ID потока'."},"Start task in old thread. THREAD_ID variable must be obtained as a result of previously called 'Call function asynchronously' action. Previous action call must set 'Close thread after function finish' parameter to false, otherwise thread will be stopped.":{"ru":"Запустить функцию в созданном ранее потоке. Переменная THREAD_ID должна быть получена в результате ранее вызванного действия 'Вызов функции асинхронно'. Предыдущий вызов действия должен установить для параметра 'Остановить поток после завершения функции' значение false, иначе поток будет остановлен преждевременно."},"Stop":{"ru":"Останавливать"},"Stop all functions in the list.":{"ru":"Остановить все функции из списка."},"Stop async function.":{"ru":"Прервать вызов асинхронной функции."},"Stop single function.":{"ru":"Остановить одну функцию."},"String":{"ru":"Строка"},"String To Apply Regexp":{"ru":"Строка Для Применения Регулярного Выражения"},"String To Parse":{"ru":"Строка Для Парсинга"},"String containing the URL with want to change.":{"ru":"Строка, содержащая URL, который нужно изменить."},"String containing the URL with want to normalize.":{"ru":"Строка, содержащая URL, который нужно нормализовать."},"String containing the URL with want to parse.":{"ru":"Строка, содержащая URL, который нужно распарсить."},"String containing the User-Agent with want to parse.":{"ru":"Строка, содержащая User-Agent, который нужно распарсить."},"String does not contain the specified substring":{"ru":"Строка не содержит указанную подстроку"},"String is base64 encoded":{"ru":"Строка закодирована в base64"},"String length":{"ru":"Длина строки"},"String or regular expression used as the delimiter for the original string.":{"ru":"Строка или регулярное выражение используемые в качестве разделителя исходной строки."},"String parts":{"ru":"Части строки после разделения"},"String which will hold resource location. Resource location is filename for 'LinesFromFile' resource, url for 'LinesFromUrl' and directory location for 'FilesFromDirectory' resource type.":{"ru":"Строка, в которой будет находиться расположение ресурса. Расположение ресурса - путь к файлу для ресурса с типом 'Из файла', url для ресурса с типом 'Из ссылки' и путь к папке для типа ресурса 'Файлы из папки'."},"String with profile folder. Slash type is not important.":{"ru":"Тип разделителя значения не имеет."},"String with profile folder. Slash type is not important. It is better to use empty or non existing folder here.":{"ru":"Строка с путем к профилю. Тип разделителя не имеет значения. Здесь лучше использовать пустую папку или путь к несуществующей папке(она будет создана)."},"Strings from separate fields and a list are added to a general list of strings that will be joined.":{"ru":"Строки из отдельных полей и списка складываются в общий список строк которые будут объединены."},"Strip WWW":{"ru":"Вырезать WWW"},"Strip authentication":{"ru":"Вырезать аутентификацию"},"Strip fragment":{"ru":"Вырезать фрагмент\/якорь"},"Strip protocol":{"ru":"Вырезать протокол"},"Strip query":{"ru":"Вырезать запрос"},"Stаtus":{"ru":"Статус"},"Subfolders":{"ru":"Подпапки"},"Subject":{"ru":"Тема"},"Subject contains":{"ru":"Тема содержит"},"Subject not contains":{"ru":"Тема не содержит"},"Substring":{"ru":"Подстрока"},"Substring, the contains of which is necessary to check.":{"ru":"Подстрока, содержание которой нужно проверить."},"Subtract 1 from all found id":{"ru":"Отнять 1 у всех найденных id"},"Subtract 5 from all found id":{"ru":"Отнять 5 у всех найденных id"},"Subtracted DateTime or string":{"ru":"Вычитаемая дата и время либо строка"},"Success Usage":{"ru":"Количество успехов"},"Sudan":{"ru":"Судан"},"Suggestions for cooperation you can send to email: cooperation@marketplace.com":{"ru":"Предложения по сотрудничеству вы можете присылать на почту: cooperation@marketplace.com"},"Suppress configuration warnings":{"ru":"Отключить предупреждения"},"Suriname":{"ru":"Суринам"},"Sweden":{"ru":"Швеция"},"Switching profile requires browser restart, so this action may restart browser in case if it exists. Restarting browser will also reset all browser settings.":{"ru":"Для переключения профиля требуется перезапуск браузера, поэтому это действие может перезапустить браузер, если он уже открыт. Перезапуск браузера также сбросит все настройки."},"Switzerland":{"ru":"Швейцария"},"Synchronize flash state. May restart browser.":{"ru":"Синхронизировать наличие флеш с отпечатком. Может перезапустить браузер."},"Syrian Arab Republic":{"ru":"Сирийская Арабская Республика"},"Table":{"ru":"Таблица"},"Table name, for which operation will be applied":{"ru":"Название таблицы, для которой будет применяться операция"},"Tags":{"ru":"Теги"},"Taiwan, Province of China":{"ru":"Тайвань (Китай)"},"Tajikistan":{"ru":"Таджикистан"},"Take data from empty list i.e. clear resource.":{"ru":"Взять данные из пустого списка, то есть очистить ресурс."},"Tanzania, United Republic Of":{"ru":"Танзания, Объединенная Республика"},"Target":{"ru":"Цель"},"Target object":{"ru":"Целевой объект"},"Target object to convert. If a value of the incorrect type is provided, it will be returned unchanged.":{"ru":"Целевой объект для конвертации. Если указано значение некорректного типа, оно будет возвращено без изменений."},"Target string":{"ru":"Целевая строка"},"Target string to convert. If a value of the incorrect type is provided, it will be returned unchanged.":{"ru":"Целевая строка для конвертации. Если указано значение некорректного типа, оно будет возвращено без изменений."},"Target string to perform the check.":{"ru":"Целевая строка для выполнения проверки."},"Task solution check delay":{"ru":"Задержка проверки решения задачи"},"Task solution check delay in milliseconds. With this parameter you can control the length of the pause between sending the task to the service and the start of waiting for a solution. Most often, captcha-solving services specify the required waiting time, in other cases you can specify any value convenient for you.":{"ru":"Задержка проверки решения задачи в миллисекундах. С помощью этого параметра вы можете контролировать длительность паузы между отправкой капчи на сервис и началом ожидания решения. Чаще всего, сервисы решения капчи указывают необходимое время ожидания, в остальных случаях вы можете указать любое удобное для вас значение."},"Task solution check interval":{"ru":"Интервал проверки решения задачи"},"Task solution check interval in milliseconds. With this parameter you can control the length of the pause between each new check of the captcha solution.":{"ru":"Интервал проверки решения задачи в миллисекундах. С помощью этого параметра вы можете контролировать длительность паузы между каждой новой проверкой решения капчи."},"Technical headers of message":{"ru":"Технические заголовки письма"},"Tells browser to create profile in cloud and store browser data(cookies, localstorage, cache, fingerprint) there.":{"ru":"Создает профиль в облаке, там будут храниться данные браузера(файлы cookie, localstorage, cache, fingerprint)."},"Tells browser to load profile data(cookies, localstorage, cache) from cloud.":{"ru":"Загрузить данные профиля(куки, localstorage, кэш) из облака."},"Tells browser to use specified folder as a place to store cookies, cache, localstorage, etc.":{"ru":"Использовать указанную папку в качестве места для хранения файлов cookie, кеша, localstorage и т. д."},"Template":{"ru":"Шаблон"},"Test if string matches regular expression, return result into variable.":{"ru":"Проверить, соответствует ли строка регулярному выражению, вернуть результат в переменную."},"Text":{"ru":"Текст"},"Text To Apply":{"ru":"Текст для применения xpath"},"Text of message":{"ru":"Текст письма"},"Text, target of xpath query. You can put any xml or html here. Not valid or damaged xml is also acceptable.":{"ru":"Текст, к которому будет применяться xpath запрос. В это поле вы можете поместить любой xml или html. Есть возможность использовать поврежденный xml."},"Texts":{"ru":"Тексты"},"Thailand":{"ru":"Таиланд"},"That file or folder can be manipulated later with 'Filesystem' module.":{"ru":"С этим файлом или папкой можно будет взаимодействовать позже с помощью модуля 'Файловая система'."},"The \"Captcha picture data encoded in base64\" parameter is empty":{"ru":"Параметр \"Данные изображения в base64\" не указан"},"The \"Click coordinates\" variable must not be empty":{"ru":"Переменная \"Координаты для клика\" не должна быть пустой"},"The \"File extension to remove\" parameter is case sensitive.":{"ru":"Параметр \"Удаляемое расширение файла\" чувствителен к регистру."},"The \"Normalize Protocol\" parameter is responsible for normalizing the relative protocol. You can learn more about the relative protocol in":{"ru":"Параметр \"Нормализовать протокол\" отвечает за нормализацию относительного протокола. Подробнее об относительном протоколе можно узнать в"},"The \"Service key\" parameter is empty":{"ru":"Параметр \"Ключ сервиса\" не указан"},"The \"Service name\" parameter is empty":{"ru":"Параметр \"Название сервиса\" не указан"},"The \"Task solution check delay\" parameter is empty":{"ru":"Параметр \"Задержка проверки решения задачи\" не указан"},"The \"Task solution check interval\" parameter is empty":{"ru":"Параметр \"Интервал проверки решения задачи\" не указан"},"The \"name\" property of the object will contain the original file name, the \"path\" property will contain the path to the saved file, and the \"type\" property will contain the mime type of the file. Having obtained the path to the file and its original name from the object, you can rename it using the \"Move file\/folder\" action from the \"Filesystem\" module.":{"ru":"Свойство \"name\" объекта будет содержать оригинальное имя файла, свойство \"path\" будет содержать путь к сохраненному файлу, а свойство \"type\" будет содержать mime тип файла. Получив из объекта путь к файлу и его оригинальное имя, вы можете переименовать его с помощью действия \"Переместить Файл\/Папку\" из модуля \"Файловая система\"."},"The <code>Task solution check delay<\/code> parameter is responsible for the duration of waiting before the BAS starts checking the captcha. First, the captcha sent to the service, then the BAS will wait for the specified time, after which the task status check itself will begin. Most services recommend waiting at least 5 seconds.":{"ru":"Параметр <code>Задержка проверки решения задачи<\/code> отвечает за длительность ожидания перед тем, как BAS начнет проверку капчи. Сначала капча отправляется на сервис, после этого BAS будет ожидать указанное время, по прошествии которого начнется непосредственно проверка состояния задачи. Большинство сервисов рекомендуют подождать не менее 5 секунд."},"The <code>Task solution check interval<\/code> parameter is responsible for the frequency of sending requests to the service to check the captcha solution. The more you set the value, the longer BAS will wait before sending the next request. It is recommended to use a delay of at least 5 seconds.":{"ru":"Параметр <code>Интервал проверки решения задачи<\/code> отвечает за частоту отправки запросов на сервис для проверки решения капчи. Чем больше вы выставите значение, тем дольше BAS будет ожидать перед тем, как отправить очередной запрос. Рекомендуется использовать задержку не менее 5 секунд."},"The URL used when the main URL is relative.":{"ru":"URL используемый в случае, если основной URL является относительным."},"The UTC offset is the difference in minutes from Coordinated Universal Time (UTC) for a particular place and date. Note that this means that the offset is positive if the local timezone is behind UTC and negative if it is ahead. For example, time zone UTC+10:00 (Australian Eastern Standard Time, Vladivostok Time, Chamorro Standard Time) corresponds to -600 offset, because 600 minutes equals to 10 hours.":{"ru":"Смещение относительно UTC - это разница в минутах от универсального глобального времени(UTC) для определенного места и даты. Обратите внимание, что это значит, что смещение будет положительным для часового пояса, находящегося западнее часового пояса UTC и отрицательным — восточнее. Например, если ваш часовой пояс равен UTC+10:00 (австралийское восточное поясное время), то ему будет соответствовать значение -600, так как в 10 часах содержится 600 минут."},"The UTC offset is the difference in minutes from Coordinated Universal Time (UTC) to the ip local time. Note that this means that the offset is positive if the local timezone is behind UTC and negative if it is ahead. For example, time zone UTC+10:00 (Australian Eastern Standard Time, Vladivostok Time, Chamorro Standard Time) corresponds to -600 offset, because 600 minutes equals to 10 hours.":{"ru":"Смещение относительно UTC - это разница в минутах между универсальным глобального времени(UTC) и локальным временем данного ip. Обратите внимание, что это значит, что смещение будет положительным для часового пояса, находящегося западнее часового пояса UTC и отрицательным — восточнее. Например, если ваш часовой пояс равен UTC+10:00 (австралийское восточное поясное время), то ему будет соответствовать значение -600, так как в 10 часах содержится 600 минут."},"The action performed in one or another interval is chosen randomly each time. This means that you will get different results each time you run this action.":{"ru":"Действие, выполняемое в том или ином интервале, каждый раз выбирается случайным образом. Это означает, что вы будете получать разные результаты при каждом запуске этого действия."},"The age of user.":{"ru":"Возраст пользователя."},"The chance of a miss and its distance have average values":{"ru":"Шанс промаха и его расстояние имеют средние значения"},"The chance of a miss and its distance is greater":{"ru":"Шанс промаха и его расстояние больше"},"The chance of a miss and its distance is less":{"ru":"Шанс промаха и его расстояние меньше"},"The chance of certain actions occurring and their settings depend on the accuracy and intensity you specify.":{"ru":"Шанс выпадения тех или иных действий и их настройки зависят от указанных вами точности и интенсивности."},"The chance of delay and its duration have average values":{"ru":"Шанс задержки и её продолжительность имеют средние значения"},"The chance of delay and its duration is greater":{"ru":"Шанс задержки и её продолжительность больше"},"The chance of delay and its duration is less":{"ru":"Шанс задержки и её продолжительность меньше"},"The chance of reverse scrolling 5 percent":{"ru":"Шанс прокрутки в обратном направлении 5 процентов"},"The chance of reverse scrolling have average values":{"ru":"Шанс прокрутки в обратном направлении имеет среднее значение"},"The chance of reverse scrolling is greater":{"ru":"Шанс прокрутки в обратном направлении больше"},"The chance of reverse scrolling is less":{"ru":"Шанс прокрутки в обратном направлении меньше"},"The character index after which the substring will be inserted.":{"ru":"Индекс символа, после которого будет вставлена подстрока."},"The character index at which to start modifying the string.":{"ru":"Индекс символа, с которого начинается изменение строки."},"The character index at which to start the search.":{"ru":"Индекс символа, с которого следует начать поиск."},"The characters that will be replaced by space are determined by the \"Replace multiple spaces with single ones\", \"Replace line breaks with space\" parameters, but you can also specify your own characters in the \"Replace characters with space\" parameter located in the additional settings.":{"ru":"Символы, которые будут заменены пробелом, определяются параметрами \"Заменять многочисленные пробелы на одиночные\", \"Заменить переносы строк пробелами\", но также можно указать свои символы в параметр \"Заменять символы на пробел\", находящийся в дополнительных настройках."},"The characters to be trimmed are determined by the \"Trim spaces\", \"Trim line breaks\", \"Trim tabs\" parameters, but you can also specify your own characters in the \"Trim characters\" parameter located in the additional settings.":{"ru":"Символы, которые будут обрезаны, определяются параметрами \"Обрезать пробелы\", \"Обрезать переносы строк\", \"Обрезать табуляцию\", но также можно указать свои символы в параметр \"Обрезать символы\", находящийся в дополнительных настройках."},"The code readiness check interval in seconds.":{"ru":"Интервал проверки готовности кода в секундах."},"The data is a string.":{"ru":"Данные являются строкой."},"The data is not a string.":{"ru":"Данные не являются строкой."},"The data that need to check out whether they is a string.":{"ru":"Данные, которые нужно проверить на то являются ли они строкой."},"The data that need to check out whether they is not empty string.":{"ru":"Данные, которые нужно проверить на то являются ли они не пустой строкой."},"The data to be converted to a string.":{"ru":"Данные, которые нужно преобразовать в строку."},"The element can be re-hovered after 3 iterations of move to element, from the search of which this element will be excluded":{"ru":"На элемент можно навестись повторно после 3 итераций движения к элементу, из поиска которых будет исключён этот элемент"},"The element can be re-hovered after one iteration of move to element, from the search of which this element will be excluded":{"ru":"На элемент можно навестись повторно после одной итерации движения к элементу, из поиска которой будет исключён этот элемент"},"The element can be re-hovered immediately":{"ru":"На элемент можно сразу же навестись повторно"},"The element can be re-hovered only after it goes out of visibility":{"ru":"На элемент можно навестись повторно только после его выхода из зоны видимости"},"The element will be considered accessible only if all 5 points are not overlapped":{"ru":"Элемент будет считается доступным, только если все 5 точек не будут перекрыты"},"The exact emulation time will be determined immediately before the action depending on the emulation state.":{"ru":"Точное время эмуляции будет определено непосредственно перед действием в зависимости от состояния эмуляции."},"The execution time of the idle emulation.":{"ru":"Время выполнения эмуляции бездействия."},"The file extension can be removed from the final result by specifying the removed extension in the corresponding parameter in the additional settings.":{"ru":"Расширение файла можно удалить из итогового результата, указав удаляемое раширение в сответствующий параметр находящийся в дополнительных настройках."},"The file extension to be removed from the final result. This parameter is case sensitive, if the path is <code style=\"font-size:85%\">\"C:\/foo.HTML\"<\/code> and the extension is <code style=\"font-size:85%\">\".html\"<\/code>, then the final result is <code style=\"font-size:85%\">\"foo.HTML\"<\/code>, not <code style=\"font-size:85%\">\"foo\"<\/code>.":{"ru":"Расширение файла, которое нужно удалять из итогового результата. Этот параметр чувствителен к регистру, если указан путь <code style=\"font-size:85%\">\"C:\/foo.HTML\"<\/code> и расширение <code style=\"font-size:85%\">\".html\"<\/code>, то итоговым результатом будет <code style=\"font-size:85%\">\"foo.HTML\"<\/code>, а не <code style=\"font-size:85%\">\"foo\"<\/code>."},"The file name mask by which attachments will be filtered. Only files whose names match the mask will be retrieved and saved. In the mask, the character <code>*<\/code> is perceived as a sequence of any characters, and the character <code>?<\/code> treated as one any character. If the mask begins with the character <code>!<\/code>, then all attachments whose names do not match this mask will be retrieved and saved.":{"ru":"Маска имен файлов по которой будет производиться фильтрация вложений. Только файлы, имена которых соответствуют маске, будут получены и сохранены. В маске символ <code>*<\/code> воспринимается как последовательность любых символов, а символ <code>?<\/code> воспринимается как один любой символ. Если маска начинается с символа <code>!<\/code>, то все вложения имена которых не соответствуют этой маске будут получены и сохранены."},"The final number can be rounded off by specifying the \"Number of decimal places\" parameter located in the additional settings.":{"ru":"Итоговое число можно округлить, указав параметр \"Количество знаков в дробной части\", находящийся в дополнительных настройках."},"The folder list format depends on the \"Data format\" setting.":{"ru":"Формат списка папок зависит от значения параметра \"Формат данных\"."},"The folder name to which the specified folder will be renamed.":{"ru":"Имя папки, в которое будет переименована указанная папка."},"The format in which the final checksum will be written to the specified variable.":{"ru":"Формат, в котором итоговая контрольная сумма будет записана в указанную переменную."},"The format in which the list of folders will be saved to a variable.":{"ru":"Формат, в котором список папок будет сохранен в переменную."},"The headers are stored as an object where the key is the header name and the value is the header value, the header value can be a string or a list of strings.":{"ru":"Заголовки сохраняются в виде объекта, в котором ключ - это имя заголовка, а значение - это значение заголовка, значением заголовка может быть строка или список строк."},"The id of the message for which need to set the flags. If a list is specified instead of one message id, then flags will be set for all messages from the specified list":{"ru":"id письма, для которого нужно установить флаги. Если вместо одного id письма будет указан список, то для всех писем из указанного списка будут установлены флаги"},"The id of the message from which need to remove the flags. If a list is specified instead of one message id, then flags will be removed from all messages from the specified list":{"ru":"id письма, с которого нужно удалить флаги. Если вместо одного id письма будет указан список, то со всех писем из указанного списка будут удалены флаги"},"The id of the message which content need to be retrieved.":{"ru":"id письма, содержимое которого нужно получить."},"The id of the message which flags needs to be retrieved.":{"ru":"id письма, флаги которого нужно получить."},"The id of the message which need to be copied from one mailbox folder to another. If a list is specified instead of one message id, then all messages from the specified list will be copied":{"ru":"id письма, которое нужно скопировать из одной папки почтового ящика в другую. Если вместо одного id письма будет указан список, то все письма из указанного списка будут скопированы"},"The id of the message which need to be deleted from the mailbox. If a list is specified instead of one message id, then all messages from the specified list will be deleted":{"ru":"id письма, которое нужно удалить из почтового ящика. Если вместо одного id письма будет указан список, то все письма из указанного списка будут удалены"},"The id of the message which need to be moved from one mailbox folder to another. If a list is specified instead of one message id, then all messages from the specified list will be moved":{"ru":"id письма, которое нужно переместить из одной папки почтового ящика в другую. Если вместо одного id письма будет указан список, то все письма из указанного списка будут перемещены"},"The index of the character at which the retrieval of the substring ends.":{"ru":"Индекс символа, которым заканчивается получение подстроки."},"The index of the character at which to start getting the substring.":{"ru":"Индекс символа, с которого начинается получение подстроки."},"The item to add to the CSV string.":{"ru":"Элемент, который нужно добавить в CSV строку."},"The last item in the cart.":{"ru":"Последний товар в корзине."},"The last two items in the cart.":{"ru":"Последние два товара в корзине."},"The length of the raw checksum, used only for <code style=\"font-size:85%\">shake<\/code> algorithms. The length can be any integer that is greater than zero.":{"ru":"Длина необработанной контрольной суммы, используется только для <code style=\"font-size:85%\">shake<\/code> алгоритмов. Длина может быть любым целым числом больше нуля."},"The length to which the string will be truncated when searching for a substring allows searching within the string.":{"ru":"Длина, до которой будет обрезана строка при поиске подстроки,  позволяет искать внутри строки."},"The list can be created using actions from the \"List\" module.":{"ru":"Список можно создать с помощью действий из модуля \"Список\"."},"The list of delimiters by which the string can be split.":{"ru":"Список разделителей, по которым можно разбить строку."},"The maximum price for which you are willing to buy a number.":{"ru":"Максимальная цена, за которую вы готовы купить номер."},"The message does not contain a body":{"ru":"Письмо не содержит тела"},"The message does not contain a body in html format":{"ru":"Письмо не содержит тела в html формате"},"The message does not contain a body in text format":{"ru":"Письмо не содержит тела в текстовом формате"},"The minimum number of characters in a number. If the number of characters is less than the specified number, then zeros will be added to the place of missing characters before the number.":{"ru":"Минимальное количество символов в числе. Если количество символов меньше указанного числа, то в место недостающих символов перед числом будут добавлены нули."},"The mode for selecting elements for hovering, by which elements will be filtered for long and short movements.":{"ru":"Режим выбора элементов для наведения, по которому будут фильтроваться элементы при длинных и коротких движениях."},"The mode of performing a delay before click. The chance of a delay and its duration depends on it.":{"ru":"Режим выполнения задержки перед кликом. От него зависит шанс выпадения задержки и её длительность."},"The mode of performing a delay before hover. The chance of a delay and its duration depends on it.":{"ru":"Режим выполнения задержки перед наведением. От него зависит шанс выпадения задержки и её длительность."},"The mode of performing a miss on an element. The chance of a miss and its distance depend on it.":{"ru":"Режим выполнения промаха по элементу. От него зависит шанс выпадения промаха и его расстояние."},"The mode of performing a scroll to target. The scrolling settings and whether it will be executed depend on it.":{"ru":"Режим выполнения прокрутки к цели. От него зависят настройки прокрутки и будет ли она выполнятся."},"The name of the folder from which the message will be copied, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.":{"ru":"Имя папки, из которой будет скопировано письмо, если не указано, то будет использоваться папка указанная в действии \"Настроить получение почты\"."},"The name of the folder from which the message will be moved, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.":{"ru":"Имя папки, из которой будет перемещено письмо, если не указано, то будет использоваться папка указанная в действии \"Настроить получение почты\"."},"The name of the folder in which all actions will be performed if no other folder is specified in their additional settings.":{"ru":"Имя папки, в которой будут выполняться все действия, если в их дополнительных настройках не указана другая папка."},"The name of the folder in which this action will be performed, if not specified, the folder specified in the \"Configure receiving mail\" action will be used.":{"ru":"Имя папки, в которой будет выполнятся это действие, если не указано, то будет использоваться папка указанная в действии \"Настроить получение почты\"."},"The name of the folder where the message or several messages will be copied.":{"ru":"Имя папки, в которую будет скопировано письмо или несколько писем."},"The name of the folder where the message or several messages will be moved.":{"ru":"Имя папки, в которую будет перемещено письмо или несколько писем."},"The name of the folder which need to be created.":{"ru":"Имя папки, которую нужно создать."},"The name of the folder which need to be deleted.":{"ru":"Имя папки, которую нужно удалить."},"The name of the folder which need to be renamed.":{"ru":"Имя папки, которую нужно переименовать."},"The name of the folder which need to get information about.":{"ru":"Имя папки, о которой нужно получить информацию."},"The name of the hashing algorithm. An algorithm is a set of rules used when hashing data.":{"ru":"Название алгоритма хеширования. Алгоритм - это набор правил, используемый при хешировании данных."},"The name of the path that you want to receive.":{"ru":"Имя пути, который вы хотите получить."},"The number by which the declension of the returned word will be determined.":{"ru":"Число, по которому будет определяется склонение возвращаемого слова."},"The number obtained from the \"Get phone number\" action, for which need to change the activation status.":{"ru":"Номер полученный из действия \"Получить номер телефона\", для которого нужно изменить статус активации."},"The number obtained from the \"Get phone number\" action, for which need to receive an SMS code.":{"ru":"Номер полученный из действия \"Получить номер телефона\", для которого нужно получить SMS код."},"The number of characters to be removed.":{"ru":"Количество символов, которые будут удалены."},"The number of decimal places to which the number will be rounded.":{"ru":"Количество знаков в дробной части, до которого будет округлено число."},"The number of iterations of move to element after which the element can be hovered again. Also, the element can be hovered again if it goes out of visibility while scrolling.":{"ru":"Количество итераций движения к элементу, через которое на элемент можно будет навестись повторно. Также на элемент можно будет навестить повторно если он выйдет из зоны видимости во время прокрутки."},"The number of milliseconds for this conversion is counted from January 1, 1970, 00:00:00 UTC.":{"ru":"Количество миллисекунд при таком преобразовании отсчитывается с 1 января 1970 года, 00:00:00 UTC."},"The number of points on the element by which it will be determined whether the found element is overlapped, a maximum of 5 points: top right, top left, center, bottom right, bottom left.":{"ru":"Количество точек на элементе, по которым будет определятся перекрыт ли найденный элемент, максимум 5 точек: верх справа, верх слева, центр, низ справа, низ слева."},"The number of seconds after which the connection to the mail server will be considered unsuccessful.":{"ru":"Количество секунд, по истечению которого подключение к почтовому серверу будет считается неудачным."},"The number to format and convert to a string.":{"ru":"Число, которое нужно форматировать и преобразовать в строку."},"The order of joining the fields is as follows \"Item 1\", \"Item 2\", \"Item 3\", \"List of items\".":{"ru":"Порядок объединения полей следующий: \"Элемент 1\", \"Элемент 2\", \"Элемент 3\", \"Список элементов\"."},"The order of joining the fields is as follows \"Path 1\", \"Path 2\", \"Path 3\", \"List of paths\".":{"ru":"Порядок объединения полей следующий: \"Путь 1\", \"Путь 2\", \"Путь 3\", \"Список путей\"."},"The order of joining the fields is as follows \"String 1\", \"String 2\", \"String 3\", \"List of strings\".":{"ru":"Порядок объединения полей следующий: \"Строка 1\", \"Строка 2\", \"Строка 3\", \"Список строк\"."},"The parameter \"":{"ru":"Параметр \""},"The parameters \"Item 1\", \"Item 2\", \"Item 3\" will be used":{"ru":"Будут использованы параметры \"Элемент 1\", \"Элемент 2\", \"Элемент 3\""},"The parameters \"Item 1\", \"Item 2\", \"List of items\" will be used":{"ru":"Будут использованы параметры \"Элемент 1\", \"Элемент 2\", \"Список элементов\""},"The parameters \"Item 1\", \"Item 3\", \"List of items\" will be used":{"ru":"Будут использованы параметры \"Элемент 1\", \"Элемент 3\", \"Список элементов\""},"The parameters \"Item 2\", \"Item 3\", \"List of items\" will be used":{"ru":"Будут использованы параметры \"Элемент 2\", \"Элемент 3\", \"Список элементов\""},"The parameters \"Path 1\", \"Path 2\", \"List of paths\" will be used":{"ru":"Будут использованы параметры \"Путь 1\", \"Путь 2\", \"Список путей\""},"The parameters \"Path 1\", \"Path 2\", \"Path 3\" will be used":{"ru":"Будут использованы параметры \"Путь 1\", \"Путь 2\", \"Путь 3\""},"The parameters \"Path 1\", \"Path 3\", \"List of paths\" will be used":{"ru":"Будут использованы параметры \"Путь 1\", \"Путь 3\", \"Список путей\""},"The parameters \"Path 2\", \"Path 3\", \"List of paths\" will be used":{"ru":"Будут использованы параметры \"Путь 2\", \"Путь 3\", \"Список путей\""},"The parameters \"String 1\", \"String 2\", \"List of strings\" will be used":{"ru":"Будут использованы параметры \"Строка 1\", \"Строка 2\", \"Список строк\""},"The parameters \"String 1\", \"String 2\", \"String 3\" will be used":{"ru":"Будут использованы параметры \"Строка 1\", \"Строка 2\", \"Строка 3\""},"The parameters \"String 1\", \"String 3\", \"List of strings\" will be used":{"ru":"Будут использованы параметры \"Строка 1\", \"Строка 3\", \"Список строк\""},"The parameters \"String 2\", \"String 3\", \"List of strings\" will be used":{"ru":"Будут использованы параметры \"Строка 2\", \"Строка 3\", \"Список строк\""},"The parameters responsible for the accuracy of actions have average values":{"ru":"Параметры, отвечающие за точность действий, имеют средние значения"},"The parameters responsible for the intensity of actions have average values":{"ru":"Параметры, отвечающие за интенсивность действий, имеют средние значения"},"The password for the specified user.":{"ru":"Пароль указанного пользователя."},"The password of the mail server, it is almost always the same as the email password, but the mail service may have a separate password for access via imap and pop3 protocols.":{"ru":"Пароль почтового сервера, он почти всегда совпадает с паролем электронной почты, но почтовый сервис может иметь отдельный пароль для доступа по imap и pop3 протоколам."},"The path from which to get the directory.":{"ru":"Путь, из которого нужно получить директорию."},"The path from which to get the extension.":{"ru":"Путь, из которого нужно получить расширение."},"The path from which to get the last part.":{"ru":"Путь, из которого нужно получить последнюю часть."},"The path is absolute.":{"ru":"Путь является абсолютным."},"The path is not absolute.":{"ru":"Путь не является абсолютным."},"The path specifies information about the location of the resource.":{"ru":"Путь уточняет информацию о месте нахождения ресурса."},"The path specifying information about the location of the resource.":{"ru":"Путь, уточняющий информацию о месте нахождения ресурса."},"The path that need to check out whether it is absolute.":{"ru":"Путь, который нужно проверить на то является ли он абсолютным."},"The path that need to normalize.":{"ru":"Путь, который нужно нормализовать."},"The path that need to parse.":{"ru":"Путь, который нужно распарсить."},"The path to be joined with other paths.":{"ru":"Путь, которую нужно объединить с другими путями."},"The path to the file for which needs to calculate the checksum.":{"ru":"Путь к файлу, для которого нужно рассчитать контрольную сумму."},"The position on the element to which hovering will be performed.":{"ru":"Позиция на элементе, на которую будет производится наведение."},"The possible flags may differ depending on the server implementation.":{"ru":"Возможные флаги могут отличаться в зависимости от реализации на сервере."},"The probability of long cursor movements and page scrolling is increased, while the probability of sleeping is reduced":{"ru":"Увеличена вероятность длинных движений курсора и прокрутки страницы, вероятность сна уменьшена"},"The probability of misses, delays and pointing to random coordinates is increased":{"ru":"Вероятность промахов, задержек и наведения на случайные координаты увеличена"},"The probability of misses, delays and pointing to random coordinates is reduced":{"ru":"Вероятность промахов, задержек и наведения на случайные координаты снижена"},"The probability of sleeping and the probability of short cursor movements is increased, the cursor speed is reduced":{"ru":"Увеличена вероятность сна и вероятность коротких движений курсора, скорость курсора уменьшена"},"The property key of the created object. You can also use variables or leave the field empty.":{"ru":"Ключ свойства создаваемого объекта. Вы также можете использовать переменные или оставить поле пустым."},"The property value of the created object. You can also use variables or leave the field empty.":{"ru":"Значение свойства создаваемого объекта. Вы также можете использовать переменные или оставить поле пустым."},"The protocol by which the connection to the mail server will be made.":{"ru":"Протокол по которому будет производиться подключение к почтовому серверу."},"The protocol to be added if the URL does not contain one.":{"ru":"Протокол, который будет добавлен, если URL его не содержит."},"The query is saved as an object, where the key is the parameter name and the value is the parameter value.":{"ru":"Запрос сохраняется в виде объекта, в котором ключ - это имя параметра, а значение - это значение параметра."},"The query is the part of the URL that starts with the \"?\" character, parameters are separated by \"&\", and parameter name and value are separated by \"=\".":{"ru":"Запрос - это часть URL-адреса, начинающаяся с символа \"?\", параметры разделяются знаком \"&\", а имя параметра и его значение разделяются знаком \"=\"."},"The query must be specified as an object, where the key is the name of the parameter and the value is the value of the parameter, example: <code>{\"foo\":\"bar\"}<\/code>. Or as a string, in which parameters are separated by \"&amp;\", and the parameter name and its value are separated by \"=\", example: <code>\"foo=bar\"<\/code>.":{"ru":"Запрос нужно указывать в виде объекта, в котором ключ - это имя параметра, а значение - это значение параметра, пример: <code>{\"foo\":\"bar\"}<\/code>. Или в виде строки, в которой параметры разделяются знаком \"&\", а имя параметра и его значение разделяются знаком \"=\", пример: <code>\"foo=bar\"<\/code>."},"The radius of searching for elements during a long movement, measured as a percentage of the screen diagonal.":{"ru":"Радиус поиска элементов при длинном движении, измеряется в процентах от диагонали экрана."},"The radius of searching for elements during a short movement, measured as a percentage of the screen diagonal.":{"ru":"Радиус поиска элементов при коротком движении, измеряется в процентах от диагонали экрана."},"The received id can be used in other module actions, for example, to receive a message, set flags and delete.":{"ru":"Полученный id можно использовать в других действия модуля, например для получения письма, установки флагов и удаления."},"The received number must be used in the \"Get activation code\" action to get the code from SMS, or in the \"Change activation status\" action to change the number status.":{"ru":"Полученный номер нужно использовать в действии \"Получить код активации\" чтобы получить код из SMS, или в действии \"Изменение статуса активации\" чтобы изменить статус номера."},"The resource value as a key.":{"ru":"Значение ресурса в качестве ключа."},"The result of this action can be used to split the text into multiple lines.":{"ru":"Результат этого действия можно использовать для разделения текста на несколько строк."},"The resulting country id can be used in the \"Custom country\" parameter of the \"Get the count of available numbers\" and \"Get phone number\" actions.":{"ru":"Полученный идентификатор страны можно использовать в параметре \"Пользовательская страна\" действия \"Получить количество доступных номеров\" и \"Получить номер телефона\"."},"The resulting date can be processed using actions from the \"Date and time\" module.":{"ru":"Полученную дату можно обработать с помощью действий из модуля \"Дата и время\"."},"The resulting list can be processed using actions from the \"JSON\" module.":{"ru":"Полученный список можно обработать с помощью действий из модуля \"JSON\"."},"The resulting list can be processed using actions from the \"List\" module.":{"ru":"Полученный список можно обработать с помощью действий из модуля \"Список\"."},"The resulting list can contain a maximum of 10 items.":{"ru":"Итоговый список может содержать максимум 10 элементов."},"The resulting names of the algorithms can be used in the \"String checksum\" and \"File checksum\" actions.":{"ru":"Полученные названия алгоритмов можно использовать в действиях \"Контрольная сумма строки\" и \"Контрольная сумма файла\"."},"The resulting object can be processed using actions from the \"JSON\" module.":{"ru":"Полученный объект можно обработать с помощью действий из модуля \"JSON\"."},"The resulting site id can be used in the \"Custom site\" parameter of the \"Get the count of available numbers\" and \"Get phone number\" actions.":{"ru":"Полученный идентификатор сайта можно использовать в параметре \"Пользовательский сайт\" действия \"Получить количество доступных номеров\" и \"Получить номер телефона\"."},"The scheme of accessing a resource, in most cases, means a network protocol.":{"ru":"Схема обращения к ресурсу, в большинстве случаев, имеется в виду сетевой протокол."},"The script is executed in record mode.":{"ru":"Скрипт выполняется в режиме записи."},"The script is executed in run mode.":{"ru":"Скрипт выполняется в режиме запуска."},"The scrolling speed and the duration of pauses between several spins of the wheel have average values":{"ru":"Скорость прокрутки и длительность пауз между несколькими прокрутками колеса имеют средние значения"},"The service failed to get the code from the SMS, a full message was returned":{"ru":"Сервису не удалось получить код из SMS, возвращено полное сообщение"},"The size of the message will be retrieved in octets, one octet is equal to 8 bits.":{"ru":"Размер письма будет получен в октетах, один октет равен 8 битам."},"The specified URL does not contain a password":{"ru":"Указанный URL не содержит пароля"},"The specified URL does not contain a port":{"ru":"Указанный URL не содержит порт"},"The specified URL does not contain a username":{"ru":"Указанный URL не содержит логина"},"The specified URL does not contain query parameters":{"ru":"Указанный URL не содержит параметров запроса"},"The specified URL does not contain the fragment":{"ru":"Указанный URL не содержит фрагмент\/якорь"},"The specified URL does not contain the protocol\/scheme":{"ru":"Указанный URL не содержит протокола\/схемы"},"The specified folder is empty":{"ru":"Указанная папка пуста"},"The specified service currently does not have numbers with the specified parameters":{"ru":"Указанный сервисе на данный момент не имеет номеров с указанными параметрами"},"The status to be set for the specified number.":{"ru":"Статус который нужно установить для указанного номера."},"The string containing a sentence to be split into words.":{"ru":"Строка, содержащая предложение, которое нужно разделить на слова."},"The string containing text to be split into lines.":{"ru":"Строка, содержащая текст, который нужно разделить на строки."},"The string containing text to be split into sentences.":{"ru":"Строка, содержащая текст, который нужно разделить на предложения."},"The string contains a substring.":{"ru":"Строка содержит подстроку."},"The string does not contain a substring.":{"ru":"Строка не содержит подстроку."},"The string does not contain the words":{"ru":"Строка не содержит слов"},"The string does not end with a substring.":{"ru":"Строка не заканчивается подстрокой."},"The string does not start with a substring.":{"ru":"Строка не начинается с подстроки."},"The string ends with a substring.":{"ru":"Строка заканчивается подстрокой."},"The string for which needs to calculate the checksum.":{"ru":"Строка, для которой нужно рассчитать контрольную сумму."},"The string from which to extract email addresses.":{"ru":"Строка, из которой нужно извлечь адреса электронной почты."},"The string from which to extract links.":{"ru":"Строка, из которой нужно извлечь ссылки."},"The string from which to extract phone numbers.":{"ru":"Строка, из которой нужно извлечь телефонные номера."},"The string from which to get the number of characters.":{"ru":"Строка, из которой нужно получить количество символов."},"The string from which to get the number of substrings.":{"ru":"Строка, из которой нужно получить количество подстрок."},"The string from which to get the substring.":{"ru":"Строка, из которой нужно получить подстроку."},"The string from which to get the word count.":{"ru":"Строка, из которой нужно получить количество слов."},"The string from which want to remove a part and\/or add a new one.":{"ru":"Строка, из которой нужно удалить часть и\/или добавить новую."},"The string in which the replacement will be made":{"ru":"Строка, в которой будет выполнена замена"},"The string in which to check the contains of the substring.":{"ru":"Строка, в которой нужно проверить содержание подстроки."},"The string in which to convert words.":{"ru":"Строка, в которой нужно преобразовать слова."},"The string in which to find the substring.":{"ru":"Строка, в которой нужно найти подстроку."},"The string starts with a substring.":{"ru":"Строка начинается с подстроки."},"The string to be converted to lowercase.":{"ru":"Строка, которую нужно преобразовать в нижний регистр."},"The string to be converted to uppercase.":{"ru":"Строка, которую нужно преобразовать в верхний регистр."},"The string to be joined with other strings.":{"ru":"Строка, которую нужно объединить с другими строками."},"The string to be latinized.":{"ru":"Строка, которую нужно латинизировать."},"The string to be searched for":{"ru":"Строка для поиска"},"The string to check.":{"ru":"Строка, которую нужно проверить."},"The string to convert to a number.":{"ru":"Строка, которую нужно преобразовать в число."},"The string to insert the substring into.":{"ru":"Строка, в которую нужно вставить подстроку."},"The string which needs to be cleaned.":{"ru":"Строка, которую нужно очистить."},"The string which needs to be trimmed.":{"ru":"Строка, которую нужно подровнять."},"The substring is missing from the string.":{"ru":"Подстрока отсутствует в строке."},"The substring that the string must end with.":{"ru":"Подстрока, которой должна заканчиваться строка."},"The substring that the string should start with.":{"ru":"Подстрока, с которой должна начинатся строка."},"The substring to be inserted instead of the removed part.":{"ru":"Подстрока, которая будет вставлена вместо удаленной части."},"The substring to find in the string.":{"ru":"Подстрока, которую нужно найти в строке."},"The substring to insert.":{"ru":"Подстрока, которую нужно вставить."},"The substring to the left of the substring to get.":{"ru":"Подстрока находящаяся слева от подстроки которую нужно получить."},"The substring to the right of the substring to get.":{"ru":"Подстрока находящаяся справа от подстроки которую нужно получить."},"The third item in cart.":{"ru":"Третий товар в корзине."},"The titles of all dialogs.":{"ru":"Заголовки всех диалогов."},"The type of the returned object will be the same as the original variable. This means that if you specify a string, the string will be returned; if you specify an object, the object will be returned.":{"ru":"Тип возвращаемого объекта будет таким же, как и у оригинальной переменной. Это означает, что если вы укажете строку, будет возвращена строка; если вы вы укажете объект, будет возвращён объект."},"The username may also not include the mail domain.":{"ru":"Логин может также не включать почтовый домен."},"The username of the mail server, this is almost always the same as the email address, but may not include the mail domain.":{"ru":"Имя пользователя почтового сервера, оно почти всегда совпадает с адресом электронной почты, но может не включать почтовый домен."},"The username used to access the resource.":{"ru":"Имя пользователя, используемое для доступа к ресурсу."},"The value of this parameter is ignored if auto configuration is enabled.":{"ru":"Значение этого параметра игнорируется, если активирована автоматическая настройка."},"The values of all elements are converted to a string before joining.":{"ru":"Значения всех элементов перед объединением преобразуются в строку."},"The variable value as a key.":{"ru":"Значение переменной в качестве ключа."},"There are no items for the given query.":{"ru":"Нет элементов, удовлетворяющих запросу."},"There are no recent messages in the specified folder":{"ru":"В указанной папке нет недавних писем"},"There are no unseen messages in the specified folder":{"ru":"В указанной папке нет непрочитанных писем"},"There are six items for the given query.":{"ru":"Есть шесть элементов, удовлетворяющих запросу."},"There are three points to click on the coordinates - X1 = 120, Y1 = 59. X2 = 91, Y2 = 5. X3 = 59, Y3 = 12.":{"ru":"Есть три точки для клика по координатам - X1 = 120, Y1 = 59. X2 = 91, Y2 = 5. X3 = 59, Y3 = 12."},"There are two points to click on the coordinates - X1 = 15, Y1 = 380. X2 = 1, Y2 = 1.":{"ru":"Есть две точки для клика по координатам - X1 = 15, Y1 = 380. X2 = 1, Y2 = 1"},"There is one point to click on the coordinates - X1 = 12, Y1 = 24.":{"ru":"Есть одна точка для клика по координатам - X1 = 12, Y1 = 24."},"There should be at least 5 seconds gap between usages of every resource item.":{"ru":"Интервал между каждым использованием ресурса должен быть не менее 5 секунд. Интервал применяется не ко всему списку данных, а к каждому его элементу. Например, если ресурс содержит прокси, то эта настройка задает интервал между использованиями каждого прокси в 5 секунд."},"This action affects all records matching criteria, be carefull, if you forget to set criteria, all records in database will be changed. If you want to update single record, use \"Update One Record\" action.":{"ru":"Это действие изменяет все записии подходящие под фильтры, будьте осторожны, если вы не зададите никакие фильтры, то абсолютно все записи в базе данных будут изменены. Если вы хотите изменить только одну запись, используйте действие \"Изменить одну запись\"."},"This action affects all records matching criteria, be carefull, if you forget to set criteria, all records in database will be deleted.":{"ru":"Это действие удаляет все записии подходящие под фильтры, будьте осторожны, если вы не зададите никаких фильтров, то абсолютно все записи в базе данных будут удалены."},"This action allows to bypass device fingerprinting techniques based on measuring the execution time of a certain javascript functionality. For example, site can measure execution time of some cryptographic methods which depends on installed hardware. Results will be the same across different runs and therefore may be used for fingerprinting.":{"ru":"Это действие позволяет снизить эффективность методики получения отпечатка, основанной на измерении времени выполнения определенного javascript функционала. Например, сайт может измерять время выполнения некоторых криптографических функций, которые зависят от используемого оборудования. Результаты будут одинаковыми при разных запусках тестов и, следовательно, могут быть использованы для получения отпечатков."},"This action allows you to solve any captcha that requires you to click on images according to specific instructions. These can be <code>ReCaptcha<\/code>, <code>HCaptcha<\/code> and other types. To solve such captchas, you need to send an image to the service containing elements to be clicked. If there is a description on the captcha or next to it, it is recommended to send it along with the image to avoid incorrect solutions.":{"ru":"Это действие позволяет вам решить любую капчу, которая требует, чтобы вы нажимали на изображения в соответствии с определенными инструкциями. Это может быть <code>ReCaptcha<\/code>, <code>HCaptcha<\/code> и другие типы. Для решения таких капч необходимо отправить на сервис изображение, содержащее элементы, по которым нужно выполнить клики. Если на капче или рядом с ней присутствует описание, рекомендуется отправлять его вместе с изображением, чтобы избежать неверных решений."},"This action also supports complex queries - for example, using filters - <span style=\"color:black\">$.data[?(@.price &lt;= 100)]<\/span>. In addition, you can access properties that contain special characters, such as the period character - <span style=\"color:black\">$.data[(\"secret.token\")]<\/span> or <span style=\"color:black\">$.data['secret.token']<\/span>. When using double quotes, always enclose the property name in parentheses.":{"ru":"Данное действие поддерживает комплексные запросы - например, с использованием фильтров - <span style=\"color:black\">$.data[?(@.price &lt;= 100)]<\/span>. Кроме того, вы можете обращаться к свойствам, содержащим специальные символы, вроде символа точки - <span style=\"color:black\">$.data[(\"secret.token\")]<\/span> или <span style=\"color:black\">$.data['secret.token']<\/span>. При использовании двойных кавычек всегда обрамляйте название свойства в круглые скобки."},"This action behaves differently in record and run mode. In run mode it creates a new thread and parallelizes workflow. In record mode it works almost the same as regular function call, because record mode only works with single thread.":{"ru":"Это действие ведет себя по-разному в режиме записи и запуска. В режиме запуска оно создает новый поток и распараллеливает процесс выполнения приложения. В режиме записи оно работает так же, как обычный вызов функции, потому что режим записи всегда однопоточный."},"This action can attract user attention about important events during script execution.":{"ru":"Это действие может привлечь внимание пользователя к важным событиям во время выполнения скрипта."},"This action can automatically determine the server address, port and encryption type, for this you need to specify <code>true<\/code> in the \"Auto configuration\" parameter, and specify the email address along with the domain as the username.":{"ru":"Это действие может автоматически определять адрес сервера, порт и тип шифрования, для этого нужно указать <code>true<\/code> в параметр \"Автоматическая настройка\", а в качестве логина указать адрес электронной почты вместе с доменом."},"This action can be used to find group id and put records inside that group.":{"ru":"Это действие можно использовать для поиска идентификатора группы и добавление в эту группу новых записей."},"This action can be used with Multilogin and BAS browsers.":{"ru":"Это действие может быть использовано как с браузером Multilogin, так и с браузером БАС."},"This action can bring the number into a more readable form, for example, for further output to the log.":{"ru":"Данным действием можно привести число в более читабельный вид, например, для дальнейшего вывода в лог."},"This action can change year or month or other properties of date. Leave parameter to -1 if you dont want to change it.":{"ru":"Это действие может изменять год, месяц или другие части даты. Оставьте параметры равными -1 если вы не хотите их менять."},"This action can convert numbers in a non-standard format for this, you need to specify the \"Decimal separator\" and \"Thousandth separator\" parameters located in the additional settings.":{"ru":"Это действие может преобразовывать числа в нестандартном формате для этого нужно указать параметры \"Разделитель целой и дробной части\" и \"Разделитель тысячных\" находящиеся в дополнительных настройках."},"This action can copy several messages at once":{"ru":"Это действие может копировать несколько писем сразу"},"This action can delete several messages at once":{"ru":"Это действие может удалять несколько писем сразу"},"This action can delete the message or set flags for it, after successful receipt, for this you need to use the corresponding parameters in the additional settings.":{"ru":"Это действие может удалить письмо или установить для него флаги, после удачного получения, для этого нужно использовать соответствующие параметры в дополнительных настройках."},"This action can either delete part of the string, or insert a new part, or all at the same time.":{"ru":"Это действие может либо удалить часть строки, либо вставить новую часть, либо все одновременно."},"This action can move several messages at once":{"ru":"Это действие может перемещать несколько писем сразу"},"This action can remove flags for several messages at once":{"ru":"Это действие может удалять флаги с нескольких писем сразу"},"This action can set flags for several messages at once":{"ru":"Это действие может устанавливать флаги для несколько писем сразу"},"This action can wait for an message for the specified time if you activate the corresponding parameter in the additional settings.":{"ru":"Это действие может ждать письмо указанное время, если активировать соответствующий параметр в дополнительных настройках."},"This action can wait for an messages for the specified time if you activate the corresponding parameter in the additional settings.":{"ru":"Это действие может ждать письма указанное время, если активировать соответствующий параметр в дополнительных настройках."},"This action can work with in two modes: encode and decode. Modes can be switched with \"Encode or decode\" parameter. Depending on mode data parameter is base64 encoded string which needs to be decoded, or ordinary string which needs to be encoded.":{"ru":"Это действие может работать в двух режимах: кодирование и декодирование. Режимы могут переключаться параметром \"Шифровать или расшифровывать\". В зависимости от режима, входным параметром будет либо строка с кодировкой base64, которая должна быть декодирована, либо обычная строка, которая должна быть закодирована."},"This action can work with in two modes: encode and decode. Modes can be switched with \"Encode or decode\" parameter. Depending on mode data parameter is encoded punycode string which needs to be decoded, or ordinary string which needs to be encoded.":{"ru":"Это действие может работать в двух режимах: кодирование и декодирование. Режимы могут переключаться параметром \"Шифровать или расшифровывать\". В зависимости от режима, входным параметром будет либо закодированая punycode строка, которая должна быть декодирована, либо обычная строка, которая должна быть закодирована."},"This action can work with in two modes: encode and decode. Modes can be switched with \"Encode or decode\" parameter. Depending on mode data parameter is encoded string which needs to be decoded, or ordinary string containing special HTML characters which needs to be encoded.":{"ru":"Это действие может работать в двух режимах: кодирование и декодирование. Режимы могут переключаться параметром \"Шифровать или расшифровывать\". В зависимости от режима, входным параметром будет либо закодированая строка, которая должна быть декодирована, либо обычная строка содержащая специальные HTML символы, которая должна быть закодирована."},"This action can work with in two modes: encode and decode. Modes can be switched with \"Encode or decode\" parameter. Depending on mode data parameter is encoded string which needs to be decoded, or ordinary string containing the Url component which needs to be encoded.":{"ru":"Это действие может работать в двух режимах: кодирование и декодирование. Режимы могут переключаться параметром \"Шифровать или расшифровывать\". В зависимости от режима, входным параметром будет либо закодированая строка, которая должна быть декодирована, либо обычная строка содержащая Url компонент, которая должна быть закодирована."},"This action changes the activation status for the specified number on the SMS receiving service.":{"ru":"Это действие изменяет статус активации для указанного номера на сервисе приема SMS."},"This action completely and permanently removes the specified message from the mailbox.":{"ru":"Это действие полностью и безвозвратно удалит указанное письмо с почтового ящика."},"This action deletes records by criteria, if you want to delete single record, use \"Delete One Record\" action.":{"ru":"Это действие удаляет записи по критерию, если вы хотите удалить только одну запись, используйте действие \"Удалить Одну Запись\"."},"This action doesn't actually checks if key is valid or not. So even if you input incorrect key here, you won't get any error. Key will be checked only after getting or applying fingerprint for the first time.":{"ru":"Это действие не будет проверять, является ли ключ действительным или нет. Поэтому, даже если вы введете здесь неверный ключ, ошибки не будет. Ключ будет проверен только после первого получения или применения отпечатка."},"This action doesn't change id of updated record.":{"ru":"Это действие не меняет ид обновляемой записи."},"This action doesn't change id of updated records.":{"ru":"Это действие не изменяет ид действий."},"This action doesn't close browser and doesn't switch profile path to new location.":{"ru":"Это действие не закрывает браузер и не изменять путь к текущему профилю."},"This action doesn't create browser, returns immediately and can be used from any place of script.":{"ru":"Это действие не создает браузер, завершается мгновенно и может быть использовано из любого места скрипта."},"This action doesn't have affect on some resource types, like 'FixedString' or 'FixedInteger'.":{"ru":"Это действие никак не влияет на некоторые типы ресурсов, такие как 'Строка' или 'Число'."},"This action doesn't perform automatic coordinate clicks, unlike the <code>Solve captcha with clicks<\/code> action from the browser context menu, which does everything without your interaction. It's much easier to use.":{"ru":"Данное действие не выполняет автоматических кликов по координатам, в отличие от действия <code>Решить капчу кликами<\/code> из контекстного меню браузера, которое делает всё без вашего участия. Использовать его будет намного проще."},"This action gets text from \"Template\" multiline textbox and saves it to variable defined in \"Variable To Save Result\". Thats it, unless text doesn't contain special values. Here are list of them:":{"ru":"Это действие получает текст из многострочного текстового поля \"Шаблон\" и сохраняет его в переменную, определенной в параметре \"Переменная, в которую сохранять результат\". И это все, что делает это действие, если только текст не содержит специальных значений. Вот их список:"},"This action has no timeout and will last until user won't enter something.":{"ru":"Это действие не имеет ограничений по времени и продлится до тех пор, пока пользователь ничего не введет."},"This action ignores any characters other than letters and numbers.":{"ru":"Это действие игнорирует любые символы, кроме букв и цифр."},"This action is a more plausible replacement for the \"<a href=\"#!\/sleep\">Sleep<\/a>\" action. It emulates viewing the current page as if the user is exploring it or searching for something on it.":{"ru":"Это действие - более правдоподобная замена действия \"<a href=\"#!\/sleep\">Спать<\/a>\". Оно эмулирует просмотр текущей страницы, как будто пользователь изучает её или что то ищет на ней."},"This action is deprecated. It is recommended to use the new <a href=\"#!\/IdleEmulationNew\">Start idle emulation<\/a> action.":{"ru":"Это действие устарело. Рекомендуется использовать новое действие <a href=\"#!\/IdleEmulationNew\">Начать эмуляцию бездействия<\/a>."},"This action is deprecated. It's recommended to use the <a href=\"#!\/JsonToString\">JSON to string<\/a> or <a href=\"#!\/JsonFromString\">String to JSON<\/a> action.":{"ru":"Это действие устарело. Рекомендуется использовать действие <a href=\"#!\/JsonToString\">JSON в строку<\/a> или <a href=\"#!\/JsonFromString\">Строку в JSON<\/a>."},"This action is meant to be used in run mode, if you want to control browser in record mode, hit following button":{"ru":"Это действие предназначено для использования в режиме запуска, если вы хотите управлять браузером в режиме записи, нажмите следующую кнопку"},"This action is only available when connecting via imap, if the action is called when connecting via pop3, it will immediately fail.":{"ru":"Это действие доступно только при подключении по imap, если действие будет вызвано при подключении по pop3, то будет немедленно завершено ошибкой."},"This action is optional because connection is closed automatically if it is not used for a long time.":{"ru":"Это действие не является обязательным, так как соединение закрывается автоматически если оно не использовалось длительное время."},"This action loads heavily cpu and hard drive, so it is not recomended to use it multithreaded mode.":{"ru":"Это действие сильно нагружает  процессор и жесткий диск, поэтому не рекомендуется использовать его в многопоточном режиме."},"This action may wait for single function or for list of functions. In order to wait for list, place variable with list type into 'Thread id' parameter, usually its name is THREAD_LIST and it is obtained as a result of 'Call function asynchronously' action.":{"ru":"Это действие может ожидать как отдельную функцию, так и список функций. Чтобы дождаться окончания работы списка функций, установите переменную с типом список в параметр \"ID потока\", обычно ее имя - THREAD_LIST, в нем накапливаются ID потоков в результате работы действия \"Вызов функции асинхронно\"."},"This action must be called once before performing other actions that work with the mail server.":{"ru":"Это действие нужно вызвать один раз до выполнения других действий, работающих с почтовым сервером."},"This action not only creates profile, but also starts using it by current thread immediately after creation.":{"ru":"Это действие не только создает профиль, но также начинает его использовать текущим потоком сразу после создания."},"This action obtains result of function execution, it also helps to obtain function state, if it is still running and if there was error during execution.":{"ru":"Это действие получает результат выполнения функции, оно также помогает узнать состояние функции, то есть выполняется ли она в данный момент и являлось ли последнее выполнение успешным."},"This action only deletes single record, if you wan't to delete more than one, use \"Delete Records By Criteria\" action.":{"ru":"Это действие удаляет только одну запись, если вы хотите удалить несколько, то нужно использовать действие \"Удалить Записи По Критерию\"."},"This action only selects single record, if you wan't to select more than one or use filters, use \"Select Records By Criteria\" action.":{"ru":"Это действие получает только одну запись, если вы хотите получить несколько или использовать фильтры, то нужно использовать действие \"Получить Записи По Критерию\"."},"This action only updates single record, if you wan't to update several fields, use \"Update Records By Criteria\" action.":{"ru":"Это действие меняет только одну запись. Если вы хотите поменять несколько записей, используйте действие \"Изменить Записи По Критерию\""},"This action only works with async functions created with \"Call function asynchronously\" action.":{"ru":"Это действие работает только с асинхронными функциями, созданными с помощью действия \"Вызов функции асинхронно\"."},"This action reloads lines from file or rows from database.":{"ru":"Это действие перезагружает строки из файла или данные из базы."},"This action replaces all occurrences.":{"ru":"Это действие заменяет все вхождения, а не только самое первое."},"This action returns id of inserted record, you can use it to manipulate record later.":{"ru":"Это действие возвращает идентификатор добавленной записи, вы можете использовать его в будущем для манипуляциями с записью."},"This action returns list of strings, each string contains profile id and profile name separated with colon.":{"ru":"Это действие возвращает список строк, каждая из которых содержит идентификатор профиля и имя профиля, разделенных двоеточием."},"This action returns profile id, it can be used to switch to found profile or delete it.":{"ru":"Это действие возвращает id профиля, его можно использовать для переключения на найденный профиль или его удаления."},"This action returns thread id inside THREAD_ID variable. This identifier allows communicating with function, with help of it you can: obtain function result, wait for function completion or stop function.":{"ru":"Это действие сохраняет ID потока в переменную THREAD_ID. Этот идентификатор позволяет взаимодействовать с функцией, с помощью него вы можете: получить результат функции, дождаться завершения ее выполнения или остановить функцию."},"This action searches for all results, that matches regexp, for example it could search for all numbers in text. If you want to find only first string that matches regexp, i.e. first number, you should use 'First match' action.":{"ru":"Это действие выполняет поиск всех результатов, соответствующих регулярному выражению, например, поиск всех чисел в тексте. Если вы хотите найти только первое совпадение, которое соответствует регулярному выражению, например, найти первое число, вы должны использовать действие 'Первое вхождение'."},"This action searches only for the first string, that matches regexp, for example it could search for first number in text. If you want to find several strings that matches regexp, i.e. all numbers, you should use 'Exctract all data' action.":{"ru":"Это действие ищет только первую строку, которая соответствует регулярному выражению, например, оно может искать первое число в тексте. Если вы хотите найти несколько строк, которые соответствуют регулярному выражению, то есть всем числа в тексте, вам лучше использовать действие 'Извлечь все данные'."},"This action supports filtering, sorting and paging, if you want to use this features, plaese study corresponding fields. If you don't want to use them, just leave default values, it will just select records from database.":{"ru":"Это действие поддерживает фильтрацию, сортировку и разбиение результатов на страницы, если вы хотите использовать эти функции, изучите описание соответствующих полей. Если вы не хотите их использовать, то оставьте значения по умолчанию, и действие просто выберет записи из базы данных."},"This action uses regexp to split string. For example, if string is":{"ru":"Это действие использует регулярное выражение чтобы разделить строку. Например, если строка"},"This action will also reset all other emulation settings previously set using the \"<a href=\"#!\/IdleEmulationSetGeneralSettings\">Enable automatic idle emulation<\/a>\" action.":{"ru":"Это действие также сбросит любые другие настройки эмуляции, ранее установленные с помощью действия \"<a href=\"#!\/IdleEmulationSetGeneralSettings\">Включить автоматическую эмуляцию бездействия<\/a>\"."},"This action will completely and permanently delete the folder with the specified name and all messages it contains from the mailbox.":{"ru":"Это действие полностью и безвозвратно удалит папку с указанным именем и все содержащиеся в ней письма из почтового ящика."},"This action will copy the message from one mailbox folder to another. The copy of the message will have a different id.":{"ru":"Это действие скопирует письмо из одной папки почтового ящика в другую. Копия письма будет иметь другой id."},"This action will create a new folder with the specified name in the mailbox.":{"ru":"Это действие создаст новую папку с указанным именем в почтовом ящике."},"This action will disable override of FingerprintSwitcher key previously set with 'Override key' action.":{"ru":"Это действие отключит переопределение ключа FingerprintSwitcher, ранее установленное с помощью действия 'Переопределить ключ'."},"This action will get information about the specified folder, namely the number of all, recent and unseen messages.":{"ru":"Это действие получит информацию о указанной папке, а именно количество всех, недавних и непрочитанных писем."},"This action will get the last message that matches the specified criteria and store parts of it in the specified variables.":{"ru":"Это действие получит последнее письмо, соответствующее указанным критериям, и сохранит его части в указанные переменные."},"This action will get the latest message and save parts of it into the specified variables.":{"ru":"Это действие получит последнее письмо и сохранит его части в указанные переменные."},"This action will get the message by id and save its parts to the specified variables.":{"ru":"Это действие получит письмо по id и сохранит его части в указанные переменные."},"This action will immediately stop asynchronous function execution.":{"ru":"Это действие немедленно остановит выполнение асинхронной функции."},"This action will instantly execute idle emulation, but there is also a possibility to perform emulation before each action. Emulation before each action will be started before every browser action which has a target, such as \"<b>Click On Element<\/b>\", \"<b>Type Text<\/b>\" and others. It is disabled by default. You can enable and configure it directly in the actions themselves or globally for all actions using the \"<a href=\"#!\/IdleEmulationSetGeneralSettings\">Enable automatic idle emulation<\/a>\" action.":{"ru":"Запуск этого действия повлечет за собой мгновенное выполнение эмуляции бездействия, также есть возможность выполнять эмуляцию перед каждым действием. Эмуляция перед каждым действием будет запускаться перед каждым действием браузера, которое работает с элементами на странице, например, \"<b>Кликнуть На Элемент<\/b>\", \"<b>Ввод текста<\/b>\" и другими. По умолчанию эмуляция перед действиями отключена. Вы можете включить и настроить ее непосредственно в самих действиях или глобально с помощью \"<a href=\"#!\/IdleEmulationSetGeneralSettings\">Включить автоматическую эмуляцию бездействия<\/a>\"."},"This action will move the message from one mailbox folder to another. After the move, the message will have a new id, and you will not be able to work with it using the same id.":{"ru":"Это действие переместит письмо из одной папки почтового ящика в другую. После перемещения письмо будет иметь новый id, и вы не сможете работать с ним по тому же id."},"This action will not execute idle emulation instantly, instead it will enable emulation before each browser action which has a target, such as \"<b>Click On Element<\/b>\", \"<b>Type Text<\/b>\" and others. By default it is disabled.":{"ru":"Это действие не запускает эмуляцию бездействия немедленно, вместо этого оно включает эмуляцию перед каждым действием браузера, которое работает с элементами на странице, например \"<b>Кликнуть На Элемент<\/b>\", \"<b>Ввод текста<\/b>\" и другими. По умолчанию оно отключено."},"This action will override any FingerprintSwitcher key for actions such as 'Get fingerprint' or 'Apply fingerprint'.":{"ru":"Это действие переопределит любой ключ FingerprintSwitcher для действий, таких как 'Получить отпечаток' или 'Применить отпечаток'."},"This action will parse the string by the specified separators and save the parsed data by the specified variables.":{"ru":"Это действие распарсит строку по указанным разделителям и сохранит распарсенные данные по указанным переменным."},"This action will remove the flags from the specified message.":{"ru":"Это действие удалит флаги с указанного письма."},"This action will rename the specified folder in the mailbox.":{"ru":"Это действие переименует указанную папку в почтовом ящике."},"This action will restart browser process and thereby reset all settings(proxies, headers, etc), so the best place to use this action is thread start.":{"ru":"Это действие перезапустит браузер и таким образом обнулит остальные настройки(прокси, заголовки, и т.д.), так что лучшее место для этого действия - начало работы потока."},"This action will return <code>true<\/code> or <code>false<\/code> depending on whether the script is executed in record mode. This result may be used with <a href=\"#!\/if\">If<\/a> action.":{"ru":"Это действие вернет <code>true<\/code> или <code>false<\/code> в зависимости от того, выполняется ли скрипт в режиме записи. Результат может быть использован вместе с действием <a href=\"#!\/if\">If<\/a>."},"This action will return a CSV string composed of all the specified items, separated by the specified character.":{"ru":"Это действие вернет CSV строку, составленную из всех указанных элементов, разделенных указанным символом."},"This action will return a full list of the names of the supported hashing algorithms.":{"ru":"Это действие вернет полный список названий поддерживаемых алгоритмов хеширования."},"This action will return a list consisting of objects containing identifiers and names of countries supported by the specified SMS receiving service. The country identifier is contained in the <code>id<\/code> property of the object, the country name in Russian is in the <code>name<\/code> property, and the country name in English is in the <code>name_en<\/code> property.":{"ru":"Это действие вернет список, состоящий из объектов, содержащих идентификаторы и названия стран поддерживаемых указанным сервисом приема SMS. Идентификатор страны содержится в <code>id<\/code> свойстве объекта, название страны на Русском в свойстве <code>name<\/code>, а название страны на Английском в свойстве <code>name_en<\/code>."},"This action will return a list consisting of objects containing identifiers and names of sites supported by the specified SMS receiving service. The site identifier is contained in the <code>id<\/code> property of the object, and the name in the <code>name<\/code> property.":{"ru":"Это действие вернет список, состоящий из объектов, содержащих идентификаторы и имена сайтов поддерживаемых указанным сервисом приема SMS. Идентификатор сайта содержится в <code>id<\/code> свойстве объекта, а име в свойстве <code>name<\/code>."},"This action will return a list containing the email addresses obtained from the string.":{"ru":"Это действие вернет список, содержащий адреса электронной почты, полученные из строки."},"This action will return a list containing the lines obtained from the original string as a result of splitting at the specified separator.":{"ru":"Это действие вернет список, содержащий строки, полученные из исходной строки в результате разделения по указанному разделителю."},"This action will return a list containing the links obtained from the string.":{"ru":"Это действие вернет список, содержащий ссылки, полученные из строки."},"This action will return a list containing the phone numbers obtained from the string.":{"ru":"Это действие вернет список, содержащий телефонные номера, полученные из строки."},"This action will return a list containing the sentences obtained from the string.":{"ru":"Это действие вернет список, содержащий предложения, полученные из строки."},"This action will return a list containing the words obtained from the string.":{"ru":"Это действие вернет список, содержащий слова, полученные из строки."},"This action will return a list of flags set for the specified message.":{"ru":"Это действие вернет список флагов, установленных для указанного письма."},"This action will return a list of id of the messages found by the specified criteria. If the mail does not contain messages matching the specified criteria, then the action will return an empty list.":{"ru":"Это действие вернет список id писем, найденных по указанным критериям. Если почта не содержит писем, соответствующих указанным критериям, то действие вернет пустой список."},"This action will return a number equal to the balance of the specified SMS receiving service. If failed to get the balance, then the action will return <code>null<\/code>.":{"ru":"Это действие вернет число, равное балансу указанного сервиса приема SMS. Если не удалось получить баланс, то действие вернет <code>null<\/code>."},"This action will return a number equal to the index of the beginning of the first substring found, or -1 if the substring was not found.":{"ru":"Это действие вернет число, равное индексу начала первой найденной подстроки, или -1, если подстрока не найдена."},"This action will return a number equal to the number of available numbers corresponding to the specified parameters on the SMS receiving service.":{"ru":"Это действие вернет число, равное количеству доступных номеров, соответствующих указанным параметрам, на сервисе приема SMS."},"This action will return a number equal to the number of characters in the string.":{"ru":"Это действие вернет число, равное количеству символов в строке."},"This action will return a number equal to the number of substrings in the string.":{"ru":"Это действие вернет число, равное количеству подстрок в строке."},"This action will return a number equal to the number of words in the string.":{"ru":"Это действие вернет число, равное количеству слов в строке."},"This action will return a path composed of all the specified paths.":{"ru":"Это действие вернет путь, составленную из всех указанных путей."},"This action will return a string composed of all the specified strings.":{"ru":"Это действие вернет строку, составленную из всех указанных строк."},"This action will return a string containing a line break. You can read more about line breaks in <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/en.wikipedia.org\/wiki\/Newline');return false\">Wiki<\/a>.":{"ru":"Это действие вернет строку, содержащую перенос строки. Подробнее о переносе строки можно узнать в <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8');return false\">Wiki<\/a>."},"This action will return a string containing the URL, normalized according to the specified parameters.":{"ru":"Это действие вернет строку, содержащую URL, нормализованную в соответствии с указанными параметрами."},"This action will return a string containing the changed URL.":{"ru":"Это действие вернет строку, содержащую изменный URL."},"This action will return a string containing the code from the SMS message or the full message if the service was unable to get the code from it.":{"ru":"Это действие вернет строку, содержащую код из SMS сообщения или полное сообщение, если сервису не удалось получить из него код."},"This action will return a string containing the final URL.":{"ru":"Это действие вернет строку, содержащую итоговый URL."},"This action will return a string containing the received phone number.":{"ru":"Это действие вернет строку, содержащую полученный номер телефона."},"This action will return a string from which all unnecessary characters will be removed, such as multiple spaces, line breaks, tabs.":{"ru":"Это действие вернет строку, из которой будут удалены все ненужные символы, такие как множественные пробелы, переносы строк, табуляция."},"This action will return a string in which all letters will be latinized, and the rest of the characters will remain unchanged.":{"ru":"Это действие вернет строку, в которой все буквы будут латинизированы, а остальные символы останутся без изменений."},"This action will return a string in which all letters will be lowercase, and the rest of the characters will remain unchanged.":{"ru":"Это действие вернет строку, в которой все буквы будут иметь нижний регистр, а остальные символы останутся без изменений."},"This action will return a string in which all letters will be uppercase, and the rest of the characters will remain unchanged.":{"ru":"Это действие вернет строку, в которой все буквы будут иметь верхний регистр, а остальные символы останутся без изменений."},"This action will return a string in which the first letter will be uppercase and the rest will remain unchanged.":{"ru":"Это действие вернет строку, в которой первая буква будут иметь верхний регистр, а остальные останутся без изменений."},"This action will return a string representation of the specified data.":{"ru":"Это действие вернет строковое представление указанных данных."},"This action will return a string, from the beginning and end of which unnecessary characters such as spaces, line breaks, tabs will be trimmed.":{"ru":"Это действие вернет строку, с начала и конца которой будут обрезаны ненужные символы, такие как пробелы, переносы строк, табуляция."},"This action will return one of three words matching the declension to the specified number.":{"ru":"Это действие вернет одно из трех слов, подходящее по склонению к указанному числу."},"This action will return string containing the final checksum in the specified format.":{"ru":"Это действие вернет строку, содержащую итоговую контрольную сумму в указанном формате."},"This action will return the directory of the specified path, trailing directory separators are ignored.":{"ru":"Это действие вернет директорию указанного пути, завершающие разделители каталогов игнорируются."},"This action will return the folder list of the specified mailbox in the specified format.":{"ru":"Это действие вернет список папок указанного почтового ящика в указанном формате."},"This action will return the formatted string representation of the specified number.":{"ru":"Это действие вернет форматированное строковое представление указанного числа."},"This action will return the full path to the directory where the executable file is located.":{"ru":"Это действие вернет полный путь к директории, в которой находится исполняемый файл."},"This action will return the full path to the project directory. If the script is not compiled, then this action will return the path to the directory in which the open project file is located. And if the script is compiled, then this action will return the path to the root directory of the script.":{"ru":"Это действие вернет полный путь к директории проекта. Если скрипт не скомпилирован, то это действие вернет путь к директории в которой находится открытый файл проекта. А если скрипт скомпилирован, то это действие вернет путь к корневой директории скрипта."},"This action will return the full path to the project file. If the script is not compiled, then this action will return the path to the open project file. And if the script is compiled, then this action will return the path to the project.xml file located in the root folder of the engine.":{"ru":"Это действие вернет полный путь к файлу проекта. Если скрипт не скомпилирован, то это действие вернет путь к открытому файлу проекта. А если скрипт скомпилирован, то это действие вернет путь к файлу project.xml находящемуся в корневой папке движка."},"This action will return the id of the last message.":{"ru":"Это действие вернет id последнего письма."},"This action will return the id of the message found by the specified criteria.":{"ru":"Это действие вернет id письма, найденного по указанным критериям."},"This action will return the last part of the path, which can be a file name with an extension or a folder name, trailing directory separators are ignored.":{"ru":"Это действие вернет последнюю часть пути, которой может быть название файла с расширением или название папки, завершающие разделители каталогов игнорируются."},"This action will return the number of messages matching the specified filtering criteria, or the count of all messages if no filtering criteria is specified.":{"ru":"Это действие вернет количество писем, соответствующих указанным критериям фильтрации, или количество всех писем, если критерии фильтрации не указаны."},"This action will return the numeric representation of the specified string.":{"ru":"Это действие вернет числовое представление указанной строки."},"This action will return the received substring.":{"ru":"Это действие вернет полученную подстроку."},"This action will return the string resulting from all the manipulations.":{"ru":"Это действие вернет строку, полученную в итоге выполнения всех манипуляций."},"This action will return the string resulting from the substring insertion.":{"ru":"Это действие вернет строку, полученную в итоге вставки подстроки."},"This action will return true or false depending on whether the specified data is a string. This result may be used with \"If\" action.":{"ru":"Это действие вернет true или false в зависимости от того, являются ли указанные данные строкой. Результат может быть использован вместе с действием \"If\"."},"This action will return true or false depending on whether the specified data is not an empty string. This result may be used with \"If\" action.":{"ru":"Это действие вернет true или false в зависимости от того, являются ли указанные данные не пустой строкой. Результат может быть использован вместе с действием \"If\"."},"This action will return true or false depending on whether the specified path is absolute. This result may be used with \"If\" action.":{"ru":"Это действие вернет true или false в зависимости от того, является ли указанный путь абсолютным. Результат может быть использован вместе с действием \"If\"."},"This action will return true or false depending on whether the string contains a substring. This result may be used with \"If\" action.":{"ru":"Это действие вернет true или false в зависимости от того, содержит ли строка подстроку. Результат может быть использован вместе с действием \"If\"."},"This action will return true or false depending on whether the string ends with the specified substring. This result may be used with \"If\" action.":{"ru":"Это действие вернет true или false в зависимости от того, заканчиваться ли строка указанной подстрокой. Результат может быть использован вместе с действием \"If\"."},"This action will return true or false, depending on whether the string begins with the specified substring. This result may be used with \"If\" action.":{"ru":"Это действие вернет true или false в зависимости от того, начинается ли строка с указанной подстроки. Результат может быть использован вместе с действием \"If\"."},"This action will save each User-Agent item to its own variable.":{"ru":"Это действие сохранит каждый элемент User-Agent в свою переменную."},"This action will save each item of the URL to its own variable.":{"ru":"Это действие сохранит каждый элемент URL в свою переменную."},"This action will save each item of the path to its own variable. You can learn more about paths in <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/en.wikipedia.org\/wiki\/Path_(computing)');return false\">Wiki<\/a>.":{"ru":"Это действие сохранит каждый элемент пути в свою переменную. Подробнее о путях можно узнать в <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%83%D1%82%D1%8C_%D0%BA_%D1%84%D0%B0%D0%B9%D0%BB%D1%83');return false\">Wiki<\/a>."},"This action will save each path item to its own variable.":{"ru":"Путь, который нужно распарсить."},"This action will set general settings for emulation, which will be used in all subsequent actions. The only exception is if specific action has its own emulation settings set.":{"ru":"Это действие установит общие настройки для эмуляции, которые будут использоваться во всех последующих действиях. Единственным исключением является случай, если конкретное действие имеет свои собственные настройки эмуляции."},"This action will set the flags for the specified message.":{"ru":"Это действие установит флаги для указанного письма."},"This action will start a new thread and execute function in it with specified parameters.":{"ru":"Это действие запустит новый поток и выполнит в нем функцию с указанными параметрами."},"This action will temporary establish direct control over browser. Every mouse movement and keyboard event will be sent to browser directly.":{"ru":"Это действие временно передаст контроль над браузером пользователю. Каждое движение мыши и событие клавиатуры будут отправлены в браузер напрямую."},"This action will try to modify time measurements only when it is executed between small time intervals. In case if interval between measurements is big, it can't be used for browser fingerprinting, therefore replacement is not required. This parameter designates maximum time between measurements to perform replacement.":{"ru":"Это действие будет пытаться изменить результаты измерения времени только тогда, когда они выполняются в пределах небольшого временного интервала. Если интервал между измерениями большой, он не может быть использован для получения отпечатков браузера, поэтому замена не требуется. Этот параметр задает максимальное время между измерениями при котором состоится замена."},"This action will work only if you create profile previously.":{"ru":"Это действие работает только если вы создали профиль ранее."},"This action won't start connection, it only sets configuration. Connection will be established after first attempt to access server. When action, which triggers connection will be finished, connection won't be closed immediately.":{"ru":"Это действие не устанавливает соединение сразу. Соединение будет установлено только после первой попытки доступа к серверу. Когда действие, запускающее соединение, будет завершено, соединение не будет закрыто."},"This action won't stop browser, only if you delete current profile.":{"ru":"Это действие остановит браузер, только если вы будете удалять текущий профиль."},"This action works like captcha, but instead of image, specified text is shown.":{"ru":"Это действие работает как капча, но вместо изображения отображается текст."},"This action works like this - regexp is applied to target string, all matches are replaced with string from 'Replace with' parameter.":{"ru":"Это действие работает так: регулярное выражение применяется к целевой строке, все соответствия заменяются строкой из параметра 'Заменить на'."},"This action works with":{"ru":"Это действие работает вместе с"},"This action works with any type of data.":{"ru":"Это действие работает с любым типом данных."},"This action works with both domains and links.":{"ru":"Это действие работает как с доменами так и с ссылками."},"This action, unlike the <code>Solve captcha with clicks<\/code> action from the <code>Browser<\/code> module, performs clicks automatically, and you do not need to manually calculate the coordinates for clicks relative to the position of the element on the page. It is recommended to use this action.":{"ru":"Данное действие, в отличие от действия <code>Решить капчу кликами<\/code> из модуля <code>Браузер<\/code>, выполняет клики автоматически, и вам не нужно вручную расчитывать координаты для кликов относительно положения элемента на странице. Рекомендуется использовать именно это действие."},"This field contains properties of returned gelocation object. By changing this object, you can tweak, for example, accuracy property, or others. This object should not include latitude and longitude, they are set through separate settings.":{"ru":"Это поле содержит свойства возвращаемого объекта геолокации. Изменяя этот объект, вы можете настроить, например, свойство accuracy или другие. Этот объект не должен включать latitude и longitude, они задаются через отдельные настройки."},"This field must contain a date or a string that can be converted to a date.":{"ru":"Это поле должно содержать дату или строку, которую можно преобразовать в дату."},"This field must contain either path to executable that you want to start or batch script. Batch content may contain any windows utilities like cd, dir, echo, etc and can have multiple lines":{"ru":"Это поле должно содержать либо путь к исполняемому файлу, который вы хотите запустить, либо batch скрипт. Batch может содержать любые служебные программы Windows, такие как cd, dir, echo и т. д. и может иметь несколько строк"},"This is more convenient sleep action replacement.":{"ru":"Это действие - более правдоподобная замена действия 'Спать'."},"This is the best option. Try to use PerfectCanvas whenever it is possible.":{"ru":"Это лучший вариант. Старайтесь использовать PerfectCanvas всякий раз, когда это возможно."},"This list will be converted to resource":{"ru":"Этот список будет преобразован в ресурс"},"This makes it possible to combine settings from several actions. General settings take precedence over default settings, and settings in the action itself take precedence over both general and default settings.":{"ru":"Это позволяет комбинировать настройки из нескольких действий. Общие настройки имеют приоритет над настройками по умолчанию, а настройки в самом действии имеют приоритет как над общими настройками, так и над настройками по умолчанию."},"This option is useful only if you have custom server functionality enabled in your account. Otherwise, it will always give error. If you have this setting enabled, fingerprint will be obtained only from custom server. It is compatible with PerfectCanvas. Check wiki for more info.":{"ru":"Эта настройка полезна только в том случае, если пользовательские серверы активированы для вашей учетной записи. В противном случае действие всегда будет выдавать ошибку. Если у вас включен этот параметр, отпечаток будет получен только из вашего сервера. Данный метод совместим с PerfectCanvas. Проверьте вики для получения дополнительной информации."},"This parameter is a string. It works like this - regexp is applied to target string, all matches are replaced with this string. It also can contain special strings: \\1, \\2, \\3, etc. \\1 will be replaced with first group for current match, \\2 will be raplced with second group and so on. See task description for example.":{"ru":"Этот параметр является строкой. Это работает следующим образом: регулярное выражение применяется к целевой строке, все найденные вхождение заменяются этой строкой. Она также может содержать строки: \\1, \\2, \\3 и т. д. \\1 будет заменено значением первой группы, \\2 будет заменено второй группой и так далее. Смотрите описание текущего действия чтобы увидеть примеры."},"This parameter is not available for all services.":{"ru":"Данный параметр доступен не для всех сервисов."},"This parameter sets idle time duration in seconds. Time setting is not precise, actual action duration can be a little longer than specified.":{"ru":"Этот параметр задает длительность бездействия в секундах. Заданное время не является точным, фактическая длительность действия может быть немного дольше, чем указано."},"This service allows to assign fingerprint licenses to your users through web panel.":{"ru":"Этот сервис позволяет назначать лицензии отпечатков вашим пользователям через веб-панель."},"This setting defines behavior, which will be performed on idle, ie when function will finish but thread will remain active. By using 'start postponded function' option you can achieve such behavior, when all functions will be executed in same pool of threads. This will help to save resources needed to restrat threads and browsers. Don't forget to set 'Close thread after function finish' to false, otherwise threads will be closed automatically, idle state won't be achieved and effect will be neglected.":{"ru":"Этот параметр определяет поведение во время бездействия потока, т.е. когда функция завершится, но поток останется активным. Используя опцию 'start postponded function', вы можете добиться такого поведения, когда все функции будут выполняться в одном и том же пуле потоков. Это поможет сэкономить ресурсы, необходимые для перезапуска потоков и браузеров. Не забудьте установить для параметра 'Остановить поток после завершения функции' значение false, иначе потоки будут закрываться автоматически вместо перехода в состояние бездействия."},"This technology is still highly experimental and may lead to unpredictable results.":{"ru":"Эта технология все еще экспериментальна и может привести к непредсказуемым результатам."},"This value is a target for regular expression. Could be any string.":{"ru":"Это строка, к которой применяется регулярное выражение."},"This value must contain fingerprint string. Fingerprint string contains all data necessary to change fingerprint. It can be obtained as result of 'Get fingerprint' action. Note that fingerprint may be reused - if you store them into file or database, and load on next BAS start, it will still work.":{"ru":"Этот параметр должен содержать данные, необходимые для изменения отпечатка. Их можно получить как результат действия 'Получить отпечаток'. Обратите внимание, что отпечаток может быть использован как сразу, так и в любое другое время, даже после перезапуска BAS. Для этого сохраните его в текстовый файл или базу данных и загрузите перед использованием."},"This value must contain fingerprint string. Fingerprint string contains all data necessary to change fingerprint. It can be obtained as result of 'Get fingerprint' action. Note that this value may be reused - if you store it into file or database, and load on next BAS start, it will still work.":{"ru":"Этот параметр должен содержать данные, необходимые для изменения отпечатка. Их можно получить как результат действия 'Получить отпечаток'. Обратите внимание, что отпечаток может быть использован как сразу, так и в любое другое время, даже после перезапуска BAS. Для этого сохраните его в текстовый файл или базу данных и загрузите перед использованием."},"This value sets maximum list size that you can obtain with this action. Works together with page number, which sets offset. If page number equals one, than this value limits number of results.":{"ru":"Это значение устанавливает максимальный размер списка, который вернет данное действие. Настройка в этом поле работает вместе с настройкой в поле \"Номер страницы\". Если номер страницы равен единице, то это значение просто ограничивает количество результатов."},"This value starts from 1 and indicates page number. Page number and page size together set limit and offset of result record list.":{"ru":"Это поле задает номер страницы, нумерация начинается с 1. Номер страницы и размер страницы вместе устанавливают смещение и максимальное количество элементов, которое вернет это действие."},"This variable will be <code>true<\/code> or <code>false<\/code> depending on whether the script is executed in record mode.":{"ru":"Эта переменная будет равна <code>true<\/code> или <code>false<\/code> в зависимости от того, выполняется ли скрипт в режиме записи."},"This variable will be true or false depending on whether the specified data is a string.":{"ru":"Эта переменная будет равна true или false в зависимости от того, являются ли указанные данные строкой."},"This variable will be true or false depending on whether the specified data is not an empty string.":{"ru":"Эта переменная будет равна true или false в зависимости от того, являются ли указанные данные не пустой строкой."},"This variable will be true or false depending on whether the specified path is absolute.":{"ru":"Эта переменная будет равна true или false в зависимости от того, является ли указанный путь абсолютным."},"This variable will be true or false depending on whether the string contains a substring.":{"ru":"Эта переменная будет равна true или false в зависимости от того, содержит ли строка подстроку."},"This variable will be true or false depending on whether the string ends with the specified substring.":{"ru":"Эта переменная будет равна true или false в зависимости от того, заканчиваться ли строка указанной подстрокой."},"This variable will be true or false depending on whether the string starts with the specified substring.":{"ru":"Эта переменная будет равна true или false в зависимости от того, начинается ли строка с указанной подстроки."},"This variable will contain a list of all items of the specified path. The resulting list can be processed using actions from the \"List\" module.":{"ru":"Эта переменная будет содержать список всех элементов указанного пути. Полученный список можно обработать с помощью действий из модуля \"Список\"."},"This variable will contain an object consisting of query parameters and their values obtained from the specified URL.":{"ru":"Эта переменная будет содержать объект, состоящий из параметров запроса и полученных их значений из указанного URL."},"This variable will contain count of records matching criteria.":{"ru":"Эта переменная будет содержать количество записей удовлетворяющих фильтрам."},"This variable will contain fingerprint string. Fingerprint string contains all data necessary to change fingerprint. It can be used immediately with 'Apply fingerprint' action. It also can be saved to a text file or database and reused later.":{"ru":"Эта переменная будет содержать данные отпечатка. Это данные, необходимые для его изменения. Они могут быть использованы как сразу, вместе с действием 'Применить отпечаток', так и в любое другое время, даже после перезапуска BAS. Для этого сохраните их в текстовый файл или базу данных и загрузите перед использованием."},"This variable will contain id of moved record.":{"ru":"Эта переменная будет содержать ид перемещенной записи."},"This variable will contain list with all data from selected resource.":{"ru":"Эта переменная будет содержать список со всеми данными из ресурса."},"This variable will contain list with all matches. If group with name 'result' is present in regular expression, then list will have content of 'result' groups instead of whole matches. See task description for examples.":{"ru":"Эта переменная будет содержать список со всеми строками подходящими под регулярное выражение. Если группа с именем 'result' присутствует в регулярном выражении, тогда список будет содержать содержимое групп 'result', а не совпадения целиком. Смотрите описание текущего действия чтобы увидеть примеры."},"This variable will contain list with all string parts. See task description for examples.":{"ru":"Эта переменная будет содержать список со всеми частями строки. Смотрите описание текущего действия чтобы увидеть примеры."},"This variable will contain number of items in selected resource":{"ru":"Эта переменная будет содержать количество элементов в выбранном ресурсе"},"This variable will contain process error output":{"ru":"Эта переменная будет содержать вывод процесса с ошибками"},"This variable will contain process standart output":{"ru":"Эта переменная будет содержать стандартный вывод процесса"},"This variable will contain the device model.":{"ru":"Эта переменная будет содержать модель устройства."},"This variable will contain the device type.":{"ru":"Эта переменная будет содержать тип устройства."},"This variable will contain the directory of the specified path.":{"ru":"Эта переменная будет содержать директорию указанного пути."},"This variable will contain the file extension of the specified path. If the path does not contain the file extension, then the variable will contain an empty string.":{"ru":"Эта переменная  будет содержать расширение файла указанного пути. Если путь не содержит расширения файла, то переменная будет содержать пустую строку."},"This variable will contain the fragment of the specified URL.":{"ru":"Эта переменная будет содержать фрагмент\/якорь указанного URL."},"This variable will contain the hostname or ip (IPv4 or IPv6) of the specified URL.":{"ru":"Эта переменная будет содержать имя хоста или ip (IPv4 или IPv6) указанного URL."},"This variable will contain the last part of the specified path.":{"ru":"Эта переменная будет содержать последнюю часть указанного пути."},"This variable will contain the major version of the browser.":{"ru":"Эта переменная будет содержать основную версию браузера."},"This variable will contain the name of the browser engine.":{"ru":"Эта переменная будет содержать название движка браузера."},"This variable will contain the name of the browser.":{"ru":"Эта переменная будет содержать название браузера."},"This variable will contain the name of the device vendor.":{"ru":"Эта переменная будет содержать название производителя устройства."},"This variable will contain the name of the file or directory of the specified path, filename will be saved without extension.":{"ru":"Эта переменная будет содержать имя файла или директории указанного пути, имя файла будет сохранено без расширения."},"This variable will contain the name of the operating system.":{"ru":"Эта переменная будет содержать название операционной системы."},"This variable will contain the password for the specified user.":{"ru":"Эта переменная будет содержать пароль указанного пользователя."},"This variable will contain the path of the specified URL.":{"ru":"Эта переменная будет содержать путь указанного URL."},"This variable will contain the platform type.":{"ru":"Эта переменная будет содержать тип платформы."},"This variable will contain the port of the specified URL.":{"ru":"Эта переменная будет содержать порт указанного URL."},"This variable will contain the processor architecture.":{"ru":"Эта переменная будет содержать архитектуру процессора."},"This variable will contain the protocol\/scheme of the specified URL.":{"ru":"Эта переменная будет содержать протокол\/схему указанного URL."},"This variable will contain the root of the specified path.":{"ru":"Эта переменная  будет содержать корень указанного пути."},"This variable will contain the username of the specified URL.":{"ru":"Эта переменная будет содержать имя пользователя указанного URL."},"This variable will contain the version of the browser engine.":{"ru":"Эта переменная будет содержать версию движка браузера."},"This variable will contain the version of the browser.":{"ru":"Эта переменная будет содержать версию браузера."},"This variable will contain the version of the operating system.":{"ru":"Эта переменная будет содержать версию операционной системы."},"This variable will have true or false value depending if string matches regular expression.":{"ru":"Эта переменная будет равна true или false в зависимости от того, соответствует ли строка регулярному выражению."},"This variable will hold resulting string after replacement.":{"ru":"Эта переменная будет содержать строку после замены."},"This will return the expansion of the last part of the path, from the last period to the end of the string, trailing directory separators are ignored.":{"ru":"Это действие вернет расширение последней части пути, с пооследней точки до конца строки, завершающие разделители каталогов игнорируются."},"This will return the normalized path, multiple slashes will be replaced with single ones, backslashes \"\\\" will be replaced with regular \"\/\", segments \"..\" and \".\" will be resolved.":{"ru":"Это действие вернет нормализованный путь, множественные слеши будут заменены на одиночные, обратные слеши \"\\\" будут заменены на обычные \"\/\", сегменты \"..\" и \".\" будут решены."},"Thousandth separator":{"ru":"Разделитель тысячных"},"Thread id":{"ru":"ID потока"},"Thread identifier obtained from 'Call function asynchronously' action.":{"ru":"ID потока, полученный из действия \"Вызов функции асинхронно\"."},"Thread identifier obtained from 'Call function asynchronously' action. In case if parameter is a list, this action will stop all async functions in a list.":{"ru":"ID потока, полученный из действия \"Вызов функции асинхронно\". Если параметр является списком, это действие остановит все асинхронные функций в этом списке."},"Thread identifier obtained from 'Call function asynchronously' action. In case if parameter is a list, this action will wait for all async functions in a list to finish.":{"ru":"ID потока, полученный из действия \"Вызов функции асинхронно\". Если параметр является списком, это действие будет ожидать завершения всех асинхронных функций в списке."},"Thread list":{"ru":"Список потоков"},"Time":{"ru":"Время"},"Time deformation coefficient will be selected randomly between 0.8 and 1.0. Time measurements will show lower values than it actually is.":{"ru":"Коэффициент деформации времени будет выбираться случайным образом между 0.8 и 1.0. Измерения времени выполнения кода покажут более низкие значения, чем есть на самом деле."},"Time deformation coefficient will be selected randomly between 1.0 and 1.2. Time measurements will show higher values than it actually is.":{"ru":"Коэффициент деформации времени будет выбираться случайным образом между 1.0 и 1.2. Измерения времени выполнения кода покажут более высокие значения, чем есть на самом деле."},"Time deformation from":{"ru":"Деформация времени от"},"Time deformation to":{"ru":"Деформация времени до"},"Time spent on page in seconds":{"ru":"Время, проведенное на странице в секундах"},"Timeout":{"ru":"Таймаут"},"Timeout (minutes)":{"ru":"Таймаут (минут)"},"Timeout (seconds)":{"ru":"Таймаут (секунд)"},"Timezone":{"ru":"Часовой пояс"},"Timezone UTC offset. Can be blank":{"ru":"Смещение относительно UTC. Может быть пустым"},"Timezone as offset from UTC in minutes":{"ru":"Часовой пояс как смещение от UTC в минутах"},"Timezone name.":{"ru":"Название часового пояса."},"Timezone name. Can be blank":{"ru":"Название часового пояса. Может быть пустым"},"Timor-Leste":{"ru":"Тимор-Лесте"},"To":{"ru":"До"},"To automatically determine the settings, a pre-prepared list is used, if the settings cannot be determined, the action will fail.":{"ru":"Для автоматического определения настроек используется заранее подготовленный список, если определить настройки не удастся, то действие завершится ошибкой."},"To contains":{"ru":"До сожержит"},"To date":{"ru":"До даты"},"To delete and insert, you need to specify a value greater than zero in the \"Number of characters to remove\" parameter, and specify the \"Insertable substring\" parameter.":{"ru":"Чтобы удалить и вставить, нужно указать в параметр \"Количество удаляемых символов\" значение больше нуля, и указать параметр \"Вставляемая подстрока\"."},"To folder":{"ru":"В папку"},"To get a list of English names of all countries, use the JPath query <span style=\"color:black\">$.[*].name_en<\/span> in the \"Get all values\" action from the \"JSON\" module.":{"ru":"Чтобы получить список Английское названий всех стран, используйте JPath запрос <span style=\"color:black\">$.[*].name_en<\/span> в действии \"Получить все значения\" из модуля \"JSON\"."},"To get a list of Russian names of all countries, use the JPath query <span style=\"color:black\">$.[*].name<\/span> in the \"Get all values\" action from the \"JSON\" module.":{"ru":"Чтобы получить список Русских названий всех стран, используйте JPath запрос <span style=\"color:black\">$.[*].name<\/span> в действии \"Получить все значения\" из модуля \"JSON\"."},"To get a list of all site names, use the JPath query <span style=\"color:black\">$.[*].name<\/span> in the \"Get all values\" action from the \"JSON\" module.":{"ru":"Чтобы получить список имен всех сайтов, используйте JPath запрос <span style=\"color:black\">$.[*].name<\/span> в действии \"Получить все значения\" из модуля \"JSON\"."},"To get another code to the same number, set status <code>3<\/code> by the action \"Change activation status\" and call this action again. You must set the status <code>3<\/code> before each new receipt of the code to the same number.":{"ru":"Чтобы получить ещё один код на тот же номер, установите статус <code>3<\/code> действием \"Изменение статуса активации\" и повторно вызовете это действие. Устанавливать статус <code>3<\/code> нужно перед каждым новым получением кода на тот же номер."},"To get the English name of the first country, use the JPath query <span style=\"color:black\">$.[0].name_en<\/span> in the \"Get value\" action from the \"JSON\" module.":{"ru":"Чтобы получить Английское название первой страны, используйте JPath запрос <span style=\"color:black\">$.[0].name_en<\/span> в действии \"Получить значение\" из модуля \"JSON\"."},"To get the Russian name of the first country, use the JPath query <span style=\"color:black\">$.[0].name<\/span> in the \"Get value\" action from the \"JSON\" module.":{"ru":"Чтобы получить Русское название первой страны, используйте JPath запрос <span style=\"color:black\">$.[0].name<\/span> в действии \"Получить значение\" из модуля \"JSON\"."},"To get the id of a site with a name from the [[NAME]] variable, use the JPath query <span style=\"color:black\">$.[?(@.name==\"[[NAME]]\")].id<\/span> in the \"Get value\" action from the \"JSON\" module.":{"ru":"Чтобы получить идентификатор сайта с именем из переменной [[NAME]], используйте JPath запрос <span style=\"color:black\">$.[?(@.name==\"[[NAME]]\")].id<\/span> в действии \"Получить значение\" из модуля \"JSON\"."},"To get the id of the country with the English name from the [[NAME]] variable, use the JPath query <span style=\"color:black\">$.[?(@.name_en==\"[[NAME]]\")].id<\/span> in the \"Get value\" action from the \"JSON\" module.":{"ru":"Чтобы получить идентификатор страны с Английским названием из переменной [[NAME]], используйте JPath запрос <span style=\"color:black\">$.[?(@.name_en==\"[[NAME]]\")].id<\/span> в действии \"Получить значение\" из модуля \"JSON\"."},"To get the id of the country with the Russian name from the [[NAME]] variable, use the JPath query <span style=\"color:black\">$.[?(@.name==\"[[NAME]]\")].id<\/span> in the \"Get value\" action from the \"JSON\" module.":{"ru":"Чтобы получить идентификатор страны с Русским названием из переменной [[NAME]], используйте JPath запрос <span style=\"color:black\">$.[?(@.name==\"[[NAME]]\")].id<\/span> в действии \"Получить значение\" из модуля \"JSON\"."},"To get the id of the first country, use the JPath query <span style=\"color:black\">$.[0].id<\/span> in the \"Get value\" action from the \"JSON\" module.":{"ru":"Чтобы получить идентификатор первой страны, используйте JPath запрос <span style=\"color:black\">$.[0].id<\/span> в действии \"Получить значение\" из модуля \"JSON\"."},"To get the id of the first site, use the JPath query <span style=\"color:black\">$.[0].id<\/span> in the \"Get value\" action from the \"JSON\" module.":{"ru":"Чтобы получить идентификатор первого сайта, используйте JPath запрос <span style=\"color:black\">$.[0].id<\/span> в действии \"Получить значение\" из модуля \"JSON\"."},"To get the name of the first site, use the JPath query <span style=\"color:black\">$.[0].name<\/span> in the \"Get value\" action from the \"JSON\" module.":{"ru":"Чтобы получить имя первого сайта, используйте JPath запрос <span style=\"color:black\">$.[0].name<\/span> в действии \"Получить значение\" из модуля \"JSON\"."},"To get the value of the query parameter, use the JPath query <span style=\"color:black\">$.key<\/span>, where key is the name of the parameter, in the \"Get value\" action from the \"JSON\" module.":{"ru":"Чтобы получить значение параметра запроса, используйте JPath запрос <span style=\"color:black\">$.key<\/span>, где key - это имя параметра, в действии \"Получить значение\" из модуля \"JSON\"."},"To index":{"ru":"До индекса"},"To insert only, you need to specify the \"Insertable substring\" parameter, and specify zero in the \"Number of characters to remove\" parameter.":{"ru":"Чтобы только вставить, нужно указать параметр \"Вставляемая подстрока\", а в параметр \"Количество удаляемых символов\" указать ноль."},"To lower":{"ru":"В нижний регистр"},"To not contains":{"ru":"До не содержит"},"To obtain ip information internal database or external service is used, check \"IP information\" section for more details.":{"ru":"Чтобы получать информацию об ip используется либо локальная база данных либо внешний сервис, смотрите раздел \"Информация об IP\" чтобы узнать больше."},"To only remove, you need to specify a value greater than zero in the \"Number of characters to remove\" parameter, and do not specify the \"Insertable substring\" parameter.":{"ru":"Чтобы только удалить, нужно указать в параметр \"Количество удаляемых символов\" значение больше нуля, а параметр \"Вставляемая подстрока\" не указывать."},"To perform clicks on the received coordinates, you need to take into account the position of the element whose screenshot you are sending relative to the page, as well as scrolling vertically and horizontally. Therefore, the simplest option would be to use a similar action for a specific element from the context menu of the browser, where clicks will be performed automatically.":{"ru":"Для выполнения кликов по полученным координатам вам нужно учитывать позицию элемента, скриншот которого вы отправляете, относительно страницы, а также скролл по вертикали и горизонтали. Поэтому самым простым вариантом будет использование аналогичного действия для конкретного элемента из контекстного меню браузера, где клики будут выполняться автоматически."},"To perform this action, you need to get the id of the message, you can do this using the actions \"Find id of the last message\", \"Find id of one message by criteria\".":{"ru":"Для выполнения этого действия нужно получить id письма, сделать это можно с помощью действий \"Найти id последнего письма\", \"Найти id одного письма по критериям\"."},"To the beginning of the string":{"ru":"В начало строки"},"To the end of the string":{"ru":"До конца строки"},"To the first character":{"ru":"До первого символа"},"To the last character":{"ru":"До последнего символа"},"To the second character":{"ru":"До второго символа"},"Togo":{"ru":"Того"},"Tonga":{"ru":"Тонга"},"Total":{"ru":"Всего"},"Total messages":{"ru":"Всего писем"},"Trash folder, on some mails":{"ru":"Корзина, на некоторых почтах"},"Trim characters":{"ru":"Обрезать символы"},"Trim left":{"ru":"Обрезать слева"},"Trim line breaks":{"ru":"Обрезать переносы строк"},"Trim on both sides":{"ru":"Обрезать с обеих сторон"},"Trim right":{"ru":"Обрезать справа"},"Trim spaces":{"ru":"Обрезать пробелы"},"Trim string along the edges.":{"ru":"Подровнять строку по краям."},"Trim tabs":{"ru":"Обрезать табуляцию"},"Trinidad and Tobago":{"ru":"Тринидад и Тобаго"},"Tunisia":{"ru":"Тунис"},"Turkey":{"ru":"Турция"},"Turkmenistan":{"ru":"Туркмения"},"Turks and Caicos Islands":{"ru":"Острова Теркс и Кайкос"},"Typical example of usage would be to copy resource into list and to iterate over each list element":{"ru":"Типичным примером использования будет копирование ресурса в список и создания цикла по каждому элементу списка"},"Typical example of using this action would be creation of resource(in OnApplicationStart), which takes data from custom place(for example, from rare database engine) or in custom format or both.":{"ru":"Типичным примером использования этого действия является создание ресурса (в OnApplicationStart), который берет данные из какого-то нестандартного места (например, из редкой системы управления базой данных) или в нестандартном формате или и то, и другое."},"Typical example of using this action would be to delete file on script startup. To do that call this action in 'OnApplicationStart' function and send result into 'Remove File\/Folder' action":{"ru":"Типичным примером использования этого действия будет удаление файла при запуске скрипта. Для этого вызовите это действие в функции OnApplicationStart и отправьте результат в действие действие 'Удалить Файл\/Папку'"},"Typical examples of using this function are working with the API of a website or, more often in the context of BAS, working with Cookies. In BAS, cookies are presented to the user in JSON format strings. This often causes difficulties. But with JSONPath, you can easily get the data you need.":{"ru":"Типичные примеры применения данной функции - это работа с API какого-либо веб-сайта или, что бывает чаще в контексте BAS, работа с Cookies. В BAS куки представлены для пользователя в формате JSON строки. Это зачастую вызывает трудности. Но с помощью JSONPath, вы с лёгкостью сможете достать нужные данные."},"Typical use case would be to control browser in most of the script lifetime, while giving control to user only for a small task, like solving captcha type which is not supported by BAS natively.":{"ru":"Типичным вариантом использования может быть управление браузером в течение большей части времени работы приложения, в то же время предоставляя управление пользователю только для небольшой задачи, например, для решения типа капчи, которая изначально не поддерживается BAS."},"UTC+01:00 - Spain, France, Germany":{"ru":"UTC+01:00 - Испания, Франция, Германия"},"UTC+02:00 - Finland, Romania, Ukraine, Greece":{"ru":"UTC+02:00 - Финляндия, Румыния, Украина, Греция"},"Uganda":{"ru":"Уганда"},"Ukraine":{"ru":"Украина"},"United Arab Emirates":{"ru":"Объединенные Арабские Эмираты"},"United Kingdom":{"ru":"Соединенное Королевство"},"United States":{"ru":"США"},"Unprotected compiled script":{"ru":"Незащищенный скомпилированный скрипт"},"Unseen messages":{"ru":"Непрочитанных писем"},"Unseen messages are messages that do not have the <code>\\Seen<\/code> flag.":{"ru":"Непрочитанные письма - это письма не имеющие флага <code>\\Seen<\/code>."},"Update last record obtained as resource.":{"ru":"Изменить последнюю запись полученную как ресурс."},"Update record from database.":{"ru":"Обновить запись в базе данных."},"Update record in resources and in database":{"ru":"Обновить запись и в системе ресурсов и в базе"},"Update record only in database":{"ru":"Обновить запись только в базе"},"Update records from database.":{"ru":"Обновить записи в базе данных."},"Update records in resources and in database":{"ru":"Обновлять записи и в системе ресурсов и в базе"},"Update records only in database":{"ru":"Обновить записи только в базе"},"Update resources":{"ru":"Обновлять ресурсы"},"Url of the SMS receiving service server. Use this parameter to specify the url of the server, if the required service is not in the list of available ones, but it works through an API similar to the selected service.":{"ru":"Url сервера сервиса приема SMS. Используйте данный параметр для указания url сервера, если нужного сервиса нет в списке доступных, но он работает через API аналогичный выбранному сервису."},"Uruguay":{"ru":"Уругвай"},"Use":{"ru":"Используйте действие"},"Use \"Foreach\" action to go over each profile and \"Parse Line\" action to separate profile id and profile name":{"ru":"Используйте действие \"Foreach\" чтобы перебрать все профили и действие \"Парсить строку\" чтобы отделить имя профиля от имени"},"Use \"Geolocation object\" property to tweak resulting object ":{"ru":"Используйте параметр \"Объект геолокации\" для изменения возвращаемого объекта "},"Use \"Parse String\" action if you want to get list as a result.":{"ru":"Используйте действие \"Парсить строку\" из модуля Список если хотите получить результат в виде списка."},"Use 'Wait for async function completion' and then 'Get async function result' to get async function result":{"ru":"Используйте действие \"Ждать завершение асинхронной функции\", а затем \"Получить результат асинхронной функции\", чтобы получить результат выполнения"},"Use FingerprintBusiness license.":{"ru":"Использовать лицензию FingerprintBusiness."},"Use FingerprintBusiness license. It can help to embed fingerprints inside compiled script. Check following":{"ru":"Использовать лицензию FingerprintBusiness. Это поможет встроить отпечатки в скомпилированный скрипт. Проверьте эту"},"Use PerfectCanvas":{"ru":"Использовать PerfectCanvas"},"Use a free version":{"ru":"Использовать бесплатную версию"},"Use a free version. Empty key will be used in any action which requires FingerprintSwitcher key set, such as 'Get fingerprint' or 'Apply fingerprint'.":{"ru":"Использовать бесплатную версию. Пустой ключ будет использоваться в любом действии, которое требует установки ключа FingerprintSwitcher, таких как 'Получить отпечаток' или 'Применить отпечаток'."},"Use a free version. Only if fingerprint was obtained with free version.":{"ru":"Использовать бесплатную версию. Только если отпечаток был получен с помощью бесплатной версии."},"Use action <a href=\"#!\/JsonCheckFormat\">Check if string matches JSON<\/a> to make sure that string conversion is possible or just use the <span style=\"color:black\">Ignore Errors<\/span> action to handle possible errors.":{"ru":"Используйте действие <a href=\"#!\/JsonCheckFormat\">Подходит ли строка под парсинг JSON<\/a>, чтобы проверить, что преобразование из строки возможно. Или просто используйте действие <span style=\"color:black\">Игнорировать ошибки<\/span>, чтобы обработать возможные исключения."},"Use any operator.":{"ru":"Использовать любого оператора."},"Use code 9779 to confirm":{"ru":"Используйте код 9779 для подтверждения"},"Use custom server":{"ru":"Использовать пользовательские серверы"},"Use custom server to obtain fingerprint.":{"ru":"Использовать пользовательский сервер для получения отпечатка."},"Use custom service URL with port 8080":{"ru":"Использовать кастомный URL сервиса с портом 8080"},"Use custom service URL with port 8083":{"ru":"Использовать кастомный URL сервиса с портом 8083"},"Use default server url, https:\/\/api.sms-activate.org for sms-activate.org, etc":{"ru":"Использовать url по умолчанию, например, https:\/\/api.sms-activate.org для sms-activate.org."},"Use default service URL, http:\/\/rucaptcha.com for RuCaptcha, etc":{"ru":"Использовать стандартный URL сервиса, http:\/\/rucaptcha.com для RuCaptcha и так далее"},"Use fingerprint with PerfectCanvas. All canvas data, which matches request will be replaced with images from real devices. Any other canvas data will be replaced by adding noise.":{"ru":"Использовать отпечаток с PerfectCanvas. Все данные, соответствующие запросу PerfectCanvas, будут заменены изображениями с реальных устройств. Любые другие данные canvas будут заменены добавлением шума."},"Use following page to report about anti-bot detection on particular site, ":{"ru":"Используйте следующую страницу, чтобы сообщить о проблемах с анти-бот защитой на конкретном сайте, "},"Use font pack":{"ru":"Использовать пак шрифтов"},"Use resources if you want to take them from file, url or database.":{"ru":"Используйте ресурсы, если вы хотите взять прокси из файла, url или базы данных."},"Use standard fingerprint. Canvas data will be replaced, by adding noise.":{"ru":"Использовать стандартный отпечаток. К данным canvas будет добавлен шум."},"Use that action to obtain path to file\/folder selected by user.":{"ru":"Используйте это действие для получения пути к файлу\/папке, выбранной пользователем."},"Use the <a href=\"#!\/JsonFromString\">String to JSON<\/a> action for reverse conversion (from string to object).":{"ru":"Используйте действие <a href=\"#!\/JsonFromString\">Строку в JSON<\/a> для обратной конвертации (из строки в объект)."},"Use the <a href=\"#!\/JsonToString\">JSON to string<\/a> action for reverse conversion (from object to string).":{"ru":"Используйте действие <a href=\"#!\/JsonToString\">JSON в строку<\/a> для обратной конвертации (из объекта в строку)."},"Use the folder specified in the \"Configure receiving mail\" action":{"ru":"Использовать папку указанную в действии \"Настроить получение почты\""},"Use the previously set value(If it exists) or the default value.":{"ru":"Использовать значение установленное ранее (Если оно есть) или значение по умолчанию."},"Use value from \"":{"ru":"Использовать значение из параметра \""},"Use variable inside message":{"ru":"Использовать переменную внутри сообщения"},"User can input either some text, either cancel input. In first case action will return user input into variable, in second case thread will finish with error. You can avoid finishing thread by using 'Ignore Errors' action.":{"ru":"Пользователь может ввести какой-либо текст, либо отменить ввод. В первом случае действие вернет введенное значение, во втором случае поток завершится с ошибкой. Вы можете избежать завершения работы потока, используя действие 'Игнорировать ошибки'."},"User-Agent that will be used by the service for solving captcha. It works only if you use a proxy to solve captcha, i.e. if the `Send current proxy to solver service` option is enabled.":{"ru":"User-Agent который будет использоваться сервисом для решения капчи. Это работает, только если вы используете прокси для решения капчи, то есть если опция `Отправлять текущий прокси на сервис` включена."},"User-agent is a string containing information about the browser used, operating system, device. You can learn more about User-agent from <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/en.wikipedia.org\/wiki\/User_agent');return false\">Wiki<\/a>.":{"ru":"User-agent - эта строка, содержащая информацию о используемом браузере, операционной системе, девайсе. Подробнее об User-agent можно узнать из <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/ru.wikipedia.org\/wiki\/User_agent');return false\">Wiki<\/a>."},"Username":{"ru":"Логин"},"Using action with empty list will clear resource.":{"ru":"Использование этого действия с пустым списком очистит ресурс."},"Using resources is the best way to select record.":{"ru":"Использование ресурсов - лучший способ получить запись."},"Using the parameters from the \"<b>Actions performed<\/b>\" block, you can disable some of the actions at your discretion or leave all of them enabled.":{"ru":"Используя параметры из блока \"<b>Выполняемые действия<\/b>\" вы можете отключить часть действий по своему усмотрению или оставить все включенными."},"Using the parameters from the \"<b>Manual parameter setting<\/b>\" block, you can manually configure some emulation parameters.":{"ru":"Используя параметры из блока \"<b>Ручная настройка параметров<\/b>\" вы можете в ручную настроить некоторые параметры эмуляции."},"Using the parameters from the \"Filtration\" block, you can filter messages at your discretion or leave them unfiltered.":{"ru":"Используя параметры из блока \"Фильтрация\" вы можете отфильтровать письма по своему усмотрению или оставить без фильтрации."},"Using the parameters from the \"Parsing\" block, you can choose which parts of the message will be retrieved and saved, and which ones will be skipped, thereby saving traffic and time by getting only what you need.":{"ru":"Используя параметры из блока \"Парсинг\" вы можете выбрать какие части письма будут получены и сохранены, а какие пропущены, тем самым экономя трафик и время, получая только то что нужно."},"Using the parameters from this block, you can filter the messages as you need, or leave them without filtering. You can combine the parameters of this block in any order, the specified parameters will be taken into account when filtering, and those not specified will be ignored.":{"ru":"Используя параметры из этого блока, вы можете отфильтровать письма по своему усмотрению или оставить их без фильтрации. Вы можете комбинировать параметры этого блока в любом порядке, указанные параметры будут учтены при фильтрации, а не указанные проигнорированы."},"Using the parameters from this block, you can filter the results as you need, or leave them without filtering. You can combine the parameters of this block in any order, the specified parameters will be taken into account when filtering, and those not specified will be ignored.":{"ru":"Используя параметры из этого блока, вы можете отфильтровать результаты по своему усмотрению или оставить их без фильтрации. Вы можете комбинировать параметры этого блока в любом порядке, указанные параметры будут учтены при фильтрации, а не указанные проигнорированы."},"Using the parameters from this block, you can manually configure some emulation parameters. Specified parameters will be taken into account and default settings will be used for unspecified ones.":{"ru":"Используя параметры из этого блока, вы можете вручную настроить некоторые параметры эмуляции. Указанные параметры будут учтены, а для неуказанных будут использованы настройки по умолчанию."},"Using the parameters from this block, you can select what actions will be performed during emulation.":{"ru":"Используя параметры из этого блока, вы можете выбрать какие действия будут выполнятся во время эмуляции."},"Using the parameters from this block, you can select which parts of the message will be fetched and in which variables will be saved.":{"ru":"Используя параметры из этого блока, вы можете выбрать какие части письма будут получены и в какие переменные будут сохранены."},"Using the parameters from this block, you can sort the results in the order you need, or leave them without sorting.":{"ru":"Используя параметры из этого блока, вы можете отсортировать результаты в нужном вам порядке или оставить их без сортировки."},"Using this action is like user agent switcher on steroids. It changes not only user agent, but a lot of browser internals to make BAS actually look like firefox, chrome, safari, on desktop or on mobile.":{"ru":"Это действие - более продвинутая версия смены юзер агента. Оно меняет не только юзер агент, но и множество внутренних методов и переменных браузера, так, что он выглядел абсолютно идентично хрому, файерфоксу, сафари, настольному или мобильному браузеру."},"Using this action is not necessary to hide your location, because coordintes can be obtained only after user accepts request from site in a special popup window. By default, if you don't use this action, this popup is rejected by BAS.":{"ru":"Использование этого действия не обязательно, чтобы скрыть ваше местоположение, потому что координаты могут быть получены только после того, как пользователь примет запрос от сайта в специальном всплывающем окне. По умолчанию, если вы не используете это действие, всплывающее окно отклоняется BAS."},"Using this technology, we can quickly get data from JavaScript objects or strings in JSON format. In addition, this greatly simplifies the work, as usually, parsing JSON requires writing code.":{"ru":"С помощью данной технологии, мы можем быстро получать данные из JavaScript объектов или строк в формате JSON. Кроме того, это сильно упрощает работу, так как обычно, чтобы распарсить JSON, требуется писать код."},"Usually resources are created from user interface (with '+ Create New Resource' button), but also may be created with 'Create resource' action.":{"ru":"Обычно ресурсы создаются из пользовательского интерфейса (кнопкой '+ Создать новый ресурс'), но также могут быть созданы действием 'Создать ресурс'."},"Usually resources are created from user interface (with '+ Create New Resource' button), but also may be created with this action.":{"ru":"Обычно ресурсы создаются из пользовательского интерфейса (кнопкой '+ Создать новый ресурс'), но также могут быть созданы с помощью этого действия."},"Uzbekistan":{"ru":"Узбекистан"},"Valid":{"ru":"Корректно"},"Value":{"ru":"Значение"},"Value 1. Can be empty":{"ru":"Значение 1. Может быть пустым"},"Value 2. Can be empty":{"ru":"Значение 2. Может быть пустым"},"Value 3. Can be empty":{"ru":"Значение 3. Может быть пустым"},"Value to add":{"ru":"Значение для добавления"},"Value1":{"ru":"Значени1"},"Value2":{"ru":"Значени2"},"Value3":{"ru":"Значени3"},"Variable":{"ru":"Переменная"},"Variable To Save Length":{"ru":"Переменная Которая Будет Содержать Количество Элементов"},"Variable To Save List":{"ru":"Переменная для сохранения списка"},"Variable With List":{"ru":"Переменная, содержащая список"},"Variable in which, after successful execution of the action, a string containing a line break will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записана строка содержащая перенос строки."},"Variable in which, after successful execution of the action, an object with all the headers of the retrieved message will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан объект со всеми заголовками полученного письма."},"Variable in which, after successful execution of the action, he SMS code will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан SMS код."},"Variable in which, after successful execution of the action, the CSV string will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записана CSV строка."},"Variable in which, after successful execution of the action, the balance will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан баланс."},"Variable in which, after successful execution of the action, the body of the retrieved message in html format (text\/html) will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано тело полученного письма в html формате (text\/html)."},"Variable in which, after successful execution of the action, the body of the retrieved message in raw form (raw) will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано тело полученного письма в сыром виде (raw)."},"Variable in which, after successful execution of the action, the body of the retrieved message in text format (text\/plain) will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано тело полученного письма в текстовом формате (text\/plain)."},"Variable in which, after successful execution of the action, the converted string will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записана преобразованная строка."},"Variable in which, after successful execution of the action, the count of available numbers will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано количество доступных номеров."},"Variable in which, after successful execution of the action, the date of the retrieved message will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записана дата полученного письма."},"Variable in which, after successful execution of the action, the directory will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записана директория."},"Variable in which, after successful execution of the action, the extension will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано расширение."},"Variable in which, after successful execution of the action, the final URL will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан итоговый URL."},"Variable in which, after successful execution of the action, the final checksum will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записана итоговая контрольная сумма."},"Variable in which, after successful execution of the action, the final path will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан итоговый путь."},"Variable in which, after successful execution of the action, the final string will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записана итоговая строка."},"Variable in which, after successful execution of the action, the formatted string representation of the specified number will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано форматированное строковое представление указанного числа."},"Variable in which, after successful execution of the action, the id of the found message will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан id найденного письма."},"Variable in which, after successful execution of the action, the id of the last message will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан id последнего письма."},"Variable in which, after successful execution of the action, the id of the retrieved message will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан id полученного письма."},"Variable in which, after successful execution of the action, the index of the beginning of the substring will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан индекс начала подстроки."},"Variable in which, after successful execution of the action, the installation path will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан путь установки."},"Variable in which, after successful execution of the action, the last part of the path will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записана последняя часть пути."},"Variable in which, after successful execution of the action, the list of countries will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список стран."},"Variable in which, after successful execution of the action, the list of email addresses will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список адресов электронной почты."},"Variable in which, after successful execution of the action, the list of filenames attached to the retrieved message will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список имен файлов, прикрепленных к полученному письму."},"Variable in which, after successful execution of the action, the list of flags of the retrieved message will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список флагов полученного письма."},"Variable in which, after successful execution of the action, the list of flags will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записана список флагов."},"Variable in which, after successful execution of the action, the list of folders will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список папок."},"Variable in which, after successful execution of the action, the list of id of the found messages will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список id найденных писем."},"Variable in which, after successful execution of the action, the list of links from the body of the message (raw) will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список ссылок из тела письма (raw)."},"Variable in which, after successful execution of the action, the list of links from the body of the message (text\/html) will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список ссылок из тела письма (text\/html)."},"Variable in which, after successful execution of the action, the list of links from the body of the message (text\/plain) will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список ссылок из тела письма (text\/plain)."},"Variable in which, after successful execution of the action, the list of links will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список ссылок."},"Variable in which, after successful execution of the action, the list of objects containing information about the saved attachments of the message will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список объектов, содержащих информацию о сохранённых вложениях письма."},"Variable in which, after successful execution of the action, the list of phone numbers will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список телефонных номеров."},"Variable in which, after successful execution of the action, the list of sentences will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список предложений."},"Variable in which, after successful execution of the action, the list of sites will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список сайтов."},"Variable in which, after successful execution of the action, the list of strings will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список строк."},"Variable in which, after successful execution of the action, the list of supported hashing algorithms will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список поддерживаемых алгоритмов хеширования."},"Variable in which, after successful execution of the action, the list of words will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан список слов."},"Variable in which, after successful execution of the action, the normalized path will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан нормализованный путь."},"Variable in which, after successful execution of the action, the number of all messages in the specified folder will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано количество всех писем в указанной папке."},"Variable in which, after successful execution of the action, the number of characters contained in the string will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано количество символов, содержащихся в строке."},"Variable in which, after successful execution of the action, the number of messages will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано количество писем."},"Variable in which, after successful execution of the action, the number of recent messages in the specified folder will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано количество недавних писем в указанной папке."},"Variable in which, after successful execution of the action, the number of substrings in the string will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано количество подстрок в строке."},"Variable in which, after successful execution of the action, the number of unseen messages in the specified folder will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано количество непрочитанных писем в указанной папке."},"Variable in which, after successful execution of the action, the number of words contained in the string will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано количество слов, содержащихся в строке."},"Variable in which, after successful execution of the action, the numeric representation of the specified string will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано числовое представление указанной строки."},"Variable in which, after successful execution of the action, the path to the project directory will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан путь к директории проекта."},"Variable in which, after successful execution of the action, the path to the project file will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан путь к файлу проекта."},"Variable in which, after successful execution of the action, the phone number will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан номер телефона."},"Variable in which, after successful execution of the action, the recipient of the retrieved message will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан получатель полученного письма."},"Variable in which, after successful execution of the action, the resulting path will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан полученный путь."},"Variable in which, after successful execution of the action, the sender of the retrieved message will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан отправитель полученного письма."},"Variable in which, after successful execution of the action, the size of the retrieved message will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записан размер полученного письма."},"Variable in which, after successful execution of the action, the string representation of the specified data will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано строковое представление указанных данных."},"Variable in which, after successful execution of the action, the subject of the retrieved message will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записана тема полученного письма."},"Variable in which, after successful execution of the action, the substring will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записана подстрока."},"Variable in which, after successful execution of the action, the word corresponding to the specified number will be written.":{"ru":"Переменная в которую, после успешного выполнения действия, будет записано слово, сответствующее указанному числу."},"Variable name with result. It will be base64 encoded string in encode mode and decode result as string in decode mode.":{"ru":"Переменная, в которую будет записан результат. Это будет строка в формате base64 в случае использования режима encode и результат декодирования при использовании режима decode."},"Variable name with result. It will be encoded string in encode mode and decode result as string in decode mode.":{"ru":"Переменная, в которую будет записан результат. Это будет закодированная строка в случае использования режима encode и результат декодирования при использовании режима decode."},"Variable specified in 'Entire match' parameter will be filled with whole matching text.":{"ru":"Переменная, указанная в параметре 'Найденный текст целиком', будет заполнена текстом найденным с помощью регулярного выражения."},"Variable specified in 'If string matches' parameter will have true or false value depending if string matches regular expression.":{"ru":"Переменная, указанная в параметре 'Подходит ли строка по рег выражение', будет равна true или false в зависимости от того, соответствует ли строка регулярному выражению."},"Variable specified in 'Match list' parameter will be filled with a list, which contains every found match.":{"ru":"Переменная, указанная в параметре 'Список извлеченных строк', будет заполнена списком, который содержит каждую найденную строку."},"Variable specified in 'Result' parameter will have a string with result.":{"ru":"В переменную, указанную в параметре 'Результат', будет записана строка с результатом."},"Variable specified in 'String parts' parameter will be filled with a list, which contains every string part of splitted string.":{"ru":"Переменная, указанная в параметре 'Части строки после разделения', будет заполнена списком, который содержит все части строки после разделения."},"Variable that stores the conversion result.":{"ru":"Переменная, в которой хранится результат конвертации."},"Variable that stores the result of changing (Modified object or string).":{"ru":"Переменная, содержащая результат изменения (Модифицированный объект или строка)."},"Variable that stores the result of count (Elements count).":{"ru":"Переменная, содержащая результат подсчёта (Количество элементов)."},"Variable that stores the result of creation (Object).":{"ru":"Переменная, содержащая результат создания (Объект)."},"Variable that stores the result of format changing (object or string).":{"ru":"Переменная, содержащая результат изменения формата (объект или строка)."},"Variable that stores the result of format checking (true or false).":{"ru":"Переменная, содержащая результат проверки формата (true или false)."},"Variable that stores the result of parsing (All keys or an list of one key).":{"ru":"Переменная, содержащая результат парсинга (Все ключи или список, состоящий из одного ключа)."},"Variable that stores the result of parsing (All values or an list of one value).":{"ru":"Переменная, содержащая результат парсинга (Все значения или список, состоящий из одного значения)."},"Variable that stores the result of parsing (First key only).":{"ru":"Переменная, содержащая результат парсинга (Первый подходящий ключ)."},"Variable that stores the result of parsing (First value only).":{"ru":"Переменная, содержащая результат парсинга (Первое подходящее значение)."},"Variable that stores the result of removing (Modified object or string).":{"ru":"Переменная, содержащая результат удаления (Модифицированный объект или строка)."},"Variable to save":{"ru":"Переменная, в которую сохранить результат"},"Variable to save height":{"ru":"Переменная, в которую сохранить высоту"},"Variable to save image data":{"ru":"Переменная, в которую сохранить данные изображения"},"Variable to save image id":{"ru":"Переменная, в которую сохранить id изображения"},"Variable to save input":{"ru":"Переменная для сохранения ввода"},"Variable to save the result":{"ru":"Переменная, в которую сохранить результат"},"Variable to save thread index":{"ru":"Переменная для сохранения номера потока"},"Variable to save width":{"ru":"Переменная, в которую сохранить ширину"},"Variable which holds file read result. Works with decode mode":{"ru":"Переменная, которая содержит результат чтения файла. Работает в режиме decode"},"Variable with list":{"ru":"Переменная со списком"},"Variable, which will hold copy of the original string with the replacement":{"ru":"Переменная, которая будет содержать копию оригинальной строки с проведенной заменой"},"Variables [[VARIABLE]] will be expanded to variable value.":{"ru":"Переменные [[VARIABLE]] будут заменены на их значения."},"Variables are not allowed inside files":{"ru":"Переменные не разрешено использовать внутри файлов"},"Variables list":{"ru":"Список переменных"},"Venezuela":{"ru":"Венесуэла Боливарианская Республика"},"Vertical":{"ru":"Вертикально"},"Vertical align":{"ru":"Вертикальное выравнивание"},"Vietnam":{"ru":"Вьетнам"},"Virgin Islands, British":{"ru":"Виргинские острова, Британские"},"Wait":{"ru":"Ждать"},"Wait 10 minutes":{"ru":"Ждать 10 минут"},"Wait 15 minutes":{"ru":"Ждать 15 минут"},"Wait 20 minutes":{"ru":"Ждать 20 минут"},"Wait 5 minutes":{"ru":"Ждать 5 минут"},"Wait For Resource":{"ru":"Ждать появления"},"Wait for 10 seconds":{"ru":"Ждать в течение 10 секунд"},"Wait for 5 seconds":{"ru":"Ждать в течение 5 секунд"},"Wait for 600 milliseconds":{"ru":"Ждать в течение 600 миллисекунд"},"Wait for all functions in the list.":{"ru":"Ждать завершения всех функций в списке."},"Wait for async function to finish.":{"ru":"Ждать завершения асинхронной функции."},"Wait for five messages matching the specified criteria":{"ru":"Ждать пять писем, соответствующих указанным критериям"},"Wait for one message matching the specified criteria":{"ru":"Ждать одно письмо, соответствующее указанным критериям"},"Wait for single function.":{"ru":"Ждать завершения одной функции."},"Wait for ten messages matching the specified criteria":{"ru":"Ждать десять писем, соответствующих указанным критериям"},"Wait for the appearance of the specified number of messages matching the specified criteria. The action will be completed successfully when the number of messages matching the specified criteria is equal to or greater than the number specified in this parameter.":{"ru":"Ждать появления указанного количества писем, соответствующих указанным критериям. Действие будет завершено успешно, когда количество писем, соответствующих указанным критериям, будет равно или больше числа указанного в этом параметре."},"Wait message":{"ru":"Ждать письмо"},"Wait messages":{"ru":"Ждать письма"},"Wait timeout":{"ru":"Таймаут ожидания"},"Wait while process will finish":{"ru":"Ждать завершения"},"Webgl noice":{"ru":"Шум webgl"},"When 'Greedy Usage Algorithm' is set, resource system will try to acquire same line again and again until that line will exhaust all success or fail usages, only after that next line will be used.":{"ru":"Когда выбрана настройка 'Жадный алгоритм', система ресурсов будет пытаться снова и снова получать одну и ту же строку до тех пор, пока эта строка не исчерпает количество успехов или неудач, и только после того следующая строка станет доступна."},"When launching a script, you can select either record mode or run mode.":{"ru":"При запуске скрипта вы можете выбрать либо режим записи, либо режим запуска."},"When user will finish controlling browser, he can click on link at a page bottom to hand control over browser back to script":{"ru":"Когда пользователь закончит работу с браузером, он может нажать на ссылку внизу страницы, чтобы передать управление браузером обратно в приложение."},"When using a proxy, always fill in the field <code>User-Agent<\/code> or use the default value, otherwise the captcha solving service can give an error. If this parameter is specified, the service worker will solve the captcha using the specified <code>User-Agent<\/code>.":{"ru":"При использовании прокси всегда заполняйте поле <code>User-Agent<\/code> или используйте стандартное значение, иначе сервис решения капчи может вернуть ошибку. Если этот параметр указан, работник сервиса будет решать капчу используя указанный <code>User-Agent<\/code>."},"Whole emulation is splitted into intervals. Intervals are different actions or a combination of several actions. Here is a list of all actions:":{"ru":"Вся эмуляция разделена на интервалы. Интервалами являются разные действия или комбинация нескольких действий. Вот список всех действий:"},"Whole idle duration is splitted into intervals. Every interval has a type. Here are list of intervals:":{"ru":"Все бездействие разделяется на интервалы. Каждый интервал имеет тип. Вот список типов: "},"Whole idle duration is splitted into intervals. Every interval has a type. Here are list of intervals: 1 - scroll page with mouse wheel, 2 - random mouse movements for a long distance, 3 - random mouse movements for a short distance, 4 - sleep. Besides that, frequency of occurrence of interval with some types, may be bigger then others. This parameter must contain list of types, the more often different types will appear in the list, the more often they will meet during idle.":{"ru":"Все бездействие разделяется на интервалы. Каждый интервал имеет тип. Вот список типов интервалов: 1 - прокрутка страницы колесом мыши, 2 - случайные движения мыши на большое расстояние, 3 - случайные движения мыши на короткое расстояние, 4 - сон. Кроме того, частота появления интервала с одними типами может быть больше, чем с другими. Этот параметр должен содержать список типов, чем чаще в списке появляются определенные типы, тем чаще они будут встречаться во время выполнения действия."},"Will be replaced with male name":{"ru":"Будет заменено мужским именем"},"With auto configuration enabled, this field should contain an email address along with the domain.":{"ru":"При включенной автоматической настройке это поле должно содержать адрес электронной почты вместе с доменом."},"With the help of PerfectCanvas technology, canvas data is replaced in the most accurate way possible. Data is drawn on real devices.":{"ru":"С помощью технологии PerfectCanvas замена данных canvas происходит максимально точным способом. Данные отрисовываются на реальных устройствах."},"With this action, you can add data into any type of resource. This action doesn't have affect on some resource types, like 'FixedString' or 'FixedInteger'. Normally it is used to add lines into file.":{"ru":"С помощью этого действия вы можете добавлять данные в любой тип ресурсов. Это действие не влияет на некоторые типы ресурсов, такие как 'Строка' или 'Число'. Обычно действие используется для добавления строк в файл."},"With this action, you can convert a JSON string to a JavaScript object and vice versa.":{"ru":"С помощью этого действия вы можете преобразовать строку в формате JSON в объект JavaScript и наоборот."},"With this action, you can convert a JSON string to a JavaScript object.":{"ru":"С помощью этого действия вы можете преобразовать JSON строку в объект JavaScript."},"With this action, you can convert a JavaScript object to a JSON string.":{"ru":"С помощью этого действия вы можете преобразовать объект JavaScript в строку JSON."},"With this action, you can see if you can use the string to parse JSON and retrieve data to avoid possible errors.":{"ru":"С помощью этого действия вы можете убедиться, можно ли использовать строку для парсинга JSON и получения данных, чтобы избежать возможных ошибок."},"Without using encryption":{"ru":"Без использования шифрования"},"Word 1":{"ru":"Слово 1"},"Word 2":{"ru":"Слово 2"},"Word 5":{"ru":"Слово 5"},"Word at":{"ru":"Слово при"},"Word if number is":{"ru":"Слово, если число равно"},"Working folder":{"ru":"Рабочая папка"},"Working folder by default is path where BAS installed, you may want to change it with 'Working folder' parameter or by running 'cd' command inside batch script.":{"ru":"Рабочая папка по умолчанию - это путь, где установлен BAS, вы можете изменить его с помощью параметра 'Рабочая папка' или запустить команду 'cd' внутри batch скрипта."},"Working folder in which batch will be executed. Leave blank to execute in folder, where BrowserAutomationStudio.exe file is located.":{"ru":"Рабочая папка, в которой будет выполнен batch. Оставьте пустым для выполнения в папке, где находится файл BrowserAutomationStudio.exe."},"Works with Multilogin and BAS profiles.":{"ru":"Работает с профилями Multilogin и BAS."},"Write data of the specified type to the clipboard.":{"ru":"Записать данные указанного типа в буфер обмена."},"Write text or binary data to file.":{"ru":"Записать текст или бинарные данные в файл."},"Write the content of the specified list to file. Each element of the list will be written as a line in a file.":{"ru":"Записать содержимое указанного списка в файл. Каждый элемент списка будет записан в виде строки в файле."},"Year":{"ru":"Год"},"Yemen":{"ru":"Йемен"},"You also need to fill server address, port, encryption type, your username and password. These can usually be found by searching for the imap\/pop3 settings for your mail service, like this: \"gmail imap settings\".":{"ru":"Также вам нужно заполнить адрес сервера, порт, тип шифрования, ваше имя пользователя и пароль. Их обычно можно найти, выполнив поиск настроек imap\/pop3 для вашего почтового сервиса, например: \"Настройки gmail imap\"."},"You can also call BAS functions and obtain result.":{"ru":"Вы также можете вызывать функции BAS и получать результат."},"You can also create resource of type \"Database\" and read all content with \"Resource To List\" action. Main advantage of resource system is ability to distribute data across threads.":{"ru":"Существует возможность создать ресурс типа \"База\" и прочитать сразу все его содержимое с помощью действия \"Ресурс в список\". Основным преимуществом системы ресурсов является способность распределять данные по потокам."},"You can also delete record from database obtained with resource by using \"Delete Current Element\" action.":{"ru":"Вы также можете удалить запись из базы полученную через ресурс используя действие \"Удалить Текущий Элемент\""},"You can also insert record with \"Add Element\" action from resource module. In fact you can use only resources system to interact with database.":{"ru":"Вы также можете добавить в базу запись с помощью действия \"Добавить Элемент\" из модуля \"Ресурсы\". На самом деле вы можете использовать только систему ресурсов для взаимодействия с базой данных, а этот модуль использоать не обязательно."},"You can also read from database with resources system. You need to define resource of type \"Database\" and use it in any field.":{"ru":"Вы также можете читать из базы данных с помощью системы ресурсов. Для этого нужно определить ресурс типа \"База\" и использовать его в любом поле."},"You can also use simplified syntax for queries. For example, the result of queries <span style=\"color:black\">$.messages[*]<\/span> and <span style=\"color:black\">messages[*]<\/span> will be the same. The module itself will add the necessary characters at the beginning of the query string. This also applies to the search for any elements (not only root), i.e. for queries of the form <span style=\"color:black\">$..messages[*]<\/span> and <span style=\"color:black\">..messages[*]<\/span> will be the same too.":{"ru":"Вы также можете использовать упрощённый синтаксис для запросов. Например, результат запросов <span style=\"color:black\">$.messages[*]<\/span> и <span style=\"color:black\">messages[*]<\/span> будет одинаковым. Модуль сам добавит необходимые символы в начале строки запроса. Это также касается поиска любых элементов (не только корневого), т.е. для запросов вида <span style=\"color:black\">$..messages[*]<\/span> и <span style=\"color:black\">..messages[*]<\/span> результат также будет одинаковым."},"You can attach message when giving control to user in order to make him understand, what is a purpose of manual control and what he need to accomplish. Message can contain custom data like variables or resources.":{"ru":"Вы можете прикрепить сообщение при предоставлении пользователю контроля, чтобы он понял, какие действия ему нужно выполнить. Сообщение может содержать переменные или ресурсы."},"You can buy the product by the link - https:\/\/marketplace.biz\/section_3\/product_213234.php":{"ru":"Купить товар вы можете по ссылке - https:\/\/marketplace.biz\/section_3\/product_213234.php"},"You can calculate the checksum for the file using the \"File checksum\" action.":{"ru":"Рассчитать контрольную сумму для файла можно с помощью действия \"Контрольная сумма файла\"."},"You can calculate the checksum for the finished string using the \"String checksum\" action.":{"ru":"Рассчитать контрольную сумму для готовой строки можно с помощью действия \"Контрольная сумма строки\"."},"You can call any BAS action from node.js code, including working with browser. To do that, you need just copy and paste any action right into code editor.":{"ru":"Вы можете вызвать любое действие BAS из кода node.js, включая действия работающие с браузером. Для этого вам нужно просто скопировать и вставить нужное действие прямо в редактор кода."},"You can change link items using the \"Change URL\" action.":{"ru":"Изменить элементы ссылки можно с помощью действия \"Изменить URL\"."},"You can change proxy once and it will be applied to every action which works with email.":{"ru":"Вы можете изменить прокси один раз, и он будет применяться к каждому действию, которое работает с получением писем."},"You can choose move type by changing field \"Record move type\". It gives possibility to move or copy or make a reference of existing record.":{"ru":"Вы можете выбрать тип перемещения, изменив поле \"Тип перемещения записи\". Это дает возможность переместить или скопировать или сделать ссылку на существующую запись."},"You can choose which attachments will be saved by specifying the filename mask in the parameter below.":{"ru":"Вы можете выбрать, какие вложения будут сохранены, указав маску имени файла в параметр ниже."},"You can delete current profile if you run it with empty profile path. This will stop browser. After deleting current profile, new temporary profile will be used.":{"ru":"Вы можете удалить текущий профиль, если запустить это действие с пустой строкой. В этом случае браузер будет остановлен. После удаления текущего профиля, будет использован новый временный профиль."},"You can disable the key override by using the 'Disable overriding key' action. In this case, the original behavior will be restored, and the original key values from actions such as 'Get fingerprint' or 'Apply fingerprint' will be used.":{"ru":"Вы можете отключить переопределение ключа, используя действие 'Отключить переопределение ключа'. В этом случае будет восстановлено исходное поведение, при котором будут использованы оригинальные значения ключей из таких действий, как 'Получить отпечаток' или 'Применить отпечаток'."},"You can find more information and get test fingerprints on following page":{"ru":"Вы можете найти дополнительную информацию и получить тестовые отпечатки на следующей странице"},"You can generate a link from items using the \"Generate URL\" action.":{"ru":"Создать ссылку из элементов можно с помощью действия \"Создать URL\"."},"You can get a key there":{"ru":"Там можно получить ключ"},"You can get a list of links from a string using the \"Extract all links\" action from the \"String\" module.":{"ru":"Получить из строки список ссылок можно с помощью действия \"Извлечь все ссылки\" из модуля \"Строка\"."},"You can get a list of mailbox folders using the \"Get list of folders\" action.":{"ru":"Список папок почтового ящика можно получить с помощью действия \"Получить список папок\"."},"You can get a list of message ids using the \"Find id of multiple messages by criteria\" action.":{"ru":"Получить список id писем можно с помощью действия \"Найти id нескольких писем по критериям\"."},"You can get file extension using the \"Get file extension\" action.":{"ru":"Получить расширение файла можно с помощью действия \"Получить расширение файла\"."},"You can get full list of supported hashing algorithms using the \"Get list of algorithms\" action.":{"ru":"Получить полный список поддерживаемых алгоритмов хеширования можно с помощью действия \"Получите список алгоритмов\"."},"You can get message flags using the \"Get message flags by id\" action.":{"ru":"Получить флаги письма можно с помощью действия \"Получить флаги письма по id\"."},"You can get the path directory using the \"Get folder from path\" action.":{"ru":"Получить директорию пути можно с помощью действия \"Получить папку из пути\"."},"You can implement autologin with this action, first you need to specify some folder and do login with browser, then you may restart and specify same folder again. Browser will load all data from previous session and you don't need to login second time.":{"ru":"Вы можете реализовать автологин с помощью этого действием, сначала вам нужно задать папку профиля, затем залогиниться на сайте, после чего вы можете перезапустить БАС и снова указать ту же папку. Браузер загрузит все данные из предыдущего сеанса, и вам не нужно будет логиниться второй раз."},"You can learn more about URL in <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/en.wikipedia.org\/wiki\/URL');return false\">Wiki<\/a>.":{"ru":"Подробнее о URL можно узнать в <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/ru.wikipedia.org\/wiki\/URL');return false\">Wiki<\/a>."},"You can learn more about the URL normalization in <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/en.wikipedia.org\/wiki\/URI_normalization');return false\">Wiki<\/a>.":{"ru":"Подробнее о нормализации URL можно узнать в <a href=\"#\" onclick=\"BrowserAutomationStudio_OpenUrl('https:\/\/ru.wikipedia.org\/wiki\/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_URL');return false\">Wiki<\/a>."},"You can limit maximum number of simultaneously running threads with async functions by setting \"Maximum async tasks executed simultaneously\" parameter. If function will be started beyond the limit, it will be postponed and will be started immediately after some other async function will finish and the limit will not be exceeded. This is very powerful setting, it allows you to start as many threads as you want and let BAS balance thread number.":{"ru":"Вы можете ограничить максимальное количество одновременно работающих потоков с асинхронными функциями, установив параметр \"Максимальное количество асинхронных функций, выполняемых одновременно\". Если функция будет запущена свыше этого предела, она будет отложена до того момента, когда завершится какая-то другая функция и число потоков упадет ниже предела. Это очень мощная настройка, она позволяет запускать неограниченное число потоков, при этом BAS будет балансировать нагрузку самостоятельно."},"You can parse a link to items using the \"Parse URL\" action from the \"URL\" module.":{"ru":"Распарсить ссылку на элементы можно с помощью действия \"Парсить URL\" из модуля \"URL\"."},"You can parse a link to items using the \"Parse URL\" action.":{"ru":"Распарсить ссылку на элементы можно с помощью действия \"Парсить URL\"."},"You can parse a path into items using the \"Parse path\" action.":{"ru":"Распарсить путь на элементы можно с помощью действия \"Парсить путь\"."},"You can remove any extension by specifying <code>\"*\"<\/code> as the extension to remove.":{"ru":"Можно удалить любое расширение, если в качестве удаляемого расширения указать <code>\"*\"<\/code>."},"You can remove message flags using the \"Remove message flags by id\" action.":{"ru":"Удалить флаги письма можно с помощью действия \"Удалить флаги письма по id\"."},"You can reset all general settings using the \"<a href=\"#!\/IdleEmulationResetGeneralSettings\">Disable automatic idle emulation<\/a>\" action.":{"ru":"Вы можете сбросить все общие настройки с помощью действия \"<a href=\"#!\/IdleEmulationResetGeneralSettings\">Отключить автоматическую эмуляцию бездействия<\/a>\"."},"You can reset previously set values for individual parameters by specifying asterisk <code>*<\/code> as their value.":{"ru":"Вы можете сбросить установленные ранее значения для отдельных параметров, для этого нужно указать звездочку <code>*<\/code> в качестве их значения."},"You can select, if you want to delete group with or without data.":{"ru":"Вы можете выбрать, хотите ли вы удалить группу с данными или без них."},"You can set message flags using the \"Set message flags by id\" action.":{"ru":"Установить флаги письма можно с помощью действия \"Установить флаги письма по id\"."},"You can specify several masks by separating them with the character <code>;<\/code>, the filtering results of all specified masks will be combined.":{"ru":"Можно указать несколько масок, разделив их при помощи символа <code>;<\/code>, результаты фильтрации всех указанных масок будут объединены."},"You can specify your value for the operator, site and country in the corresponding parameters located in the additional settings. Please note that these values must be specified in the form in which the service perceives them, they will be sent as you specified them.":{"ru":"Вы можете указать свое значение для оператора, сайта и страны в соответствующие параметры находящиеся в дополнительных настройках. Учтите, что эти значения должны быть указаны в том виде в котором их воспринимает сервис, они будут отправлены так как вы их указали."},"You can use THREAD_IS_RUNNING to wait for function result, but it is much easier to use 'Wait for async function completion' action.":{"ru":"Вы можете использовать переменную THREAD_IS_RUNNING для ожидания результата функции, но гораздо проще использовать действие \"Ждать завершение асинхронной функции\"."},"You can use any data types for values - lists, strings, numbers, and so on. However, it is recommended to use strings or numbers for keys - in any case, keys will always be converted to a string.":{"ru":"Вы можете использовать любые типы данных для значений - списки, строки, числа и так далее. Однако для ключей рекомендуется использовать строки или числа - в любом случае ключи всегда будет преобразовываться в строку."},"You can use simple parameter names to get the value you need. For example, having the line from the previous example, you can specify a query of the form <span style=\"color:black\">age<\/span> as a path and get the value of this property - <span style=\"color:black\">100<\/span>.":{"ru":"Вы можете использовать простые названия параметров, чтобы получить необходимое значение. Например, имея строку из предыдущего примера вы можете указать в качестве пути запрос вида <span style=\"color:black\">age<\/span> и получить значение этого свойства - <span style=\"color:black\">100<\/span>."},"You can use simple paths, as if you yourself modify or delete a value in the code. For example, we have a line like <span style=\"color:black\">{\"name\":\"John\", \"data\":{\"score\": 10, \"tries\": 5}}<\/span> and want to change the value of <span style=\"color:black\">data.score<\/span>. To do this, we indicate as a query a string like <span style=\"color:black\">$.data.score<\/span> or <span style=\"color:black\">data.score<\/span> and as a value a number, for example, 40. As a result, we get a string like <span style=\"color:black\">{\"name\":\"John\", \"data\":{\"score\": 40, \"tries\": 5}}<\/span>. This will also work with arrays. For example, if you have an array <span style=\"color:black\">array<\/span> and want to change the first element, use a query like <span style=\"color:black\">$.array[0]<\/span>.":{"ru":"Вы можете использовать простые запросы, как будто вы сами изменяете или удаляете значения в коде. Например, у нас есть строка вида <span style=\"color:black\">{\"name\":\"John\", \"data\":{\"score\": 10, \"tries\": 5}}<\/span> и мы хотим изменить значение у <span style=\"color:black\">data.score<\/span>. Чтобы сделать это, в качестве запроса возьмём строку вида <span style=\"color:black\">$.data.score<\/span> или <span style=\"color:black\">data.score<\/span> и в качестве значения число, например, 40. В результате мы получим строку вида <span style=\"color:black\">{\"name\":\"John\", \"data\":{\"score\": 40, \"tries\": 5}}<\/span>. Это также работает с массивами. Например, если вы имеете массив <span style=\"color:black\">array<\/span> и хотите изменить первый элемент, используйте запрос вида <span style=\"color:black\">$.array[0]<\/span>."},"You can use simple paths, as if you yourself modify or delete a value in the code. For example, we have a line like <span style=\"color:black\">{\"name\":\"John\", \"data\":{\"score\": 10, \"tries\": 5}}<\/span> and want to remove the value of <span style=\"color:black\">data.score<\/span>. To do this, we indicate as a query a string like <span style=\"color:black\">$.data.score<\/span> or <span style=\"color:black\">data.score<\/span>. As a result, we get a string like <span style=\"color:black\">{\"name\":\"John\", \"data\":{\"tries\": 5}}<\/span>. This will also work with arrays. For example, if you have an array <span style=\"color:black\">array<\/span> and want to remove the first element, use a query like <span style=\"color:black\">$.array[0]<\/span>.":{"ru":"Вы можете использовать простые запросы, как будто вы сами изменяете или удаляете значения в коде. Например, у нас есть строка вида <span style=\"color:black\">{\"name\":\"John\", \"data\":{\"score\": 10, \"tries\": 5}}<\/span> и мы хотим удалить значение <span style=\"color:black\">data.score<\/span>. Чтобы сделать это, в качестве запроса возьмём строку вида <span style=\"color:black\">$.data.score<\/span> или <span style=\"color:black\">data.score<\/span>. В результате мы получим строку вида <span style=\"color:black\">{\"name\":\"John\", \"data\":{\"tries\": 5}}<\/span>. Это также работает с массивами. Например, если вы имеете массив <span style=\"color:black\">array<\/span> и хотите удалить первый элемент, используйте запрос вида <span style=\"color:black\">$.array[0]<\/span>."},"You can use the <a href=\"#!\/JsonChangeValue\">Change value<\/a> action to add new properties to the object - just specify the query that leads to the desired key. For example, if we have an object of the form <span style=\"color:black\">{\"name\":\"John\"}<\/span>, we can add a property <span style=\"color:black\">age<\/span> with the value <span style=\"color:black\">25<\/span> using the <span style=\"color:black\">$.age<\/span> query.":{"ru":"Вы можете использовать действие <a href=\"#!\/JsonChangeValue\">Изменить значение<\/a> для добавления новых значений в объект - достаточно указать путь, который ведет к нужному ключу. Например, если у нас есть объект вида <span style=\"color:black\">{\"name\":\"John\"}<\/span>, мы можем добавить свойство <span style=\"color:black\">age<\/span> со значением <span style=\"color:black\">25<\/span> , используя запрос <span style=\"color:black\">$.age<\/span>."},"You can wait for one or several asynchronous functions to finish by using \"Wait for async function completion\" action.":{"ru":"Вы можете дождаться завершения одной или нескольких асинхронных функций, используя действие \"Ждать завершение асинхронной функции\"."},"You cannot create a folder with the name INBOX or with the same name as an existing folder.":{"ru":"Нельзя создать папку с именем INBOX или с тем же именем, что и у существующей папки."},"You cannot delete a folder with the name INBOX.":{"ru":"Нельзя удалить папку с именем INBOX."},"You could think of regexp as some kind of mask or template, which string must match. Literally regular expression could say: 'Search in a text to find a word character sequence followed by @ symbol followed by any word character or dot character.', in regular expression language it would be \\w+@[a-zA-Z\\.]+ and it is very simple regexp to search for mailbox in text.":{"ru":"Вы можете представить регулярное выражение как какую-либо маску или шаблон, которой заданная строка должна соответствовать. Пример работы регулярного выражения можно описать таким образом: 'Найти в тексте последовательность букв, за которой следует символ @, за которым следует любая последовательность букв, либо точка'. Преобразуя это описание в регулярное выражени получим \\w+@[a-zA-Z\\.]+ это простое выражение для поиска почты в заданном тексте."},"You could think of regexp as some kind of mask or template, which string must match. Literally regular expression could say: 'Search in a text to find a word character sequence followed by @ symbol followed by any word character or dot character.', in regular expression language it would be \\w+@[a-zA-Z\\.]+ and it is very simple regexp to search for mailbox.":{"ru":"Вы можете представить регулярное выражение как какую-либо маску или шаблон, которой заданная строка должна соответствовать. Пример работы регулярного выражения можно описать таким образом: 'Найти в тексте последовательность букв, за которой следует символ @, за которым следует любая последовательность букв, либо точка'. Преобразуя это описание в регулярное выражени получим \\w+@[a-zA-Z\\.]+ это простое выражение для поиска почты в заданном тексте."},"You don't need to close connection explicitly, it will be closed automatically after timeout or when the script will stop.":{"ru":"Вам не нужно специально закрывать соединение, оно будет закрыто автоматически по истечении таймаута или при остановке скрипта."},"You may use groups \\1, \\2 ... inside Replace with param.":{"ru":"Вы можете использовать номера групп \\1, \\2 ... внутри параметра Заменить на."},"Zambia":{"ru":"Замбия"},"Zimbabwe":{"ru":"Зимбабве"},"[\"Just sample text.\", \"Test text, string\"]":{"ru":"[\"Просто пример текста.\", \"Тестовый текст, строка\"]"},"[\"Just\", \"sample\", \"text\"]":{"ru":"[\"Просто\", \"пример\", \"текста\"]"},"_LABEL_Append":{"en":"Append","ru":"Дописывать"},"_LABEL_Delay":{"en":"Delay","ru":"Задержка"},"_LABEL_IsError":{"en":"Is error","ru":"Ошибка"},"_LABEL_IsRunning":{"en":"Is running","ru":"Работает"},"_LABEL_IsSuccess":{"en":"Is success","ru":"Успешно"},"a1, a2, a3 or nothing":{"ru":"a1, a2, a3 или пустая строка"},"account":{"ru":"аккаунт"},"accounts":{"ru":"аккаунта"},"action to start using profile or to load another profile":{"ru":"чтобы начать пользоваться профилем или сменить его"},"add data to file":{"ru":"добавлять данные в файл"},"allow insecure applications":{"ru":"разрешить доступ небезопасным приложениям"},"and":{"ru":"и"},"and \"Remove trailing slashes\" activated":{"ru":"и  \"Удалите завершающие слэши\" активирован"},"and capture string":{"ru":"и получить строку"},"and regexp is":{"ru":"и регулярное выражение"},"and replacement string is":{"ru":", а параметр 'Заменить на' равен"},"and start other executables.":{"ru":"и запускаться другие исполняемые файлы."},"as a list, you can use a string consisting of id, separated by commas.":{"ru":"в качестве списка можно использовать строку, состоящую из id, разделенных запятыми."},"at 10":{"ru":"при 10"},"at 21":{"ru":"при 21"},"at 22":{"ru":"при 22"},"bit":{"ru":"бит"},"bit hashing algorithm":{"ru":"битный алгоритм хеширования"},"buy a key":{"ru":"купить ключ"},"can help you to create regexp.":{"ru":"может помочь вам создать регулярное выражение."},"example 1":{"ru":"пример 1"},"example 2":{"ru":"пример 2"},"failed to parse ip":{"ru":"Не удалось получить сведения об ip"},"files":{"ru":"файлов"},"first \"From\" address":{"ru":"первый \"From\" адрес"},"first \"To\" address":{"ru":"первый \"To\" адрес"},"following api":{"ru":"данное апи"},"for gmail":{"ru":"для gmail"},"for more info.":{"ru":"чтобы узнать больше"},"for this, instead of one id, a list of id must be specified":{"ru":"для этого вместо одного id должен буть указан список id"},"from server and save":{"ru":"письма с сервера и сохранить"},"https:\/\/wiki.bablosoft.com\/doku.php?id=fingerprintbusiness":{"ru":"https:\/\/wiki.bablosoft.com\/doku.php?id=ru:fingerprintbusiness"},"if the query is":{"ru":"если указан запрос"},"in order to work with BAS":{"ru":"для работы с BAS"},"just sample text":{"ru":"просто пример текста"},"link":{"ru":"ссылку"},"list of timezone names can be found":{"ru":"список названий можно найти"},"manual":{"ru":"справка"},"minute":{"ru":"минута"},"minutes":{"ru":"минуты"},"minutеs":{"ru":"минут"},"profile id example":{"ru":"пример id профиля"},"raw - this means that the body of the message will be retrieved in its raw form, without any processing.":{"ru":"raw - это означает, что тело письма будет получено в сыром виде, без какой либо обработки."},"resource selection":{"ru":"выбор ресурсов"},"sample":{"ru":"пример"},"sample text":{"ru":"пример текста"},"service, in order to use that service, you need to ":{"ru":", чтобы его использовать вам необходимо"},"sort alphabetically":{"ru":"сортировка по алфавиту"},"strings":{"ru":"строк"},"text\/html is the MIME type of data represented in html format, html is the markup language for web pages.":{"ru":"text\/html - это MIME тип данных представленных в html формате, html является языком разметки веб-страниц."},"text\/plain is a MIME type that is the base type for text files.":{"ru":"text\/plain - это MIME тип, являющийся базовым для текстовых файлов."},"than result will contain all words [\"word1\", \"word2\", \"word3\", \"word4\"]":{"ru":"тогда результат будет содержать список со всеми словами [\"word1\", \"word2\", \"word3\", \"word4\"]"},"than result will contain list with 2 names":{"ru":"тогда результат будет содержать 2 имени"},"than result will contain list with 2 numbers":{"ru":"тогда результат будет содержать 2 числа"},"than variable":{"ru":"тогда переменная"},"that the searched message should contain":{"ru":"которую должно содержать искомое письмо"},"that the searched message should not contain":{"ru":"которую не должно содержать искомое письмо"},"then it will extract all numbers found in a text, and resulting list will be":{"ru":"то регулярное выражение будет извлекать все числа, найденные в тексте, и в результате список будет"},"then result will be":{"ru":"то результат будет"},"then this action will return true, because string contains lowercase character, but regexp ":{"ru":"то это действие вернет true, потому что строка содержит буквы в нижнем регистре, но регулярное выражение"},"this":{"ru":"так"},"tutorial":{"ru":"руководство"},"using the two parameters below, you can make filter by the contents of this field.":{"ru":"используя два параметра ниже, можно произвести фильтрацию по содержимому этого поля."},"video":{"ru":"видео"},"will always be the same, and if the data is the slightest difference, the checksum will be different.":{"ru":"всегда будет одинаковой, а если в данных есть малейшее различие, контрольная сумма будет другой."},"will be changed to":{"ru":"будет изменена до"},"will be equal to":{"ru":"будет равна"},"will be normalized to":{"ru":"будет нормализована до"},"will return false, because string doesn't contain any uppercase character":{"ru":"вернет false, потому что строка не содержит символов в верхнем регистре"},"windows utilities":{"ru":"утилиты windows"},"with extendable result":{"ru":"с удлиняемым результатом"},"write only mode":{"ru":"режим 'только запись'"},"year":{"ru":"год"},"years":{"ru":"года"},"yeаrs":{"ru":"лет"},"you can use following regular expression":{"ru":"вы можете использовать следующее регулярное выражение"},"аccounts":{"ru":"аккаунтов"}}); </script>
  <script type="text/javascript"> _A = $.extend(_A,{"AddElement":{"description":"Добавить Элемент","name":"Добавить Элемент","suggestion":{"en":"","ru":""},"template":"{{Value}} -> {{Variable}}"},"ArrayToResource":{"description":"Список В Ресурс","name":"Список В Ресурс","suggestion":{"en":"","ru":""},"template":"{{Variable}} -> {{ResourceName}}"},"BACKPACK_AddNetworks":{"description":"AddNetworks","name":"AddNetworks","suggestion":{"en":"","ru":""},"template":""},"BACKPACK_Approve":{"description":"Approve","name":"Approve","suggestion":{"en":"","ru":""},"template":""},"BACKPACK_ImportWalletToBACKPACK":{"description":"ImportWalletToBACKPACK","name":"ImportWalletToBACKPACK","suggestion":{"en":"","ru":""},"template":""},"BACKPACK_UnlockPassword":{"description":"UnlockPassword","name":"UnlockPassword","suggestion":{"en":"","ru":""},"template":""},"Checksum_File":{"description":"Контрольная сумма файла","name":"Контрольная сумма файла","suggestion":{"en":"","ru":""},"template":"<prop name='filePath' \/>, <prop name='algorithm' label='Algorithm' show_label='always'\/>, <prop name='outputEncoding' priority='50' hide_if_default='true' label='Format' show_label='always'\/>, <prop name='outputLength' priority='90' hide_if_default='true' label='Shake length' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"Checksum_GetAlgorithmsList":{"description":"Получить список алгоритмов","name":"Получить список алгоритмов","suggestion":{"en":"","ru":""},"template":"<prop name='Save' is_variable='true' \/>"},"Checksum_String":{"description":"Контрольная сумма строки","name":"Контрольная сумма строки","suggestion":{"en":"","ru":""},"template":"<prop name='input' \/>, <prop name='algorithm' label='Algorithm' show_label='always'\/>, <prop name='Check' priority='40' hide_if_default='true' label='Base64' show_label='always'\/>, <prop name='outputEncoding' priority='50' hide_if_default='true' label='Format' show_label='always'\/>, <prop name='outputLength' priority='90' hide_if_default='true' label='Shake length' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"CopyList":{"description":"Копировать Список","name":"Копировать Список","suggestion":{"en":"","ru":""},"template":"{{Variable}} -> {{VariableNewList}}"},"CreateList":{"description":"Создать Список","name":"Создать Список","suggestion":{"en":"","ru":""},"template":"<prop name='Value1' priority='30' hide_if_default='true' show_label='never'\/>, <prop name='Value2' priority='31' hide_if_default='true' show_label='never'\/>, <prop name='Value3' priority='32' hide_if_default='true' show_label='never'\/> -> <prop name='Variable' is_variable='true' \/>"},"CreateResource":{"description":"Создать Ресурс","name":"Создать Ресурс","suggestion":{"en":"","ru":""},"template":"<prop name='Name'\/>, <prop name='SuccessNumber' priority='30' hide_if_default='true' label='Successes' show_label='always'\/>, <prop name='FailNumber' priority='31' hide_if_default='true' label='Fails' show_label='always'\/>, <prop name='SimultaneousUsage' priority='32' hide_if_default='true' label='Simultaneous' show_label='always'\/>, <prop name='Interval' priority='40' hide_if_default='true' label='Interval' show_label='always'\/>, <prop name='Check' priority='50' hide_if_default='true' label='Greedy' show_label='always'\/>, <prop name='Check2' priority='51' hide_if_default='true' label='Wait' show_label='always'\/>"},"Database_ChangeGroup":{"description":"Изменить Группу","name":"Изменить Группу","suggestion":{"en":"","ru":""},"template":"<prop name='GroupId' \/>"},"Database_CopyGroup":{"description":"Копировать Группу","name":"Копировать Группу","suggestion":{"en":"","ru":""},"template":"<prop name='GroupId' \/> -> <prop name='DuplicatedGroupId' \/>"},"Database_CountRecords":{"description":"Количество Записей","name":"Количество Записей","suggestion":{"en":"","ru":""},"template":"<prop name='RecordsCount' is_variable='true' \/>"},"Database_CreateGroup":{"description":"Создать Группу","name":"Создать Группу","suggestion":{"en":"","ru":""},"template":"<prop name='Name' \/>"},"Database_DeleteGroup":{"description":"Удалить Группу","name":"Удалить Группу","suggestion":{"en":"","ru":""},"template":"<prop name='GroupId' \/>"},"Database_DeleteOneRecord":{"description":"Удалить Одну Запись","name":"Удалить Одну Запись","suggestion":{"en":"","ru":""},"template":""},"Database_DeleteRecords":{"description":"Удалить Записи По Критерию","name":"Удалить Записи По Критерию","suggestion":{"en":"","ru":""},"template":""},"Database_GetGroupList":{"description":"Получить Список Групп","name":"Получить Список Групп","suggestion":{"en":"","ru":""},"template":"<prop name='GroupList' is_variable='true' \/>"},"Database_InsertRecord":{"description":"Вставить Запись","name":"Вставить Запись","suggestion":{"en":"","ru":""},"template":""},"Database_MoveRecordToGroup":{"description":"Переместить Запись В Группу","name":"Переместить Запись В Группу","suggestion":{"en":"","ru":""},"template":"<prop name='RecordId' \/> -> <prop name='GroupId' \/>"},"Database_SelectOne":{"description":"Получить Одну Запись","name":"Получить Одну Запись","suggestion":{"en":"","ru":""},"template":"<prop name='RecordId' \/> -> <prop name='RecordString' \/>"},"Database_SelectRecords":{"description":"Получить Записи По Критерию","name":"Получить Записи По Критерию","suggestion":{"en":"","ru":""},"template":"<prop name='RecordList' is_variable='true' \/>"},"Database_UpdateRecord":{"description":"Изменить Одну Запись","name":"Изменить Одну Запись","suggestion":{"en":"","ru":""},"template":"<prop name='RecordId' \/>"},"Database_UpdateRecordsByCriteria":{"description":"Изменить Записи По Критерию","name":"Изменить Записи По Критерию","suggestion":{"en":"","ru":""},"template":"<prop name='RecordId' \/>"},"DeleteByIndex":{"description":"Удалить По Индексу","name":"Удалить По Индексу","suggestion":{"en":"","ru":""},"template":"<prop name='Variable' is_variable='true' \/>, <prop name='Value' priority='30' label='Index' show_label='always'\/>"},"DeleteByValue":{"description":"Удалить По Значению","name":"Удалить По Значению","suggestion":{"en":"","ru":""},"template":"<prop name='Variable' is_variable='true' \/>, <prop name='Value' priority='30' label='Value' show_label='always'\/>"},"DeleteCurrentElement":{"description":"Удалить Текущий Элемент","name":"Удалить Текущий Элемент","suggestion":{"en":"","ru":""},"template":"<prop name='ResourceName'\/>, <prop name='Check' priority='50' hide_if_default='true' label='Instantly' show_label='always'\/>"},"EmbeddedLanguagesNodeJs":{"description":"Node.js","name":"Node.js","suggestion":{"en":"run javascript, execute javascript, execute code, run code, external library","ru":"выполнить javascript, вызвать javascript, вызвать джаваскрипт, выполнить яваскрипт, подключить внешнюю библиотеку"},"template":"{{CodeInfo}}"},"ExecuteProcess":{"description":"Запустить Процесс","name":"Запустить Процесс","suggestion":{"en":"execute batch file, execute command, run command","ru":"выполнить батч файл, выполнить команду, вызвать команду"},"template":"<prop name='Command'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='SaveError' priority='30' is_variable='true' show_label='always' hide_if_default='true' label='Error' \/>, <prop name='WorkingFolder' priority='40' hide_if_default='true' label='Folder' show_label='always'\/>, <prop name='Check' priority='45' hide_if_default='true' label='Wait' show_label='always'\/>"},"FingerprintSwitcher_Apply":{"description":"Применить отпечаток","name":"Применить отпечаток","suggestion":{"en":"change canvas fingerprint, antibot protection, browser authenticity","ru":"вебгл, смена отпечатка канвас, антибот, антибот защита, аутентичность браузера"},"template":"<prop name='Fingerprint'\/>, <prop name='Key' priority='20' hide_if_default='true' label='Key' show_label='always' max_size='9'\/>, <prop name='PerfectCanvas' priority='30' hide_if_default='true' label='PerfectCanvas' show_label='always'\/>, <prop name='CanvasNoise' priority='31' hide_if_default='true' label='Canvas noice' show_label='always'\/>, <prop name='WebglNoise' priority='32' hide_if_default='true' label='Webgl noice' show_label='always'\/>, <prop name='AudioNoise' priority='33' hide_if_default='true' label='Audio noice' show_label='always'\/>, <prop name='SafeBattery' priority='34' hide_if_default='true' label='Battery' show_label='always'\/>, <prop name='FontData' priority='35' hide_if_default='true' label='Fonts' show_label='always'\/>, <prop name='SafeRectangles' priority='36' hide_if_default='true' label='ClientRect' show_label='always'\/>, <prop name='EmulateSensor' priority='37' hide_if_default='true' label='Sensors' show_label='always'\/>, <prop name='EmulateDeviceScaleFactor' priority='38' hide_if_default='true' label='Scale' show_label='always'\/>"},"FingerprintSwitcher_DisableOverride":{"description":"Отменить переопределение ключа","name":"Отменить переопределение ключа","suggestion":{"en":"","ru":""},"template":""},"FingerprintSwitcher_Get":{"description":"Получить отпечаток","name":"Получить отпечаток","suggestion":{"en":"change canvas fingerprint, antibot protection, browser authenticity","ru":"вебгл, смена отпечатка канвас, антибот, антибот защита, аутентичность браузера"},"template":"<prop name='Tags'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='Key' priority='20' hide_if_default='true' label='Key' show_label='always' max_size='9'\/>, <prop name='PerfectCanvasRequest' priority='30' hide_if_default='true' label='PerfectCanvas' show_label='always' max_size='9'\/>, <prop name='PerfectCanvasDebug' priority='60' hide_if_default='true' label='Logs' show_label='always'\/>, <prop name='EnablePrecomputedFingerprints' priority='70' hide_if_default='true' label='Precomputed' show_label='always'\/>, <prop name='AddedDate' priority='50' hide_if_default='true' label='Date' show_label='always'\/>, <prop name='BrowserVersion' priority='51' hide_if_default='true' label='Min version' show_label='always'\/>, <prop name='MaxBrowserVersion' priority='52' hide_if_default='true' label='Max version' show_label='always'\/>, <prop name='MinimumWidth' priority='53' hide_if_default='true' label='Min width' show_label='always'\/>, <prop name='MinimumHeight' priority='54' hide_if_default='true' label='Min height' show_label='always'\/>, <prop name='MaximumWidth' priority='55' hide_if_default='true' label='Max width' show_label='always'\/>, <prop name='MaximumHeight' priority='56' hide_if_default='true' label='Max height' show_label='always'\/>, <prop name='SuppressWarnings' priority='80' hide_if_default='true' label='Disable warnings' show_label='always'\/>, <prop name='EnableCustomServers' priority='40' hide_if_default='true' label='CustomServers' show_label='always'\/>, <prop name='DynamicPerfectCanvas' priority='41' hide_if_default='true' label='Realtime' show_label='always'\/>"},"FingerprintSwitcher_Override":{"description":"Переопределить ключ","name":"Переопределить ключ","suggestion":{"en":"","ru":""},"template":"{{Key}}"},"FingerprintSwitcher_Performance":{"description":"Отпечаток производительности","name":"Отпечаток производительности","suggestion":{"en":"antibot protection, browser authenticity","ru":"антибот, антибот защита, аутентичность браузера"},"template":"<prop name='TimeDeformationFrom'\/> - <prop name='TimeDeformationTo'\/>, <prop name='MaxMeasurementTime' priority='50' hide_if_default='true' label='Time' show_label='always'\/>, <prop name='DisablePerformancePrecision' priority='60' hide_if_default='true' label='Disable precision' show_label='always'\/>"},"FirstListElement":{"description":"Первый Элемент","name":"Первый Элемент","suggestion":{"en":"","ru":""},"template":"<prop name='Variable'\/>, <prop name='Check' priority='40' hide_if_default='true' label='Remove' show_label='always'\/> -> <prop name='VariableResult' is_variable='true' \/>"},"GetCurrentProfile":{"description":"Получить информацию о текущем профилe","name":"Получить информацию о текущем профилe","suggestion":{"en":"set profile, save cookies, save local storage, autologin","ru":"путь к профилю, сохранить куки, сохранить local storage, автовход"},"template":"<prop name='Save' is_variable='true'\/>, <prop name='Save2' is_variable='true' label='Proxy' priority='50' show_label='always' hide_if_default='true'\/>, <prop name='Save3' is_variable='true' label='Fingerprint' priority='50' show_label='always' hide_if_default='true'\/>"},"GetElementByIndex":{"description":"Получить Элемент","name":"Получить Элемент","suggestion":{"en":"","ru":""},"template":"<prop name='Variable'\/>, <prop name='Index' priority='30' label='Index' show_label='always'\/>, <prop name='Check' priority='40' hide_if_default='true' label='Remove' show_label='always'\/> -> <prop name='VariableResult' is_variable='true' \/>"},"GetElementIndex":{"description":"Получить Индекс","name":"Получить Индекс","suggestion":{"en":"","ru":""},"template":"<prop name='Variable'\/>, <prop name='Value' priority='30' label='Value' show_label='always'\/> -> <prop name='VariableSave' is_variable='true' \/>"},"GetResouceLocation":{"description":"Расположение Ресурса","name":"Расположение Ресурса","suggestion":{"en":"","ru":""},"template":"{{ResourceName}} -> {{Save}}"},"IdleEmulation":{"description":"Начать эмуляцию бездействия (устаревшее)","name":"Начать эмуляцию бездействия (устаревшее)","suggestion":{"en":"move mouse and scroll randomly","ru":"перемещать мышь и скролить страницу"},"template":"<prop name='IddleTime' label='Time' show_label='always'\/>, <prop name='Distribution' label='Distribution' show_label='always'\/>"},"IdleEmulationNew":{"description":"Начать эмуляцию бездействия","name":"Начать эмуляцию бездействия","suggestion":{"en":"move mouse and scroll randomly","ru":"перемещать мышь и скролить страницу"},"template":"<prop name='time' label='Time' show_label='always'\/>, <prop name='accuracy' label='Accuracy' show_label='always'\/>, <prop name='intensity' label='Intensity' show_label='always'\/>, <prop name='sleep' priority='40' hide_if_default='true' label='Sleep' show_label='always'\/>, <prop name='longElementMove' priority='41' hide_if_default='true' label='Long move' show_label='always'\/>, <prop name='shortElementMove' priority='42' hide_if_default='true' label='Short move' show_label='always'\/>, <prop name='scroll' priority='43' hide_if_default='true' label='Scroll' show_label='always'\/>, <prop name='randomMove' priority='44' hide_if_default='true' label='Random move' show_label='always'\/>, <prop name='microMove' priority='45' hide_if_default='true' label='Micro move' show_label='always'\/>, <prop name='goingBeyond' priority='46' hide_if_default='true' label='Beyond' show_label='always'\/>, <prop name='moveAlongText' priority='47' hide_if_default='true' label='Follow text' show_label='always'\/>, <prop name='longMax' priority='50' hide_if_default='true' label='Long move' show_label='always'\/>, <prop name='shortMax' priority='51' hide_if_default='true' label='Short move' show_label='always'\/>, <prop name='miss' priority='52' hide_if_default='true' label='Miss' show_label='always'\/>, <prop name='delay' priority='53' hide_if_default='true' label='_LABEL_Delay' show_label='always'\/>, <prop name='filters' priority='54' hide_if_default='true' label='Filters' show_label='always'\/>, <prop name='hoverMode' priority='55' hide_if_default='true' label='Position' show_label='always'\/>, <prop name='maxRepeatSkip' priority='56' hide_if_default='true' label='Re-hovering' show_label='always'\/>, <prop name='overlapByPoints' priority='57' hide_if_default='true' label='Overlap' show_label='always'\/>, <prop name='reverseScroll' priority='58' hide_if_default='true' label='Reverse' show_label='always'\/>"},"IdleEmulationResetGeneralSettings":{"description":"Отключить автоматическую эмуляцию бездействия","name":"Отключить автоматическую эмуляцию бездействия","suggestion":{"en":"","ru":""},"template":""},"IdleEmulationSetDebug":{"description":"Отладка","name":"Отладка","suggestion":{"en":"","ru":""},"template":"{{enable}}"},"IdleEmulationSetGeneralSettings":{"description":"Включить автоматическую эмуляцию бездействия","name":"Включить автоматическую эмуляцию бездействия","suggestion":{"en":"","ru":""},"template":"<prop name='time' label='Time' show_label='always'\/>, <prop name='accuracy' label='Accuracy' show_label='always'\/>, <prop name='intensity' label='Intensity' show_label='always'\/>, <prop name='sleep' priority='40' hide_if_default='true' label='Sleep' show_label='always'\/>, <prop name='longElementMove' priority='41' hide_if_default='true' label='Long move' show_label='always'\/>, <prop name='shortElementMove' priority='42' hide_if_default='true' label='Short move' show_label='always'\/>, <prop name='scroll' priority='43' hide_if_default='true' label='Scroll' show_label='always'\/>, <prop name='randomMove' priority='44' hide_if_default='true' label='Random move' show_label='always'\/>, <prop name='microMove' priority='45' hide_if_default='true' label='Micro move' show_label='always'\/>, <prop name='goingBeyond' priority='46' hide_if_default='true' label='Beyond' show_label='always'\/>, <prop name='moveAlongText' priority='47' hide_if_default='true' label='Follow text' show_label='always'\/>, <prop name='longMax' priority='50' hide_if_default='true' label='Long move' show_label='always'\/>, <prop name='shortMax' priority='51' hide_if_default='true' label='Short move' show_label='always'\/>, <prop name='miss' priority='52' hide_if_default='true' label='Miss' show_label='always'\/>, <prop name='delay' priority='53' hide_if_default='true' label='_LABEL_Delay' show_label='always'\/>, <prop name='filters' priority='54' hide_if_default='true' label='Filters' show_label='always'\/>, <prop name='hoverMode' priority='55' hide_if_default='true' label='Position' show_label='always'\/>, <prop name='maxRepeatSkip' priority='56' hide_if_default='true' label='Re-hovering' show_label='always'\/>, <prop name='overlapByPoints' priority='57' hide_if_default='true' label='Overlap' show_label='always'\/>, <prop name='reverseScroll' priority='58' hide_if_default='true' label='Reverse' show_label='always'\/>, <prop name='targetScroll' priority='59' hide_if_default='true' label='Scroll target' show_label='always'\/>, <prop name='targetDelay' priority='60' hide_if_default='true' label='Delay click' show_label='always'\/>, <prop name='additionalEmulation' priority='61' hide_if_default='true' label='Additional' show_label='always'\/>"},"InMail_AddBox":{"description":"Создать новую папку","name":"Создать новую папку","suggestion":{"en":"","ru":""},"template":"<prop name='name' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_Close":{"description":"Закрыть почту","name":"Закрыть почту","suggestion":{"en":"","ru":""},"template":""},"InMail_Configure":{"description":"Настроить получение почты","name":"Настроить получение почты","suggestion":{"en":"","ru":""},"template":"<prop name='username' label='Login' show_label='always'\/>, <prop name='password' label='Pass' hide_if_default='true' show_label='always' max_size='6' \/>, <prop name='protocol' priority='30' hide_if_default='true' label='Protocol' show_label='always'\/>, <prop name='autoConfig' priority='40' hide_if_default='true' label='Auto' show_label='always'\/>, <prop name='host' priority='45' hide_if_default='true' label='Server' show_label='always'\/>, <prop name='port' priority='50' hide_if_default='true' label='Port' show_label='always'\/>, <prop name='encrypt' priority='60' hide_if_default='true' label='Encryption' show_label='always'\/>, <prop name='box' priority='65' hide_if_default='true' label='Folder' show_label='always'\/>, <prop name='connectTimeout' priority='66' hide_if_default='true' label='Connect timeout' show_label='always'\/>, <prop name='resetTimeout' priority='67' hide_if_default='true' label='Reset timeout' show_label='always'\/>"},"InMail_CopyMessages":{"description":"Копировать письмо по id","name":"Копировать письмо по id","suggestion":{"en":"","ru":""},"template":"<prop name='uids' \/> -> <prop name='toBox' \/>, <prop name='box' priority='75' label='Folder' show_label='always' hide_if_default='true' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_Count":{"description":"Получить количество писем по критериям","name":"Получить количество писем по критериям","suggestion":{"en":"","ru":""},"template":"<prop name='from' priority='10' label='From contains' hide_if_default='true' show_label='always'\/>, <prop name='notFrom' priority='10' label='From not contains' hide_if_default='true' show_label='always'\/>, <prop name='to' priority='11' label='To contains' hide_if_default='true' show_label='always'\/>, <prop name='notTo' priority='11' label='To not contains' hide_if_default='true' show_label='always'\/>, <prop name='subject' priority='12' label='Subject contains' hide_if_default='true' show_label='always'\/>, <prop name='notSubject' priority='12' label='Subject not contains' hide_if_default='true' show_label='always'\/>, <prop name='text' priority='13' label='Body contains' hide_if_default='true' show_label='always'\/>, <prop name='notText' priority='13' label='Body not contains' hide_if_default='true' show_label='always'\/>, <prop name='flags' priority='14' label='Flags contains' hide_if_default='true' show_label='always'\/>, <prop name='notFlags' priority='14' label='Flags not contains' hide_if_default='true' show_label='always'\/>, <prop name='since' priority='15' label='Date from' hide_if_default='true' show_label='always'\/>, <prop name='before' priority='15' label='Date to' hide_if_default='true' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>, <prop name='box' priority='75' label='Folder' show_label='always' hide_if_default='true' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_DelBox":{"description":"Удалить папку","name":"Удалить папку","suggestion":{"en":"","ru":""},"template":"<prop name='name' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_DelFlags":{"description":"Удалить флаги письма по id","name":"Удалить флаги письма по id","suggestion":{"en":"","ru":""},"template":"<prop name='uids' \/> -> <prop name='flags' \/>, <prop name='box' priority='75' label='Folder' show_label='always' hide_if_default='true' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_DelMessages":{"description":"Удалить письмо по id","name":"Удалить письмо по id","suggestion":{"en":"","ru":""},"template":"<prop name='uids' \/>, <prop name='box' priority='75' label='Folder' show_label='always' hide_if_default='true' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_FindMessage":{"description":"Получить содержимое одного письма по критериям","name":"Получить содержимое одного письма по критериям","suggestion":{"en":"","ru":""},"template":"<prop name='from' priority='10' label='From contains' hide_if_default='true' show_label='always'\/>, <prop name='notFrom' priority='10' label='From not contains' hide_if_default='true' show_label='always'\/>, <prop name='to' priority='11' label='To contains' hide_if_default='true' show_label='always'\/>, <prop name='notTo' priority='11' label='To not contains' hide_if_default='true' show_label='always'\/>, <prop name='subject' priority='12' label='Subject contains' hide_if_default='true' show_label='always'\/>, <prop name='notSubject' priority='12' label='Subject not contains' hide_if_default='true' show_label='always'\/>, <prop name='text' priority='13' label='Body contains' hide_if_default='true' show_label='always'\/>, <prop name='notText' priority='13' label='Body not contains' hide_if_default='true' show_label='always'\/>, <prop name='flags' priority='14' label='Flags contains' hide_if_default='true' show_label='always'\/>, <prop name='notFlags' priority='14' label='Flags not contains' hide_if_default='true' show_label='always'\/>, <prop name='since' priority='15' label='Date from' hide_if_default='true' show_label='always'\/>, <prop name='before' priority='15' label='Date to' hide_if_default='true' show_label='always'\/>, <prop name='sortType' priority='20' label='Sort type' hide_if_default='true' show_label='always'\/>, <prop name='sortField' priority='20' label='Sort field' hide_if_default='true' show_label='always'\/>, <prop name='getUid' priority='30' label='Id' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveUid' priority='31' label='Id' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getFrom' priority='32' label='From' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveFrom' priority='33' label='From' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getTo' priority='34' label='To' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveTo' priority='35' label='To' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getSubject' priority='36' label='Subject' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveSubject' priority='37' label='Subject' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getTextHtml' priority='38' label='Body html' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveTextHtml' priority='39' label='Body html' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getLinksTextHtml' priority='40' label='Links html' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveLinksTextHtml' priority='41' label='Links html' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getTextPlain' priority='42' label='Body text' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveTextPlain' priority='43' label='Body text' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getLinksTextPlain' priority='44' label='Links text' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveLinksTextPlain' priority='45' label='Links text' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getTextRaw' priority='46' label='Body raw' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveTextRaw' priority='47' label='Body raw' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getLinksTextRaw' priority='48' label='Links raw' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveLinksTextRaw' priority='49' label='Links raw' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getSize' priority='50' label='Size' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveSize' priority='51' label='Size' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getFlags' priority='52' label='Flags' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveFlags' priority='53' label='Flags' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getDate' priority='54' label='Date' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveDate' priority='55' label='Date' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getAttachNames' priority='55' label='List attach' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveAttachnames' priority='56' label='List attach' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getAttachments' priority='57' label='Get attach' hide_if_value_equals='false' show_label='always'\/>, <prop name='attachmentsMask' priority='58' label='Attach mask' hide_if_default='true' show_label='always'\/>, <prop name='saveAttachments' priority='59' label='Get attach' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getRawHeader' priority='60' label='Headers' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveRawHeader' priority='61' label='Headers' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='wait' priority='70' label='Wait' show_label='always' hide_if_default='true' \/>, <prop name='minResults' priority='71' label='Min messages' show_label='always' hide_if_default='true' \/>, <prop name='interval' priority='72' label='Interval' show_label='always' hide_if_default='true' \/>, <prop name='timeout' priority='73' label='Wait timeout' show_label='always' hide_if_default='true' \/>, <prop name='delAfter' priority='70' label='Delete' show_label='always' hide_if_default='true' \/>, <prop name='setFlagsAfter' priority='71' label='Flags' show_label='always' hide_if_default='true' \/>, <prop name='setFlags' priority='71' label='Flags' show_label='always' hide_if_default='true' \/>, <prop name='box' priority='75' label='Folder' show_label='always' hide_if_default='true' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_GetBoxes":{"description":"Получить список папок","name":"Получить список папок","suggestion":{"en":"","ru":""},"template":"<prop name='Save' is_variable='true' \/>, <prop name='format' priority='30' hide_if_default='true' label='Format' show_label='always'\/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_GetFlags":{"description":"Получить флаги письма по id","name":"Получить флаги письма по id","suggestion":{"en":"","ru":""},"template":"<prop name='uid' \/> -> <prop name='Save' \/>, <prop name='box' priority='75' label='Folder' show_label='always' hide_if_default='true' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_GetLastMessage":{"description":"Получить содержимое последнего письма","name":"Получить содержимое последнего письма","suggestion":{"en":"","ru":""},"template":"<prop name='getUid' priority='30' label='Id' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveUid' priority='31' label='Id' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getFrom' priority='32' label='From' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveFrom' priority='33' label='From' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getTo' priority='34' label='To' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveTo' priority='35' label='To' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getSubject' priority='36' label='Subject' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveSubject' priority='37' label='Subject' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getTextHtml' priority='38' label='Body html' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveTextHtml' priority='39' label='Body html' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getLinksTextHtml' priority='40' label='Links html' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveLinksTextHtml' priority='41' label='Links html' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getTextPlain' priority='42' label='Body text' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveTextPlain' priority='43' label='Body text' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getLinksTextPlain' priority='44' label='Links text' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveLinksTextPlain' priority='45' label='Links text' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getTextRaw' priority='46' label='Body raw' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveTextRaw' priority='47' label='Body raw' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getLinksTextRaw' priority='48' label='Links raw' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveLinksTextRaw' priority='49' label='Links raw' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getSize' priority='50' label='Size' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveSize' priority='51' label='Size' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getFlags' priority='52' label='Flags' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveFlags' priority='53' label='Flags' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getDate' priority='54' label='Date' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveDate' priority='55' label='Date' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getAttachNames' priority='55' label='List attach' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveAttachnames' priority='56' label='List attach' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getAttachments' priority='57' label='Get attach' hide_if_value_equals='false' show_label='always'\/>, <prop name='attachmentsMask' priority='58' label='Attach mask' hide_if_default='true' show_label='always'\/>, <prop name='saveAttachments' priority='59' label='Get attach' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getRawHeader' priority='60' label='Headers' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveRawHeader' priority='61' label='Headers' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='delAfter' priority='70' label='Delete' show_label='always' hide_if_default='true' \/>, <prop name='setFlagsAfter' priority='71' label='Flags' show_label='always' hide_if_default='true' \/>, <prop name='setFlags' priority='71' label='Flags' show_label='always' hide_if_default='true' \/>, <prop name='box' priority='75' label='Folder' show_label='always' hide_if_default='true' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_GetMessage":{"description":"Получить содержимое письма по id","name":"Получить содержимое письма по id","suggestion":{"en":"","ru":""},"template":"<prop name='uid' \/>, <prop name='getFrom' priority='32' label='From' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveFrom' priority='33' label='From' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getTo' priority='34' label='To' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveTo' priority='35' label='To' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getSubject' priority='36' label='Subject' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveSubject' priority='37' label='Subject' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getTextHtml' priority='38' label='Body html' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveTextHtml' priority='39' label='Body html' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getLinksTextHtml' priority='40' label='Links html' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveLinksTextHtml' priority='41' label='Links html' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getTextPlain' priority='42' label='Body text' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveTextPlain' priority='43' label='Body text' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getLinksTextPlain' priority='44' label='Links text' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveLinksTextPlain' priority='45' label='Links text' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getTextRaw' priority='46' label='Body raw' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveTextRaw' priority='47' label='Body raw' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getLinksTextRaw' priority='48' label='Links raw' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveLinksTextRaw' priority='49' label='Links raw' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getSize' priority='50' label='Size' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveSize' priority='51' label='Size' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getFlags' priority='52' label='Flags' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveFlags' priority='53' label='Flags' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getDate' priority='54' label='Date' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveDate' priority='55' label='Date' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getAttachNames' priority='55' label='List attach' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveAttachnames' priority='56' label='List attach' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getAttachments' priority='57' label='Get attach' hide_if_value_equals='false' show_label='always'\/>, <prop name='attachmentsMask' priority='58' label='Attach mask' hide_if_default='true' show_label='always'\/>, <prop name='saveAttachments' priority='59' label='Get attach' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='getRawHeader' priority='60' label='Headers' hide_if_value_equals='false' show_label='always'\/>, <prop name='saveRawHeader' priority='61' label='Headers' is_variable='true' show_label='always' hide_if_default='true' \/>, <prop name='delAfter' priority='70' label='Delete' show_label='always' hide_if_default='true' \/>, <prop name='setFlagsAfter' priority='71' label='Flags' show_label='always' hide_if_default='true' \/>, <prop name='setFlags' priority='71' label='Flags' show_label='always' hide_if_default='true' \/>, <prop name='box' priority='75' label='Folder' show_label='always' hide_if_default='true' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_MoveMessages":{"description":"Переместить письмо по id","name":"Переместить письмо по id","suggestion":{"en":"","ru":""},"template":"<prop name='uids' \/> -> <prop name='toBox' \/>, <prop name='box' priority='75' label='Folder' show_label='always' hide_if_default='true' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_Proxy":{"description":"Прокси получения почты","name":"Прокси получения почты","suggestion":{"en":"","ru":""},"template":"<prop name='proxyString' \/>, <prop name='proxyType' show_label='always' label='Proxy type' hide_if_default='true' priority='20' \/>, <prop name='proxyUsername' show_label='always' label='Login' hide_if_default='true' priority='30' \/>, <prop name='proxyPassword' show_label='always' label='Password' hide_if_default='true' priority='30' \/>"},"InMail_RenameBox":{"description":"Переименовать папку","name":"Переименовать папку","suggestion":{"en":"","ru":""},"template":"<prop name='oldName' \/> -> <prop name='newName' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_Search":{"description":"Найти id нескольких писем по критериям","name":"Найти id нескольких писем по критериям","suggestion":{"en":"","ru":""},"template":"<prop name='from' priority='10' label='From contains' hide_if_default='true' show_label='always'\/>, <prop name='notFrom' priority='10' label='From not contains' hide_if_default='true' show_label='always'\/>, <prop name='to' priority='11' label='To contains' hide_if_default='true' show_label='always'\/>, <prop name='notTo' priority='11' label='To not contains' hide_if_default='true' show_label='always'\/>, <prop name='subject' priority='12' label='Subject contains' hide_if_default='true' show_label='always'\/>, <prop name='notSubject' priority='12' label='Subject not contains' hide_if_default='true' show_label='always'\/>, <prop name='text' priority='13' label='Body contains' hide_if_default='true' show_label='always'\/>, <prop name='notText' priority='13' label='Body not contains' hide_if_default='true' show_label='always'\/>, <prop name='flags' priority='14' label='Flags contains' hide_if_default='true' show_label='always'\/>, <prop name='notFlags' priority='14' label='Flags not contains' hide_if_default='true' show_label='always'\/>, <prop name='since' priority='15' label='Date from' hide_if_default='true' show_label='always'\/>, <prop name='before' priority='15' label='Date to' hide_if_default='true' show_label='always'\/>, <prop name='sortType' priority='20' label='Sort type' hide_if_default='true' show_label='always'\/>, <prop name='sortField' priority='20' label='Sort field' hide_if_default='true' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>, <prop name='wait' priority='70' label='Wait' show_label='always' hide_if_default='true' \/>, <prop name='minResults' priority='71' label='Min messages' show_label='always' hide_if_default='true' \/>, <prop name='interval' priority='72' label='Interval' show_label='always' hide_if_default='true' \/>, <prop name='timeout' priority='73' label='Wait timeout' show_label='always' hide_if_default='true' \/>, <prop name='maxResults' priority='80' label='Total' show_label='always' hide_if_default='true' \/>, <prop name='offset' priority='80' label='Offset' show_label='always' hide_if_default='true' \/>, <prop name='box' priority='75' label='Folder' show_label='always' hide_if_default='true' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='90' \/>"},"InMail_SearchLast":{"description":"Найти id последнего письма","name":"Найти id последнего письма","suggestion":{"en":"","ru":""},"template":"<prop name='Save' is_variable='true' \/>, <prop name='box' priority='75' label='Folder' show_label='always' hide_if_default='true' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_SearchOne":{"description":"Найти id одного письма по критериям","name":"Найти id одного письма по критериям","suggestion":{"en":"","ru":""},"template":"<prop name='from' priority='10' label='From contains' hide_if_default='true' show_label='always'\/>, <prop name='notFrom' priority='10' label='From not contains' hide_if_default='true' show_label='always'\/>, <prop name='to' priority='11' label='To contains' hide_if_default='true' show_label='always'\/>, <prop name='notTo' priority='11' label='To not contains' hide_if_default='true' show_label='always'\/>, <prop name='subject' priority='12' label='Subject contains' hide_if_default='true' show_label='always'\/>, <prop name='notSubject' priority='12' label='Subject not contains' hide_if_default='true' show_label='always'\/>, <prop name='text' priority='13' label='Body contains' hide_if_default='true' show_label='always'\/>, <prop name='notText' priority='13' label='Body not contains' hide_if_default='true' show_label='always'\/>, <prop name='flags' priority='14' label='Flags contains' hide_if_default='true' show_label='always'\/>, <prop name='notFlags' priority='14' label='Flags not contains' hide_if_default='true' show_label='always'\/>, <prop name='since' priority='15' label='Date from' hide_if_default='true' show_label='always'\/>, <prop name='before' priority='15' label='Date to' hide_if_default='true' show_label='always'\/>, <prop name='sortType' priority='20' label='Sort type' hide_if_default='true' show_label='always'\/>, <prop name='sortField' priority='20' label='Sort field' hide_if_default='true' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>, <prop name='wait' priority='70' label='Wait' show_label='always' hide_if_default='true' \/>, <prop name='minResults' priority='71' label='Min messages' show_label='always' hide_if_default='true' \/>, <prop name='interval' priority='72' label='Interval' show_label='always' hide_if_default='true' \/>, <prop name='timeout' priority='73' label='Wait timeout' show_label='always' hide_if_default='true' \/>, <prop name='box' priority='75' label='Folder' show_label='always' hide_if_default='true' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_SetDebug":{"description":"Отладка","name":"Отладка","suggestion":{"en":"","ru":""},"template":"{{enable}}"},"InMail_SetFlags":{"description":"Установить флаги письма по id","name":"Установить флаги письма по id","suggestion":{"en":"","ru":""},"template":"<prop name='flags' \/> -> <prop name='uids' \/>, <prop name='add' priority='30' hide_if_default='true' label='Add flags' show_label='always'\/>, <prop name='box' priority='75' label='Folder' show_label='always' hide_if_default='true' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InMail_Status":{"description":"Получить информацию о папке","name":"Получить информацию о папке","suggestion":{"en":"","ru":""},"template":"<prop name='name' \/> -> <prop name='total' is_variable='true' \/>, <prop name='recent' priority='30' hide_if_default='true' is_variable='true' label='Recent' show_label='always'\/>, <prop name='unseen' is_variable='true' priority='31' hide_if_default='true' label='Unseen' show_label='always'\/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"InsertElement":{"description":"Вставить Элемент","name":"Вставить Элемент","suggestion":{"en":"","ru":""},"template":"<prop name='Value'\/>, <prop name='Index' priority='30' label='Index' show_label='always'\/> -> <prop name='Variable' is_variable='true' \/>"},"JsonChangeFormat":{"description":"Изменить формат (устаревшее)","name":"Изменить формат (устаревшее)","suggestion":{"en":"","ru":""},"template":"<prop name='Data' \/>, <prop name='Type' priority='30' label='Format' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>"},"JsonChangeValue":{"description":"Изменить значение","name":"Изменить значение","suggestion":{"en":"","ru":""},"template":"<prop name='Data' \/>, <prop name='Path' priority='30' hide_if_default='true' label='Path' show_label='always'\/>, <prop name='Value' priority='31' hide_if_default='true' label='Value' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>"},"JsonCheckFormat":{"description":"Подходит ли строка под парсинг JSON","name":"Подходит ли строка под парсинг JSON","suggestion":{"en":"","ru":""},"template":"{{Data}} -> {{Save}}"},"JsonCreateObject":{"description":"Создать объект","name":"Создать объект","suggestion":{"en":"","ru":""},"template":"<prop name='Key1' priority='30' hide_if_default='true' label='Key1' show_label='always'\/>, <prop name='Value1' priority='30' hide_if_default='true' label='Value1' show_label='always'\/>, <prop name='Key2' priority='31' hide_if_default='true' label='Key2' show_label='always'\/>, <prop name='Value2' priority='31' hide_if_default='true' label='Value2' show_label='always'\/>, <prop name='Key3' priority='32' hide_if_default='true' label='Key3' show_label='always'\/>, <prop name='Value3' priority='32' hide_if_default='true' label='Value3' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>"},"JsonFromString":{"description":"Строку в JSON","name":"Строку в JSON","suggestion":{"en":"","ru":""},"template":"{{Data}} -> {{Save}}"},"JsonGetAllKeys":{"description":"Получить все ключи","name":"Получить все ключи","suggestion":{"en":"","ru":""},"template":"<prop name='Data' \/>, <prop name='Path' priority='30' hide_if_default='true' label='Path' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>"},"JsonGetAllValues":{"description":"Получить все значения","name":"Получить все значения","suggestion":{"en":"","ru":""},"template":"<prop name='Data' \/>, <prop name='Path' priority='30' hide_if_default='true' label='Path' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>"},"JsonGetCount":{"description":"Количество элементов","name":"Количество элементов","suggestion":{"en":"","ru":""},"template":"<prop name='Data' \/>, <prop name='Path' priority='30' hide_if_default='true' label='Path' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>"},"JsonGetKey":{"description":"Получить ключ","name":"Получить ключ","suggestion":{"en":"","ru":""},"template":"<prop name='Data' \/>, <prop name='Path' priority='30' hide_if_default='true' label='Path' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>"},"JsonGetValue":{"description":"Получить значение","name":"Получить значение","suggestion":{"en":"","ru":""},"template":"<prop name='Data' \/>, <prop name='Path' priority='30' hide_if_default='true' label='Path' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>"},"JsonRemoveValue":{"description":"Удалить значение","name":"Удалить значение","suggestion":{"en":"","ru":""},"template":"<prop name='Data' \/>, <prop name='Path' priority='30' hide_if_default='true' label='Path' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>"},"JsonToString":{"description":"JSON в строку","name":"JSON в строку","suggestion":{"en":"","ru":""},"template":"{{Data}} -> {{Save}}"},"LastListElement":{"description":"Последний Элемент","name":"Последний Элемент","suggestion":{"en":"","ru":""},"template":"<prop name='Variable'\/>, <prop name='Check' priority='40' hide_if_default='true' label='Remove' show_label='always'\/> -> <prop name='VariableResult' is_variable='true' \/>"},"ListCompare":{"description":"Сравнить Списки","name":"Сравнить Списки","suggestion":{"en":"","ru":""},"template":"<prop name='Variable'\/>, <prop name='VariableSecond'\/> -> <prop name='VariableResult' is_variable='true' \/>"},"ListContains":{"description":"Содержит","name":"Содержит","suggestion":{"en":"","ru":""},"template":"<prop name='Variable'\/>, <prop name='Value' priority='30' label='Value' show_label='always'\/> -> <prop name='VariableSave' is_variable='true' \/>"},"ListJoin":{"description":"Объединить в строку","name":"Объединить в строку","suggestion":{"en":"","ru":""},"template":"<prop name='Variable' \/>, <prop name='Separator' priority='30' hide_if_default='true' label='Separator' show_label='always'\/> -> <prop name='VariableResult' is_variable='true' \/>"},"ListLength":{"description":"Количество Элементов","name":"Количество Элементов","suggestion":{"en":"","ru":""},"template":"{{Variable}} -> {{VariableLength}}"},"ListMerge":{"description":"Объединить Списки","name":"Объединить Списки","suggestion":{"en":"","ru":""},"template":"{{VariableSecond}} -> {{Variable}}"},"ListSetElement":{"description":"Установить Элемент","name":"Установить Элемент","suggestion":{"en":"","ru":""},"template":"<prop name='Value'\/>, <prop name='Index' priority='30' label='Index' show_label='always'\/> -> <prop name='Variable' is_variable='true' \/>"},"ListSort":{"description":"Сортировать","name":"Сортировать","suggestion":{"en":"","ru":""},"template":"<prop name='Variable' is_variable='true' \/>"},"ParseStringToList":{"description":"Парсить Строку","name":"Парсить Строку","suggestion":{"en":"","ru":""},"template":"<prop name='String' \/>, <prop name='Separator' priority='30' hide_if_default='true' label='Separator' show_label='always'\/> -> <prop name='VariableResult' is_variable='true' \/>"},"RABBY_RABBY_conect":{"description":"RABBY_conect","name":"RABBY_conect","suggestion":{"en":"","ru":""},"template":""},"RABBY_RABBY_get_wallet_adress":{"description":"RABBY_get_wallet_adress","name":"RABBY_get_wallet_adress","suggestion":{"en":"","ru":""},"template":""},"RABBY_RABBY_login":{"description":"RABBY_login","name":"RABBY_login","suggestion":{"en":"","ru":""},"template":""},"RandomListElement":{"description":"Случайный Элемент","name":"Случайный Элемент","suggestion":{"en":"","ru":""},"template":"<prop name='Variable'\/>, <prop name='Check' priority='40' hide_if_default='true' label='Remove' show_label='always'\/> -> <prop name='VariableResult' is_variable='true' \/>"},"RegexpFirst":{"description":"Первое вхождение","name":"Первое вхождение","suggestion":{"en":"parse text, search string","ru":"парсить текст, регулярка, регулярки, поиск строки"},"template":"<prop name='Value'\/>, <prop name='Regexp' priority='30' hide_if_default='true' label='Regexp' show_label='always'\/> -> <prop name='Result' is_variable='true'\/>, <prop name='GroupsAsList' is_variable='true' label='List' priority='50' show_label='always' hide_if_default='true'\/>, <prop name='ResultAll' is_variable='true' label='Text' priority='51' show_label='always' hide_if_default='true'\/>"},"RegexpMatch":{"description":"Подходит ли строка под регулярное выражение","name":"Подходит ли строка под регулярное выражение","suggestion":{"en":"parse text, search string","ru":"парсить текст, регулярка, регулярки, поиск строки"},"template":"<prop name='Value'\/>, <prop name='Regexp' priority='30' hide_if_default='true' label='Regexp' show_label='always'\/> -> <prop name='Result' is_variable='true'\/>"},"RegexpReplace":{"description":"Заменить строку","name":"Заменить строку","suggestion":{"en":"","ru":""},"template":"<prop name='Value'\/>, <prop name='Regexp' priority='30' hide_if_default='true' label='Regexp' show_label='always'\/>, <prop name='ReplaceWith' priority='35' hide_if_default='true' label='Replace with' show_label='always'\/> -> <prop name='Result' is_variable='true'\/>"},"RegexpScan":{"description":"Извлечь все данные","name":"Извлечь все данные","suggestion":{"en":"parse text, search string","ru":"парсить текст, регулярка, регулярки, поиск строки"},"template":"<prop name='Value'\/>, <prop name='Regexp' priority='30' hide_if_default='true' label='Regexp' show_label='always'\/> -> <prop name='Result' is_variable='true'\/>"},"RegexpSplit":{"description":"Разделить строку","name":"Разделить строку","suggestion":{"en":"","ru":""},"template":"<prop name='Value'\/>, <prop name='Regexp' priority='30' hide_if_default='true' label='Regexp' show_label='always'\/> -> <prop name='Result' is_variable='true'\/>"},"RemoveDuplicates":{"description":"Удалить Дубликаты","name":"Удалить Дубликаты","suggestion":{"en":"","ru":""},"template":"<prop name='Variable' is_variable='true' \/>"},"RemoveListPart":{"description":"Удалить Часть","name":"Удалить Часть","suggestion":{"en":"","ru":""},"template":"<prop name='Variable' is_variable='true' \/>, <prop name='IndexStart' priority='30' label='Start' show_label='always'\/>, <prop name='IndexEnd' priority='31' label='End' show_label='always'\/>"},"RemoveLocalProfile":{"description":"Удалить профиль","name":"Удалить профиль","suggestion":{"en":"set profile, save cookies, save local storage, autologin","ru":"путь к профилю, сохранить куки, сохранить local storage, автовход"},"template":"{{Path}}"},"ResourceAddElement":{"description":"Добавить Элемент","name":"Добавить Элемент","suggestion":{"en":"","ru":""},"template":"<prop name='Data'\/>, <prop name='ResourceName' label='Resource' show_label='always'\/>, <prop name='Check' priority='50' hide_if_default='true' label='Instantly' show_label='always'\/>, <prop name='Check2' priority='51' hide_if_default='true' label='Only add' show_label='always'\/>"},"ResourceLength":{"description":"Количество Элементов В Ресурсе","name":"Количество Элементов В Ресурсе","suggestion":{"en":"","ru":""},"template":"{{ResourceName}} -> {{Save}}"},"ResourceReload":{"description":"Перезагрузить Ресурс","name":"Перезагрузить Ресурс","suggestion":{"en":"","ru":""},"template":"{{ResourceName}}"},"ResourceToArray":{"description":"Ресурс В Список","name":"Ресурс В Список","suggestion":{"en":"","ru":""},"template":"{{ResourceName}} -> {{Save}}"},"SMS_Debug":{"description":"Отладка","name":"Отладка","suggestion":{"en":"","ru":""},"template":"{{enable}}"},"SMS_GetBalance":{"description":"Получить баланс","name":"Получить баланс","suggestion":{"en":"","ru":""},"template":"<prop name='service' priority='30' label='Service' show_label='always'\/>, <prop name='apiKey' priority='40' hide_if_default='true' label='Key' show_label='always' max_size='6'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='serverUrl' priority='63' hide_if_default='true' label='Server' show_label='always'\/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"SMS_GetCode":{"description":"Получить код активации","name":"Получить код активации","suggestion":{"en":"","ru":""},"template":"<prop name='number' \/> -> <prop name='Save' is_variable='true'\/>, <prop name='interval' priority='50' hide_if_default='true' label='Interval' show_label='always'\/>, <prop name='timeout' priority='51' hide_if_default='true' label='Timeout' show_label='always'\/>"},"SMS_GetCountries":{"description":"Получить список стран","name":"Получить список стран","suggestion":{"en":"","ru":""},"template":"<prop name='service' priority='30' label='Service' show_label='always'\/>, <prop name='apiKey' priority='40' hide_if_default='true' label='Key' show_label='always' max_size='6'\/>, <prop name='serverUrl' priority='63' hide_if_default='true' label='Server' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"SMS_GetNumber":{"description":"Получить номер телефона","name":"Получить номер телефона","suggestion":{"en":"","ru":""},"template":"<prop name='site' show_label='auto' label='Site' hide_if_default='true' \/>, <prop name='service' priority='30' label='Service' show_label='always'\/>, <prop name='apiKey' priority='40' hide_if_default='true' label='Key' show_label='always' max_size='6'\/>, <prop name='country' priority='50' hide_if_default='true' label='Country' show_label='always'\/>, <prop name='operator' priority='60' hide_if_default='true' label='Operator' show_label='always'\/>, <prop name='maxPrice' priority='61' hide_if_default='true' label='Price' show_label='always'\/>, <prop name='customSite' priority='62' hide_if_default='true' label='Custom site' show_label='always'\/>, <prop name='customCountry' priority='62' hide_if_default='true' label='Custom country' show_label='always'\/>, <prop name='serverUrl' priority='63' hide_if_default='true' label='Server' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"SMS_GetNumbersCount":{"description":"Получить количество доступных номеров","name":"Получить количество доступных номеров","suggestion":{"en":"","ru":""},"template":"<prop name='site' show_label='auto' label='Site' hide_if_default='true' \/>, <prop name='service' priority='30' label='Service' show_label='always'\/>, <prop name='apiKey' priority='40' hide_if_default='true' label='Key' show_label='always' max_size='6'\/>, <prop name='country' priority='50' hide_if_default='true' label='Country' show_label='always'\/>, <prop name='operator' priority='60' hide_if_default='true' label='Operator' show_label='always'\/>, <prop name='customSite' priority='62' hide_if_default='true' label='Custom site' show_label='always'\/>, <prop name='customCountry' priority='62' hide_if_default='true' label='Custom country' show_label='always'\/>, <prop name='serverUrl' priority='63' hide_if_default='true' label='Server' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"SMS_GetSites":{"description":"Получить список сайтов","name":"Получить список сайтов","suggestion":{"en":"","ru":""},"template":"<prop name='service' priority='30' label='Service' show_label='always'\/>, <prop name='apiKey' priority='40' hide_if_default='true' label='Key' show_label='always' max_size='6'\/>, <prop name='serverUrl' priority='63' hide_if_default='true' label='Server' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"SMS_SetStatus":{"description":"Изменение статуса активации","name":"Изменение статуса активации","suggestion":{"en":"","ru":""},"template":"<prop name='number' \/>, <prop name='status' label='Status' show_label='always'\/>, <prop name='Check' show_label='always' hide_if_default='true' label='Delete' priority='70' \/>, <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='80' \/>"},"START_GOOGLEstart":{"description":"GOOGLEstart","name":"GOOGLEstart","suggestion":{"en":"","ru":""},"template":""},"SaveProfile":{"description":"Копировать профиль в другую папку","name":"Копировать профиль в другую папку","suggestion":{"en":"set profile, save cookies, save local storage, autologin","ru":"путь к профилю, сохранить куки, сохранить local storage, автовход"},"template":"{{Path}}"},"SendMessage":{"description":"Отправить Сообщение","name":"Отправить Сообщение","suggestion":{"en":"","ru":""},"template":"<prop name='Message'\/>, <prop name='Token' priority='30' hide_if_default='true' label='Token' show_label='always'\/>, <prop name='IdChat' priority='40' hide_if_default='true' label='Chat' show_label='always'\/>, <prop name='Check' priority='40' hide_if_default='true' label='Add thread' show_label='always'\/>, <prop name='Check1' priority='40' hide_if_default='true' label='Add time' show_label='always'\/>"},"ShuffleList":{"description":"Перемешать Список","name":"Перемешать Список","suggestion":{"en":"","ru":""},"template":"<prop name='Variable' is_variable='true' \/>"},"StopUsingProfile":{"description":"Переключиться на временный профиль (устарело)","name":"Переключиться на временный профиль (устарело)","suggestion":{"en":"set profile, save cookies, save local storage, autologin","ru":"путь к профилю, сохранить куки, сохранить local storage, автовход"},"template":""},"Sublist":{"description":"Подсписок","name":"Подсписок","suggestion":{"en":"","ru":""},"template":"<prop name='Variable'\/>, <prop name='IndexStart' priority='30' label='Start' show_label='always'\/>, <prop name='IndexEnd' priority='31' label='End' show_label='always'\/> -> <prop name='VariableNewList' is_variable='true' \/>"},"UseProfile":{"description":"Создать или переключиться на постоянный профиль (устарело)","name":"Создать или переключиться на постоянный профиль (устарело)","suggestion":{"en":"set profile, save cookies, save local storage, autologin","ru":"путь к профилю, сохранить куки, сохранить local storage, автовход"},"template":"<prop name='Path'\/>, <prop name='Key' priority='30' hide_if_default='true' label='Key' show_label='always' max_size='9'\/>, <prop name='LoadFPFromFolder' priority='40' hide_if_default='true' label='Fingerprint' show_label='always'\/>, <prop name='LoadProxyFromFolder' priority='50' hide_if_default='true' label='Proxy' show_label='always'\/>"},"XpathCount":{"description":"Xpath получить количество элементов","name":"Xpath получить количество элементов","suggestion":{"en":"","ru":""},"template":"<prop name='Text' \/>, <prop name='Value' show_label='always' label='Xpath' hide_if_default='true' priority='20' \/> -> <prop name='Save' \/>"},"XpathExists":{"description":"Xpath проверить существование","name":"Xpath проверить существование","suggestion":{"en":"","ru":""},"template":"<prop name='Text' \/>, <prop name='Value' show_label='always' label='Xpath' hide_if_default='true' priority='20' \/> -> <prop name='Save' \/>"},"XpathText":{"description":"Xpath получить текст","name":"Xpath получить текст","suggestion":{"en":"","ru":""},"template":"<prop name='Text' \/>, <prop name='Value' show_label='always' label='Xpath' hide_if_default='true' priority='20' \/> -> <prop name='Save' \/>, <prop name='Check' show_label='always' label='Fail' hide_if_default='true' priority='60' \/>"},"XpathTextList":{"description":"Xpath получить каждый текст","name":"Xpath получить каждый текст","suggestion":{"en":"","ru":""},"template":"<prop name='Text' \/>, <prop name='Value' show_label='always' label='Xpath' hide_if_default='true' priority='20' \/> -> <prop name='Save' \/>"},"XpathXml":{"description":"Xpath получить xml","name":"Xpath получить xml","suggestion":{"en":"","ru":""},"template":"<prop name='Text' \/>, <prop name='Value' show_label='always' label='Xpath' hide_if_default='true' priority='20' \/> -> <prop name='Save' \/>, <prop name='Check' show_label='always' label='Fail' hide_if_default='true' priority='60' \/>"},"XpathXmlList":{"description":"Xpath получить каждый xml","name":"Xpath получить каждый xml","suggestion":{"en":"","ru":""},"template":"<prop name='Text' \/>, <prop name='Value' show_label='always' label='Xpath' hide_if_default='true' priority='20' \/> -> <prop name='Save' \/>"},"asyncfunction_call":{"description":"Вызов функции асинхронно","name":"Вызов функции асинхронно","suggestion":{"en":"create new thread, start thread, multithreading","ru":"создать новый поток, запустить поток, многопоточность, многопоток"},"template":"<prop name='FunctionName' \/> -> <prop name='ResultThreadId' is_variable='true' \/>, <prop name='DesiredThreadId' priority='50' hide_if_default='true' label='Thread id' show_label='always'\/>, <prop name='CloseThreadAfterFunctionEnds' priority='51' hide_if_default='true' label='Stop' show_label='always'\/>, <prop name='OnIdle' priority='53' hide_if_default='true' label='Iddle' show_label='always'\/>, <prop name='MaxThreads' priority='54' hide_if_default='true' label='Max threads' show_label='always'\/>, <prop name='ThreadList' is_variable='true' priority='60' hide_if_default='true' label='Thread list' show_label='always'\/>"},"asyncfunction_result":{"description":"Получить результат асинхронной функции","name":"Получить результат асинхронной функции","suggestion":{"en":"","ru":""},"template":"<prop name='ThreadId' \/> -> <prop name='Result' is_variable='true' \/>, <prop name='IsRunnig' is_variable='true' priority='50' hide_if_default='true' label='_LABEL_IsRunning' show_label='always'\/>, <prop name='IsSuccess' is_variable='true' priority='51' hide_if_default='true' label='_LABEL_IsSuccess' show_label='always'\/>, <prop name='Error' is_variable='true' priority='52' hide_if_default='true' label='_LABEL_IsError' show_label='always'\/>"},"asyncfunction_stop":{"description":"Прервать асинхронную функцию","name":"Прервать асинхронную функцию","suggestion":{"en":"","ru":""},"template":"{{ThreadId}}"},"asyncfunction_wait":{"description":"Ждать завершение асинхронной функции","name":"Ждать завершение асинхронной функции","suggestion":{"en":"","ru":""},"template":"<prop name='ThreadId' \/>,  <prop name='use-timeout' show_label='always' hide_if_default='true' label='Timeout' priority='40' \/>"},"base64":{"description":"Base64 кодировать\/декодировать","name":"Base64 кодировать\/декодировать","suggestion":{"en":"","ru":""},"template":"<prop name='Value'\/>, <prop name='Select' priority='30' label='-LABEL-Type' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>"},"capitalize_words":{"description":"Слово с большой буквы","name":"Слово с большой буквы","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/>, <prop name='Check' priority='30' hide_if_default='true' label='Capitalize' show_label='always'\/>, <prop name='Check2' priority='31' hide_if_default='true' label='To lower' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>"},"change_url":{"description":"Изменить URL","name":"Изменить URL","suggestion":{"en":"","ru":""},"template":"<prop name='url'\/> -> <prop name='Save' is_variable='true' \/>, <prop name='protocol' priority='30' hide_if_default='true' label='Protocol' show_label='always'\/>, <prop name='username' priority='31' hide_if_default='true' label='Username' show_label='always'\/>, <prop name='password' priority='32' hide_if_default='true' label='Pass' show_label='always'\/>, <prop name='host' priority='33' hide_if_default='true' label='Host' show_label='always'\/>, <prop name='port' priority='34' hide_if_default='true' label='Port' show_label='always'\/>, <prop name='path' priority='35' hide_if_default='true' label='Path' show_label='always'\/>, <prop name='query' priority='36' hide_if_default='true' label='Query' show_label='always'\/>, <prop name='Check3' priority='37' hide_if_default='true' label='Clear query' show_label='always'\/>, <prop name='hash' priority='38' hide_if_default='true' label='-LABEL-Fragment' show_label='always'\/>, <prop name='base_url' priority='60' hide_if_default='true' label='Base URL' show_label='always'\/>, <prop name='Check' priority='61' hide_if_default='true' label='Normalize' show_label='always'\/>, <prop name='Check2' priority='62' hide_if_default='true' label='Fail' show_label='always'\/>"},"clean":{"description":"Очистить","name":"Очистить","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='Check' priority='30' hide_if_default='true' label='Multiple spaces' show_label='always'\/>, <prop name='Check2' priority='31' hide_if_default='true' label='Line breaks' show_label='always'\/>, <prop name='Check3' priority='32' hide_if_default='true' label='-LABEL-Tabs' show_label='always'\/>, <prop name='characters_to_delete' priority='40' hide_if_default='true' label='Remove characters' show_label='always'\/>, <prop name='characters_to_space' priority='41' hide_if_default='true' label='Replace with spaces' show_label='always'\/>"},"clickCaptchaElement":{"class":"browser","description":"Решить капчу кликами","name":"Решить капчу кликами","suggestion":{"en":"","ru":""},"template":"<prop name='PATH' \/>, <prop name='checkbox-wait-element' show_label='always' hide_if_default='true' label='Wait element' priority='45' \/>, <prop name='checkbox-fail-action' show_label='always' hide_if_default='true' label='Fail' priority='50' \/>, <prop name='serviceName' show_label='auto' label='Method' priority='20' \/>, <prop name='serviceKey' show_label='always' label='Key' hide_if_default='true' priority='30' max_size='11' \/>, <prop name='textInstructions' show_label='always' label='Description' hide_if_default='true' priority='60' \/>, <prop name='taskWaitTimeout' show_label='always' label='Interval' hide_if_default='true' priority='80' \/>, <prop name='taskWaitDelay' show_label='always' label='Delay' hide_if_default='true' priority='80' \/>, <prop name='serviceUrl' show_label='always' label='Server' hide_if_default='true' priority='80' \/>, <prop name='emulateMouse' show_label='always' label='Mouse emulate' hide_if_default='true' priority='90' \/> "},"clipboard_getclipboard":{"description":"Читать Буфер Обмена","name":"Читать Буфер Обмена","suggestion":{"en":"","ru":""},"template":"<prop name='Save' is_variable='true' \/>, <prop name='MimeType' show_label='always' label='Mime' hide_if_default='true' priority='60' \/>, <prop name='Check' show_label='always' label='Base64' hide_if_default='true' priority='70' \/>"},"clipboard_setclipboard":{"description":"Запись В Буфер Обмена","name":"Запись В Буфер Обмена","suggestion":{"en":"","ru":""},"template":"<prop name='Value' \/>, <prop name='MimeType' show_label='always' label='Mime' hide_if_default='true' priority='60' \/>, <prop name='Check' show_label='always' label='Base64' hide_if_default='true' priority='70' \/>"},"count_substrings":{"description":"Количество подстрок","name":"Количество подстрок","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/>, <prop name='substring' priority='30' hide_if_default='true' label='Substring' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>"},"count_words":{"description":"Количество слов","name":"Количество слов","suggestion":{"en":"","ru":""},"template":"{{string}} -> {{Save}}"},"create_csv_string":{"description":"Создать CSV строку","name":"Создать CSV строку","suggestion":{"en":"","ru":""},"template":"<prop name='item1' priority='30' hide_if_default='true' show_label='never'\/>, <prop name='item2' priority='31' hide_if_default='true' show_label='never'\/>, <prop name='item3' priority='32' hide_if_default='true' show_label='never'\/>, <prop name='items_list' priority='33' hide_if_default='true' show_label='never'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='separator' priority='50' hide_if_default='true' label='Separator' show_label='always'\/>"},"datetime_addsecondstodate":{"description":"Добавить Секунды К Дате","name":"Добавить Секунды К Дате","suggestion":{"en":"","ru":""},"template":"<prop name='String' \/>, <prop hide_if_default='true' name='Seconds' show_label='always' priority='20' label='s' \/>, <prop hide_if_default='true' name='Minutes' show_label='always' priority='21' label='m' \/>, <prop hide_if_default='true' name='Hours' show_label='always' label='h' priority='22' \/>, <prop hide_if_default='true' name='Days' show_label='always' label='D' priority='23' \/> -> <prop name='Save' is_variable='true'\/>"},"datetime_changedate":{"description":"Изменить Дату","name":"Изменить Дату","suggestion":{"en":"","ru":""},"template":"<prop name='String' \/>, <prop name='Year' hide_if_default='true' show_label='always' label='Y' priority='20' \/>, <prop hide_if_default='true' name='Month' show_label='always' priority='21' label='M' \/>, <prop hide_if_default='true' name='Day' show_label='always' label='D' priority='22' \/>, <prop hide_if_default='true' name='Hour' label='h' show_label='always' priority='23' \/>, <prop hide_if_default='true' name='Minutes' show_label='always' priority='24' label='m' \/>, <prop hide_if_default='true' name='Seconds' show_label='always' priority='25' label='s' \/>, <prop name='Milliseconds' hide_if_default='true' show_label='always' priority='26' label='ms' \/>, <prop name='Timezone' hide_if_default='true' show_label='always' priority='27' label='TZ' \/> -> <prop name='Save' is_variable='true'\/>"},"datetime_changetimezone":{"description":"Изменить Часовой Пояс Даты","name":"Изменить Часовой Пояс Даты","suggestion":{"en":"","ru":""},"template":"<prop name='String' \/>, <prop name='Timezone' show_label='always' priority='20' label='TZ' \/> -> <prop name='Save' is_variable='true'\/>"},"datetime_createdate":{"description":"Создать Дату","name":"Создать Дату","suggestion":{"en":"","ru":""},"template":"<prop name='Year' show_label='always' label='Y' priority='20' \/>, <prop name='Month' show_label='always' priority='21' label='M' \/>, <prop name='Day' show_label='always' label='D' priority='22' \/>, <prop name='Hour' label='h' show_label='always' priority='23' \/>, <prop name='Minutes' show_label='always' priority='24' label='m' \/>, <prop name='Seconds' show_label='always' priority='25' label='s' \/>, <prop name='Milliseconds' show_label='always' priority='26' label='ms' \/>, <prop name='Timezone' show_label='always' priority='27' label='TZ' \/> -> <prop name='Save' is_variable='true'\/>"},"datetime_datenow":{"description":"Дата Сейчас","name":"Дата Сейчас","suggestion":{"en":"","ru":""},"template":"<prop name='Save' is_variable='true'\/>"},"datetime_datetomseconds":{"description":"Дату в Миллисекунды","name":"Дату в Миллисекунды","suggestion":{"en":"","ru":""},"template":"{{String}} -> {{Save}}"},"datetime_datetostring":{"description":"Дату В Строку","name":"Дату В Строку","suggestion":{"en":"","ru":""},"template":"<prop name='String' \/> -> <prop name='Save' is_variable='true'\/>, <prop name='Format' show_label='always' label='Format' hide_if_default='true' priority='40' \/>"},"datetime_dayofmonth":{"description":"День Месяца","name":"День Месяца","suggestion":{"en":"","ru":""},"template":"{{String}} -> {{Save}}"},"datetime_dayofweek":{"description":"День Недели","name":"День Недели","suggestion":{"en":"","ru":""},"template":"{{String}} -> {{Save}}"},"datetime_dayofyear":{"description":"День Года","name":"День Года","suggestion":{"en":"","ru":""},"template":"{{String}} -> {{Save}}"},"datetime_gettimezone":{"description":"Получить Часовой Пояс Даты","name":"Получить Часовой Пояс Даты","suggestion":{"en":"","ru":""},"template":"{{String}} -> {{Save}}"},"datetime_hour":{"description":"Получить Часы Из Даты","name":"Получить Часы Из Даты","suggestion":{"en":"","ru":""},"template":"{{String}} -> {{Save}}"},"datetime_millisecond":{"description":"Получить Миллисекунды Из Даты","name":"Получить Миллисекунды Из Даты","suggestion":{"en":"","ru":""},"template":"{{String}} -> {{Save}}"},"datetime_minute":{"description":"Получить Минуты Из Даты","name":"Получить Минуты Из Даты","suggestion":{"en":"","ru":""},"template":"{{String}} -> {{Save}}"},"datetime_month":{"description":"Получить Месяц Из Даты","name":"Получить Месяц Из Даты","suggestion":{"en":"","ru":""},"template":"{{String}} -> {{Save}}"},"datetime_msecondstodate":{"description":"Миллисекунды В Дату","name":"Миллисекунды В Дату","suggestion":{"en":"","ru":""},"template":"{{String}} -> {{Save}}"},"datetime_second":{"description":"Получить Секунды Из Даты","name":"Получить Секунды Из Даты","suggestion":{"en":"","ru":""},"template":"{{String}} -> {{Save}}"},"datetime_stringtodate":{"description":"Строку В Дату","name":"Строку В Дату","suggestion":{"en":"","ru":""},"template":"<prop name='String' \/> -> <prop name='Save' is_variable='true'\/>, <prop name='Format' show_label='always' label='Format' hide_if_default='true' priority='40' \/>"},"datetime_substractdates":{"description":"Разница Между Датами","name":"Разница Между Датами","suggestion":{"en":"","ru":""},"template":"{{DecreasingString}} - {{SubtractedString}} -> {{Save}}"},"datetime_year":{"description":"Получить Год Из Даты","name":"Получить Год Из Даты","suggestion":{"en":"","ru":""},"template":"{{String}} -> {{Save}}"},"declination":{"description":"Склонять","name":"Склонять","suggestion":{"en":"","ru":""},"template":"<prop name='number' priority='40' hide_if_default='true' label='-LABEL-Number' show_label='always'\/>, <prop name='word1' priority='50' hide_if_default='true' label='Word 1' show_label='always'\/>, <prop name='word2' priority='51' hide_if_default='true' label='Word 2' show_label='always'\/>, <prop name='word5' priority='52' hide_if_default='true' label='Word 5' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>"},"ends_with":{"description":"Заканчивается на","name":"Заканчивается на","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/>, <prop name='substring' priority='30' hide_if_default='true' label='Substring' show_label='always'\/>, <prop name='lenght' priority='31' hide_if_default='true' label='Length' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>"},"extract_emails":{"description":"Извлечь все почты","name":"Извлечь все почты","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/> -> <prop name='Save' is_variable='true'\/>"},"extract_phone_numbers":{"description":"Извлечь все телефонные номера","name":"Извлечь все телефонные номера","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/> -> <prop name='Save' is_variable='true'\/>"},"extract_urls":{"description":"Извлечь все ссылки","name":"Извлечь все ссылки","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/> -> <prop name='Save' is_variable='true'\/>"},"filesystem_copyfile":{"description":"Копировать Файл\/Папку","name":"Копировать Файл\/Папку","suggestion":{"en":"","ru":""},"template":"{{Value}} -> {{ValueDest}}"},"filesystem_createdir":{"description":"Создать Папку","name":"Создать Папку","suggestion":{"en":"","ru":""},"template":"{{Value}}"},"filesystem_file_to_list":{"description":"Читать Файл В Список","name":"Читать Файл В Список","suggestion":{"en":"","ru":""},"template":"{{Value}} -> {{Save}}"},"filesystem_fileinfo":{"description":"Информация О Файле\/Папке","name":"Информация О Файле\/Папке","suggestion":{"en":"","ru":""},"template":"<prop name='Value'\/> -> <prop name='SaveExists' priority='30' hide_if_default='true' label='Exists' show_label='always' is_variable='true' \/>, <prop name='SaveSize' priority='31' hide_if_default='true' label='Size' show_label='always' is_variable='true' \/>, <prop name='SaveDirectory' priority='32' hide_if_default='true' label='Folder' show_label='always' is_variable='true' \/>, <prop name='SaveIsDirectory' priority='33' hide_if_default='true' label='Is folder' show_label='always' is_variable='true' \/>, <prop name='SaveLastModified' priority='34' hide_if_default='true' label='Modified' show_label='always' is_variable='true' \/>"},"filesystem_list_to_file":{"description":"Записать Список В Файл","name":"Записать Список В Файл","suggestion":{"en":"","ru":""},"template":"<prop name='Save'\/> -> <prop name='File'\/>, <prop name='Check2' priority='40' hide_if_default='true' label='Line ending' show_label='always'\/>, <prop name='Check' priority='50' hide_if_default='true' label='_LABEL_Append' show_label='always'\/>"},"filesystem_movefile":{"description":"Переместить Файл\/Папку","name":"Переместить Файл\/Папку","suggestion":{"en":"","ru":""},"template":"{{Value}} -> {{ValueDest}}"},"filesystem_readfile":{"description":"Читать Файл","name":"Читать Файл","suggestion":{"en":"","ru":""},"template":"<prop name='Value'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='From' priority='30' hide_if_default='true' label='From' show_label='always'\/>, <prop name='To' priority='30' hide_if_default='true' label='To' show_label='always'\/>, <prop name='Check' priority='60' hide_if_default='true' label='Base64' show_label='always'\/>"},"filesystem_removefile":{"description":"Удалить Файл\/Папку","name":"Удалить Файл\/Папку","suggestion":{"en":"","ru":""},"template":"{{Value}}"},"filesystem_search":{"description":"Поиск Файлов","name":"Поиск Файлов","suggestion":{"en":"","ru":""},"template":"<prop name='Folder'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='Mask' priority='30' hide_if_default='true' label='Mask' show_label='always'\/>, <prop name='FileContains' priority='31' hide_if_default='true' label='Contains' show_label='always'\/>, <prop name='Check2' priority='40' hide_if_default='true' label='Files' show_label='always'\/>, <prop name='Check' priority='41' hide_if_default='true' label='Folders' show_label='always'\/>, <prop name='Check3' priority='42' hide_if_default='true' label='Subfolders' show_label='always'\/>"},"filesystem_writefile":{"description":"Запись В Файл","name":"Запись В Файл","suggestion":{"en":"","ru":""},"template":"<prop name='Value'\/> -> <prop name='File'\/>, <prop name='Check' priority='40' hide_if_default='true' label='Line ending' show_label='always'\/>, <prop name='Check2' priority='50' hide_if_default='true' label='_LABEL_Append' show_label='always'\/>, <prop name='Check3' priority='60' hide_if_default='true' label='Base64' show_label='always'\/>"},"find_substring":{"description":"Найти подстроку","name":"Найти подстроку","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/>, <prop name='substring' priority='30' hide_if_default='true' label='Substring' show_label='always'\/>, <prop name='from' priority='31' hide_if_default='true' label='From' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>"},"generate_url":{"description":"Создать URL","name":"Создать URL","suggestion":{"en":"","ru":""},"template":"<prop name='protocol' priority='30' hide_if_default='true' label='Protocol' show_label='always'\/>, <prop name='username' priority='31' hide_if_default='true' label='Username' show_label='always'\/>, <prop name='password' priority='32' hide_if_default='true' label='Pass' show_label='always'\/>, <prop name='host' priority='33' hide_if_default='true' label='Host' show_label='always'\/>, <prop name='port' priority='34' hide_if_default='true' label='Port' show_label='always'\/>, <prop name='path' priority='35' hide_if_default='true' label='Path' show_label='always'\/>, <prop name='query' priority='36' hide_if_default='true' label='Query' show_label='always'\/>, <prop name='hash' priority='37' hide_if_default='true' label='-LABEL-Fragment' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>"},"get_substring":{"description":"Получить подстроку","name":"Получить подстроку","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/>, <prop name='from' priority='30' hide_if_default='true' label='From' show_label='always'\/>, <prop name='to' priority='31' hide_if_default='true' label='To' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>"},"get_substring_between":{"description":"Получить подстроку между","name":"Получить подстроку между","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/>, <prop name='left' priority='30' hide_if_default='true' label='From' show_label='always'\/>, <prop name='right' priority='31' hide_if_default='true' label='To' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>"},"get_system_path":{"description":"Получить системный путь","name":"Получить системный путь","suggestion":{"en":"","ru":""},"template":"<prop name='Save' is_variable='true' \/>, <prop name='name' label='Name' show_label='always'\/>"},"getthreadnumber":{"description":"Номер потока","name":"Номер потока","suggestion":{"en":"get current thread index, get current thread number","ru":"получить текущий номер потока, получить текущий индекс потока"},"template":"<prop name='Save' is_variable='true' \/>"},"html_special_characters":{"description":"Специальные HTML символы кодировать\/декодировать","name":"Специальные HTML символы кодировать\/декодировать","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='Select' priority='30' label='-LABEL-Type' show_label='always'\/>"},"imageprocessingconvert":{"description":"Изменить формат изображения","name":"Изменить формат изображения","suggestion":{"en":"","ru":""},"template":"<prop name='Id' label='Id' show_label='always'\/>, <prop name='Format' label='Format' show_label='always'\/>"},"imageprocessingcreate":{"description":"Создать пустое изображение","name":"Создать пустое изображение","suggestion":{"en":"","ru":""},"template":"<prop name='Width'\/> : <prop name='Height'\/>, <prop name='ColorR' priority='50' hide_if_default='true' label='r' show_label='always'\/>, <prop name='ColorG' priority='50' hide_if_default='true' label='g' show_label='always'\/>, <prop name='ColorB' priority='50' hide_if_default='true' label='b' show_label='always'\/>, <prop name='ColorA' priority='50' hide_if_default='true' label='a' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>"},"imageprocessingdelete":{"description":"Закончить работу с изображением","name":"Закончить работу с изображением","suggestion":{"en":"","ru":""},"template":"<prop name='Id' label='Id' show_label='always'\/>"},"imageprocessingfill":{"description":"Заполнить прямоугольник цветом","name":"Заполнить прямоугольник цветом","suggestion":{"en":"","ru":""},"template":"<prop name='Id' label='Id' show_label='always'\/>, <prop name='X' label='x' show_label='always' priority='40' hide_if_default='true' \/>, <prop name='Y' label='y' show_label='always' priority='40' hide_if_default='true' \/>, <prop name='Width' label='Width' show_label='always' priority='40' \/>, <prop name='Height' label='Height' show_label='always' priority='40' \/>, <prop name='ColorR' priority='50' hide_if_default='true' label='r' show_label='always' \/>, <prop name='ColorG' priority='50' hide_if_default='true' label='g' show_label='always' \/>, <prop name='ColorB' priority='50' hide_if_default='true' label='b' show_label='always' \/>, <prop name='ColorA' priority='50' hide_if_default='true' label='a' show_label='always' \/>"},"imageprocessingfind":{"description":"Поиск одного изображения в другом","name":"Поиск одного изображения в другом","suggestion":{"en":"","ru":""},"template":"<prop name='Id1' label='Target' show_label='always'\/>, <prop name='Id2' label='Source' show_label='always'\/> -> <prop name='X' is_variable='true' label='X' show_label='always' hide_if_default='true' priority='50' \/>, <prop name='Y' is_variable='true' label='Y' show_label='always' hide_if_default='true' priority='50' \/>, <prop name='Threshold' is_variable='true' label='Threshold' show_label='always' hide_if_default='true' priority='60' \/>"},"imageprocessinggetdata":{"description":"Получить данные изображения","name":"Получить данные изображения","suggestion":{"en":"","ru":""},"template":"<prop name='Id' label='Id' show_label='always'\/> -> {{Save}}"},"imageprocessinggetpixel":{"description":"Получить цвет пикселя","name":"Получить цвет пикселя","suggestion":{"en":"","ru":""},"template":"<prop name='Id' label='Id' show_label='always'\/>, <prop name='X' label='x' show_label='always'\/>, <prop name='Y' label='y' show_label='always'\/> -> <prop name='R' priority='50' hide_if_default='true' label='r' show_label='always' is_variable='true' \/>, <prop name='G' priority='50' hide_if_default='true' label='g' show_label='always' is_variable='true' \/>, <prop name='B' priority='50' hide_if_default='true' label='b' show_label='always' is_variable='true' \/>, <prop name='A' priority='50' hide_if_default='true' label='a' show_label='always' is_variable='true' \/>"},"imageprocessinggetsize":{"description":"Получить размер","name":"Получить размер","suggestion":{"en":"","ru":""},"template":"<prop name='Id' label='Id' show_label='always'\/> -> <prop name='Width' is_variable='true' label='Width' show_label='always' priority='50' \/>, <prop name='Height' is_variable='true' label='Height' show_label='always' priority='50' \/>"},"imageprocessinginsert":{"description":"Вставить одно изображение в другое","name":"Вставить одно изображение в другое","suggestion":{"en":"","ru":""},"template":"<prop name='Id2' label='Id' show_label='always'\/> -> <prop name='Id1'\/>, <prop name='X' label='x' show_label='always' priority='40' \/>, <prop name='Y' label='y' show_label='always' priority='40' \/>"},"imageprocessingload":{"description":"Начать работу с изображением","name":"Начать работу с изображением","suggestion":{"en":"","ru":""},"template":"<prop name='Data' \/> -> <prop name='Save' is_variable='true' \/>"},"imageprocessingresize":{"description":"Изменить размер","name":"Изменить размер","suggestion":{"en":"","ru":""},"template":"<prop name='Id' label='Id' show_label='always'\/>, <prop name='Width' label='Width' show_label='always' priority='50' \/>, <prop name='Height' label='Height' show_label='always' priority='50' \/>"},"imageprocessingsetpixel":{"description":"Установить цвет пикселя","name":"Установить цвет пикселя","suggestion":{"en":"","ru":""},"template":"<prop name='Id' label='Id' show_label='always'\/>, <prop name='X' label='x' show_label='always'\/>, <prop name='Y' label='y' show_label='always'\/>, <prop name='ColorR' priority='50' hide_if_default='true' label='r' show_label='always' \/>, <prop name='ColorG' priority='50' hide_if_default='true' label='g' show_label='always' \/>, <prop name='ColorB' priority='50' hide_if_default='true' label='b' show_label='always' \/>, <prop name='ColorA' priority='50' hide_if_default='true' label='a' show_label='always' \/>"},"imageprocessingsub":{"description":"Получить часть изображения","name":"Получить часть изображения","suggestion":{"en":"","ru":""},"template":"<prop name='Id' label='Id' show_label='always'\/> -> <prop name='Save' is_variable='true' \/>, <prop name='X' label='x' show_label='always' hide_if_default='true' priority='40' \/>, <prop name='Y' label='y' show_label='always' hide_if_default='true' priority='40' \/>, <prop name='Width' label='Width' show_label='always' priority='50' \/>, <prop name='Height' label='Height' show_label='always' priority='50' \/>"},"imageprocessingtext":{"description":"Добавить текст","name":"Добавить текст","suggestion":{"en":"","ru":""},"template":"<prop name='Text' \/> -> <prop name='Id' is_variable='true' \/>, <prop name='X' label='x' show_label='always' hide_if_default='true' priority='40' \/>, <prop name='Y' label='y' show_label='always' hide_if_default='true' priority='40' \/>, <prop name='Width' label='Width' show_label='always' priority='50' \/>, <prop name='Height' label='Height' show_label='always' priority='50' \/>, <prop name='FontFamily' label='Font' show_label='always' priority='60' hide_if_default='true' \/>, <prop name='FontSize' label='Size' show_label='always' priority='60' hide_if_default='true' \/>, <prop name='ColorR' priority='70' hide_if_default='true' label='r' show_label='always' \/>, <prop name='ColorG' priority='70' hide_if_default='true' label='g' show_label='always' \/>, <prop name='ColorB' priority='70' hide_if_default='true' label='b' show_label='always' \/>, <prop name='ColorA' priority='70' hide_if_default='true' label='a' show_label='always' \/>, <prop name='VerticalAlign' priority='80' hide_if_default='true' label='Vertical' show_label='always' \/>, <prop name='HorizontalAlign' priority='80' hide_if_default='true' label='Horizontal' show_label='always' \/>"},"insert_substring":{"description":"Вставить в","name":"Вставить в","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/>, <prop name='index' priority='30' hide_if_default='true' label='Index' show_label='always'\/>, <prop name='substring' priority='31' hide_if_default='true' label='Substring' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>"},"installation_path":{"description":"Путь установки","name":"Путь установки","suggestion":{"en":"","ru":""},"template":"<prop name='Save' is_variable='true' \/>"},"is_absolute_path":{"description":"Является ли абсолютным путем","name":"Является ли абсолютным путем","suggestion":{"en":"","ru":""},"template":"{{path}} -> {{Save}}"},"is_not_empty_string":{"description":"Не пустая строка","name":"Не пустая строка","suggestion":{"en":"","ru":""},"template":"{{data}} -> {{Save}}"},"is_string":{"description":"Является ли строкой","name":"Является ли строкой","suggestion":{"en":"","ru":""},"template":"{{data}} -> {{Save}}"},"join_paths":{"description":"Объединить пути","name":"Объединить пути","suggestion":{"en":"","ru":""},"template":"<prop name='path1' hide_if_default='true' \/>, <prop name='path2' hide_if_default='true' \/>, <prop name='path3' hide_if_default='true' \/>, <prop name='paths_list' \/> -> <prop name='Save' \/>"},"join_strings":{"description":"Объединить строки","name":"Объединить строки","suggestion":{"en":"","ru":""},"template":"<prop name='string1' priority='30' hide_if_default='true' show_label='never'\/>, <prop name='string2' priority='31' hide_if_default='true' show_label='never'\/>, <prop name='string3' priority='32' hide_if_default='true' show_label='never'\/>, <prop name='strings_list' priority='33' hide_if_default='true' show_label='never'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='separator' priority='50' hide_if_default='true' label='Separator' show_label='always'\/>"},"latinize":{"description":"Латинизировать","name":"Латинизировать","suggestion":{"en":"","ru":""},"template":"<prop name='string' \/> -> <prop name='Save' is_variable='true'\/>, <prop name='Check' priority='30' hide_if_default='true' label='Cyrillic' show_label='always'\/>"},"new_line":{"description":"Символ перевода строки","name":"Символ перевода строки","suggestion":{"en":"end of line, eol, line feed, line break, carriage return","ru":"разрыв строки, разделитель строк, переход на новую строку, возврат каретки"},"template":"<prop name='Select' priority='60' \/> -> <prop name='Save' is_variable='true'\/>"},"normalize_path":{"description":"Нормализовать путь","name":"Нормализовать путь","suggestion":{"en":"","ru":""},"template":"<prop name='path' \/> -> <prop name='Save' \/>, <prop name='Check' priority='60' hide_if_default='true' label='Remove slashes' show_label='always'\/>"},"normalize_url":{"description":"Нормализовать URL","name":"Нормализовать URL","suggestion":{"en":"","ru":""},"template":"<prop name='url'\/> -> <prop name='Save' is_variabl='true'\/>, <prop name='default_protocol' priority='40' hide_if_default='true' label='Default protocol' show_label='always'\/>, <prop name='base_url' priority='31' hide_if_default='true' label='Base URL' show_label='always'\/>, <prop name='remove_query_parameters' priority='32' hide_if_default='true' label='Remove query parameters' show_label='always'\/>, <prop name='remove_directory_index' priority='33' hide_if_default='true' label='Remove directory index' show_label='always'\/>, <prop name='Check' priority='34' hide_if_default='true' label='Normalize protocol' show_label='always'\/>, <prop name='Check2' priority='35' hide_if_default='true' label='Force http' show_label='always'\/>, <prop name='Check3' priority='36' hide_if_default='true' label='Force https' show_label='always'\/>, <prop name='Check4' priority='37' hide_if_default='true' label='Strip authentication' show_label='always'\/>, <prop name='Check5' priority='38' hide_if_default='true' label='Strip query' show_label='always'\/>, <prop name='Check6' priority='39' hide_if_default='true' label='Strip fragment' show_label='always'\/>, <prop name='Check7' priority='40' hide_if_default='true' label='Strip protocol' show_label='always'\/>, <prop name='Check8' priority='41' hide_if_default='true' label='Strip WWW' show_label='always'\/>, <prop name='Check9' priority='42' hide_if_default='true' label='Remove trailing slash' show_label='always'\/>, <prop name='Check10' priority='43' hide_if_default='true' label='Sort query params' show_label='always'\/>"},"number_format":{"description":"Форматировать число","name":"Форматировать число","suggestion":{"en":"","ru":""},"template":"<prop name='number'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='decimals' priority='40' hide_if_default='true' label='Decimal number' show_label='always'\/>, <prop name='digits' priority='41' hide_if_default='true' label='Char number' show_label='always'\/>, <prop name='dec_point' priority='61' hide_if_default='true' label='-LABEL-Decimal separator' show_label='always'\/>, <prop name='thousands_sep' priority='62' hide_if_default='true' label='Thousandth separator' show_label='always'\/>"},"parse_csv_string":{"description":"Парсить CSV строку","name":"Парсить CSV строку","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/> -> <prop name='VariablesList' is_variable='true'\/>, <prop name='ResultAsList' priority='30' hide_if_default='true' label='List' show_label='always' is_variable='true' \/>, <prop name='separators' priority='40' hide_if_default='true' label='Separators' show_label='always'\/>, <prop name='Check' priority='50' hide_if_default='true' label='Convert' show_label='always'\/>"},"parse_path":{"description":"Парсить путь","name":"Парсить путь","suggestion":{"en":"","ru":""},"template":"<prop name='path' \/> -> <prop name='items' \/>, <prop name='root' priority='40' hide_if_default='true' label='Root' show_label='always' is_variable='true'\/>, <prop name='dir' priority='41' hide_if_default='true' label='Folder' show_label='always' is_variable='true'\/>, <prop name='base' priority='42' hide_if_default='true' label='Last part' show_label='always' is_variable='true'\/>, <prop name='ext' priority='43' hide_if_default='true' label='Extension' show_label='always' is_variable='true'\/>, <prop name='name' priority='44' hide_if_default='true' label='Name' show_label='always' is_variable='true'\/>"},"parse_ua":{"description":"Парсить User-Agent","name":"Парсить User-Agent","suggestion":{"en":"","ru":""},"template":"<prop name='ua'\/> -> <prop name='platform_type' priority='30' hide_if_default='true' label='Platform' show_label='always' is_variable='true'\/>, <prop name='browser_name' priority='31' hide_if_default='true' label='Browser name' show_label='always' is_variable='true'\/>, <prop name='browser_version' priority='32' hide_if_default='true' label='Browser version' show_label='always' is_variable='true'\/>, <prop name='browser_major_version' priority='33' hide_if_default='true' label='Browser major version' show_label='always' is_variable='true'\/>, <prop name='engine_name' priority='34' hide_if_default='true' label='Engine name' show_label='always' is_variable='true'\/>, <prop name='engine_version' priority='35' hide_if_default='true' label='Engine version' show_label='always' is_variable='true'\/>, <prop name='os_name' priority='36' hide_if_default='true' label='OS name' show_label='always' is_variable='true'\/>, <prop name='os_version' priority='37' hide_if_default='true' label='OS version' show_label='always' is_variable='true'\/>, <prop name='device_vendor' priority='38' hide_if_default='true' label='Device vendor' show_label='always' is_variable='true'\/>, <prop name='device_model' priority='39' hide_if_default='true' label='Device model' show_label='always' is_variable='true'\/>, <prop name='device_type' priority='40' hide_if_default='true' label='Device type' show_label='always' is_variable='true'\/>"},"parse_url":{"description":"Парсить URL","name":"Парсить URL","suggestion":{"en":"","ru":""},"template":"<prop name='url'\/>, <prop name='base_url' priority='60' hide_if_default='true' label='Base URL' show_label='always'\/>, <prop name='Check' priority='61' hide_if_default='true' label='Normalize' show_label='always'\/>, <prop name='Check2' priority='62' hide_if_default='true' label='Fail' show_label='always'\/> -> <prop name='protocol' priority='30' hide_if_default='true' label='Protocol' show_label='always' is_variable='true' \/>, <prop name='username' priority='31' hide_if_default='true' label='Username' show_label='always' is_variable='true' \/>, <prop name='password' priority='32' hide_if_default='true' label='Pass' show_label='always' is_variable='true' \/>, <prop name='host' priority='33' hide_if_default='true' label='Host' show_label='always' is_variable='true' \/>, <prop name='port' priority='34' hide_if_default='true' label='Port' show_label='always' is_variable='true' \/>, <prop name='path' priority='35' hide_if_default='true' label='Path' show_label='always' is_variable='true' \/>, <prop name='query' priority='36' hide_if_default='true' label='Query' show_label='always' is_variable='true' \/>, <prop name='hash' priority='37' hide_if_default='true' label='-LABEL-Fragment' show_label='always' is_variable='true' \/>"},"path_base_name":{"description":"Получить имя файла из пути","name":"Получить имя файла из пути","suggestion":{"en":"","ru":""},"template":"<prop name='path'\/> -> <prop name='Save'\/>, <prop name='ext' priority='50' hide_if_default='true' label='Remove ext' show_label='always'\/>"},"path_directory_name":{"description":"Получить папку из пути","name":"Получить папку из пути","suggestion":{"en":"","ru":""},"template":"{{path}} -> {{Save}}"},"path_extension_name":{"description":"Получить расширение файла","name":"Получить расширение файла","suggestion":{"en":"","ru":""},"template":"{{path}} -> {{Save}}"},"project_directory":{"description":"Путь к директории проекта","name":"Путь к директории проекта","suggestion":{"en":"","ru":""},"template":"<prop name='Save' is_variable='true' \/>"},"punycode":{"description":"Punycode кодировать\/декодировать","name":"Punycode кодировать\/декодировать","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/> -> <prop name='Save' is_variable='true' \/>, <prop name='Select' priority='30' label='-LABEL-Type' show_label='always'\/>"},"randomstring":{"description":"Случайная строка","name":"Случайная строка","suggestion":{"en":"","ru":""},"template":"<prop name='Save' is_variable='true'\/>, <prop name='Length' show_label='always' label='Length'\/>, <prop name='AllowedChars' priority='30' hide_if_default='true' label='Chars' show_label='always'\/>"},"remove_string_part":{"description":"Удалить часть строки","name":"Удалить часть строки","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/>, <prop name='from' priority='30' hide_if_default='true' label='From' show_label='always'\/>, <prop name='count' priority='31' hide_if_default='true' label='Count' show_label='always'\/>, <prop name='substring' priority='32' hide_if_default='true' label='Insert' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>"},"replacestring":{"description":"Заменить строку","name":"Заменить строку","suggestion":{"en":"","ru":""},"template":"<prop name='Value'\/>, <prop name='ReplaceFrom' priority='30' hide_if_default='true' label='-LABEL-REPLACE-From' show_label='always'\/>, <prop name='ReplaceTo' priority='31' hide_if_default='true' label='-LABEL-REPLACE-To' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>"},"script_stats_fail_number":{"description":"Неудачных выполнений","name":"Неудачных выполнений","suggestion":{"en":"","ru":""},"template":"<prop name='Save' is_variable='true' \/>"},"script_stats_is_record":{"description":"Включен ли режим записи","name":"Включен ли режим записи","suggestion":{"en":"","ru":""},"template":"<prop name='Save' is_variable='true' \/>"},"script_stats_project_path":{"description":"Путь к файлу проекта","name":"Путь к файлу проекта","suggestion":{"en":"","ru":""},"template":"<prop name='Save' is_variable='true' \/>"},"script_stats_success_number":{"description":"Успешных выполнений","name":"Успешных выполнений","suggestion":{"en":"","ru":""},"template":"<prop name='Save' is_variable='true' \/>"},"smtp_enable_debug":{"description":"Включить отладку","name":"Включить отладку","suggestion":{"en":"","ru":""},"template":"<prop name='EnableDebug' \/>"},"smtp_send_mail":{"description":"Отправить письмо","name":"Отправить письмо","suggestion":{"en":"send message, send email","ru":"отправить почту"},"template":"<prop name='MailBody' hide_if_default='true' \/>, <prop name='MailFrom' priority='40' hide_if_default='true' label='From' show_label='always'\/>, <prop name='MailTo' priority='41' hide_if_default='true' label='To' show_label='always'\/>, <prop name='CC' priority='42' hide_if_default='true' label='CC' show_label='always'\/>, <prop name='Subject' priority='43' hide_if_default='true' label='Subject' show_label='always'\/>, <prop name='Check' priority='44' hide_if_default='true' label='HTML' show_label='always'\/>, <prop name='Attachments' priority='45' hide_if_default='true' label='Attachments' show_label='always'\/>"},"smtp_set_proxy":{"description":"SMTP Прокси","name":"SMTP Прокси","suggestion":{"en":"","ru":""},"template":"<prop name='ProxyText' \/>, <prop name='ProxyType' show_label='always' label='Proxy type' hide_if_default='true' priority='20' \/>, <prop name='ProxyLogin' show_label='always' label='Login' hide_if_default='true' priority='30' \/>, <prop name='ProxyPassword' show_label='always' label='Password' hide_if_default='true' priority='30' max_size='6' \/>"},"smtp_set_settings":{"description":"SMTP Настройки","name":"SMTP Настройки","suggestion":{"en":"","ru":""},"template":"<prop name='Host' hide_if_default='true' label='Server' \/>, <prop name='Port' priority='40' hide_if_default='true' label='Port' show_label='always'\/>, <prop name='Username' priority='50' label='Login' hide_if_default='true' show_label='always'\/>, <prop name='Password' label='Pass' hide_if_default='true' show_label='always' max_size='6' priority='60' \/>, <prop name='Select' label='Encryption' hide_if_default='true' show_label='always' priority='70' \/>"},"split_to_lines":{"description":"Разделить текст на строки","name":"Разделить текст на строки","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/>, <prop name='separator' priority='30' hide_if_default='true' label='Separator' show_label='always'\/>, <prop name='Check' priority='31' hide_if_default='true' label='Remove empty' show_label='always'\/>, <prop name='limit' priority='32' hide_if_default='true' label='Limit' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>"},"split_to_sentences":{"description":"Разделить текст на предложения","name":"Разделить текст на предложения","suggestion":{"en":"","ru":""},"template":"{{string}} -> {{Save}}"},"split_to_words":{"description":"Разделить предложение на слова","name":"Разделить предложение на слова","suggestion":{"en":"","ru":""},"template":"{{string}} -> {{Save}}"},"starts_with":{"description":"Начинается с","name":"Начинается с","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/>, <prop name='substring' priority='30' hide_if_default='true' label='Substring' show_label='always'\/>, <prop name='from' priority='31' hide_if_default='true' label='From' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>"},"string_contains":{"description":"Содержит","name":"Содержит","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/>, <prop name='substring' priority='30' hide_if_default='true' label='Substring' show_label='always'\/>, <prop name='from' priority='31' hide_if_default='true' label='From' show_label='always'\/> -> <prop name='Save' is_variable='true'\/>"},"string_length":{"description":"Получить длину","name":"Получить длину","suggestion":{"en":"","ru":""},"template":"{{string}} -> {{Save}}"},"template":{"description":"Шаблон","name":"Шаблон","suggestion":{"en":"randomize string, random string, spintax, multiline string","ru":"рандомизировать, случайная строка, спинтакс, многострочная переменная"},"template":"<prop name='Template'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='Check2' priority='30' hide_if_default='true' label='Spintax' show_label='always'\/>, <prop name='Check3' priority='31' hide_if_default='true' label='Variables' show_label='always'\/>, <prop name='Check' priority='32' hide_if_default='true' label='Additional' show_label='always'\/>"},"timezones_ip_info":{"description":"Сведения об ип","name":"Сведения об ип","suggestion":{"en":"","ru":""},"template":"<prop name='Value' \/>, <prop name='DetectExternalIp' show_label='always' label='External ip' hide_if_default='true' priority='60' \/>, <prop name='IpInfoMethod' show_label='always' label='Ip info' hide_if_default='true' priority='80' \/>, <prop name='IpApiKey' show_label='always' label='ip-api key' hide_if_default='true' priority='80' max_size='8' \/> -> <prop name='SaveValid' priority='30' hide_if_default='true' label='Valid' show_label='always' is_variable='true' \/>, <prop name='SaveCountry' priority='31' hide_if_default='true' label='Country' show_label='always' is_variable='true'\/>, <prop name='SaveCity' priority='32' hide_if_default='true' label='City' show_label='always' is_variable='true'\/>, <prop name='SaveLatitude' priority='33' hide_if_default='true' label='Latitude' show_label='always' is_variable='true'\/>, <prop name='SaveLongitude' priority='34' hide_if_default='true' label='Longitude' show_label='always' is_variable='true'\/>, <prop name='SaveTimezone' priority='35' hide_if_default='true' label='Timezone' show_label='always' is_variable='true'\/>, <prop name='SaveOffset' priority='36' hide_if_default='true' label='Offset' show_label='always' is_variable='true'\/>, <prop name='SaveDstOffset' priority='37' hide_if_default='true' label='DST Offset' show_label='always' is_variable='true'\/>"},"timezones_set_geolocation":{"description":"Установить координаты","name":"Установить координаты","suggestion":{"en":"","ru":""},"template":"<prop name='Latitude' priority='30' hide_if_default='true' label='Latitude' show_label='always'\/>, <prop name='Longitude' priority='30' hide_if_default='true' label='Longitude' show_label='always'\/>, <prop name='GeolocationObject' priority='30' hide_if_default='true' label='Object' show_label='always'\/>"},"timezones_set_timezone":{"description":"Установить часовой пояс","name":"Установить часовой пояс","suggestion":{"en":"","ru":""},"template":"<prop name='Value' hide_if_default='true' label='Offset' show_label='always'\/>, <prop name='TimezoneName' hide_if_default='true' priority='40' label='Timezone' show_label='always'\/>"},"timezones_set_timezone_and_geolocation_by_ip":{"description":"Установить месторасположение браузера по ип","name":"Установить месторасположение браузера по ип","suggestion":{"en":"","ru":""},"template":"<prop name='Value' \/>, <prop name='ChangeTimezone' show_label='always' label='Timezone' hide_if_default='true' priority='60' \/>, <prop name='ChangeGeolocation' show_label='always' label='Geolocation' hide_if_default='true' priority='60' \/>, <prop name='ChangeWebrtcIp' show_label='always' label='Webrtc ip' hide_if_default='true' priority='60' \/>, <prop name='ChangeBrowserLanguage' show_label='always' label='Language' hide_if_default='true' priority='60' \/>, <prop name='DetectExternalIp' show_label='always' label='External ip' hide_if_default='true' priority='60' \/>, <prop name='IpInfoMethod' show_label='always' label='Ip info' hide_if_default='true' priority='80' \/>, <prop name='IpApiKey' show_label='always' label='ip-api key' hide_if_default='true' priority='80' max_size='8' \/>"},"to_lower_case":{"description":"В нижний регистр","name":"В нижний регистр","suggestion":{"en":"","ru":""},"template":"{{string}} -> {{Save}}"},"to_number":{"description":"В число","name":"В число","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='decimals' priority='60' hide_if_default='true' label='Signs' show_label='always'\/>, <prop name='dec_point' priority='61' hide_if_default='true' label='-LABEL-Decimal separator' show_label='always'\/>, <prop name='thousands_sep' priority='62' hide_if_default='true' label='Thousandth separator' show_label='always'\/>"},"to_string":{"description":"В строку","name":"В строку","suggestion":{"en":"","ru":""},"template":"{{data}} -> {{Save}}"},"to_upper_case":{"description":"В верхний регистр","name":"В верхний регистр","suggestion":{"en":"","ru":""},"template":"{{string}} -> {{Save}}"},"trim":{"description":"Подровнять","name":"Подровнять","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/> -> <prop name='Save' is_variable='true'\/>, <prop name='Check' priority='40' hide_if_default='true' label='Spaces' show_label='always'\/>, <prop name='Check2' priority='41' hide_if_default='true' label='Line breaks' show_label='always'\/>, <prop name='Check3' priority='42' hide_if_default='true' label='-LABEL-Tabs' show_label='always'\/>, <prop name='characters' priority='45' hide_if_default='true' label='Characters' show_label='always'\/>, <prop name='Check5' priority='51' hide_if_default='true' label='Left' show_label='always'\/>, <prop name='Check6' priority='52' hide_if_default='true' label='Right' show_label='always'\/>"},"url_component":{"description":"Url компонент кодировать\/декодировать","name":"Url компонент кодировать\/декодировать","suggestion":{"en":"","ru":""},"template":"<prop name='string'\/> -> <prop name='Save' is_variable='true' \/>, <prop name='Select' priority='30' label='-LABEL-Type' show_label='always'\/>"},"user_notification_manual_browser_control":{"description":"Ручное управление браузером","name":"Ручное управление браузером","suggestion":{"en":"interact with the browser, direct browser control","ru":"взаимодействовать с браузером, прямое управление браузером"},"template":"{{Label}}"},"user_notification_play_sound":{"description":"Воспроизвести Звук","name":"Воспроизвести Звук","suggestion":{"en":"","ru":""},"template":""},"user_notification_user_input":{"description":"Запросить ввод от пользователя","name":"Запросить ввод от пользователя","suggestion":{"en":"","ru":""},"template":"<prop name='Variable' is_variable='true' \/>, <prop name='Label' priority='50' hide_if_default='true' label='Text' show_label='always'\/>"},"user_notification_web_interface_eval":{"description":"Выполнить яваскрипт в веб интерфейсе","name":"Выполнить яваскрипт в веб интерфейсе","suggestion":{"en":"","ru":""},"template":"{{Code}}"}});_G = $.extend(_G,{"BACKPACK":{"icon":"..\/..\/custom\/BACKPACK\/icon.png"},"Checksum":{"icon":"..\/..\/modules\/Checksum\/Checksum.png"},"Clipboard":{"icon":"..\/..\/modules\/Clipboard\/clipboard.png"},"Database":{"icon":"..\/..\/modules\/Database\/database.png"},"DateTime":{"icon":"..\/..\/modules\/DateTime\/datetime.png"},"EmbeddedLanguages":{"icon":"..\/..\/modules\/EmbeddedLanguages\/languages.png"},"FileSystem":{"icon":"..\/..\/modules\/FileSystem\/filesystem.png"},"FingerprintSwitcher":{"icon":"..\/..\/modules\/FingerprintSwitcher\/fingerprintswitcher.png"},"FunctionAsyncCall":{"icon":"..\/..\/modules\/FunctionAsyncCall\/async.png"},"IdleEmulation":{"icon":"..\/..\/modules\/IdleEmulation\/idleemulation.png"},"ImageProcessing":{"icon":"..\/..\/modules\/ImageProcessing\/imageprocessing.png"},"InMail":{"icon":"..\/..\/modules\/InMail\/mail.png"},"JSON":{"icon":"..\/..\/modules\/JSON\/json.png"},"List":{"icon":"..\/..\/modules\/List\/list.png"},"Path":{"icon":"..\/..\/modules\/Path\/path.png"},"PhoneVerification":{"icon":"..\/..\/modules\/PhoneVerification\/SMS.png"},"Processes":{"icon":"..\/..\/modules\/Processes\/processes.png"},"Profiles":{"icon":"..\/..\/modules\/Profiles\/profiles.png"},"RABBY":{"icon":"..\/..\/custom\/RABBY\/icon.png"},"RegularExpression":{"icon":"..\/..\/modules\/RegularExpression\/RegularExpression.png"},"Resources":{"icon":"..\/..\/modules\/Resources\/Resources.png"},"START":{"icon":"..\/..\/custom\/START\/icon.png"},"ScriptStats":{"icon":"..\/..\/modules\/ScriptStats\/scriptstats.png"},"SmtpClient":{"icon":"..\/..\/modules\/SmtpClient\/SmtpClient.png"},"String":{"icon":"..\/..\/modules\/String\/string.png"},"Telegram":{"icon":"..\/..\/modules\/Telegram\/message.png"},"Timezones":{"icon":"..\/..\/modules\/Timezones\/timezones.png"},"URL":{"icon":"..\/..\/modules\/URL\/URL.png"},"UserNotification":{"icon":"..\/..\/modules\/UserNotification\/usernotification.png"},"Xpath":{"icon":"..\/..\/modules\/Xpath\/xpath.png"}});_U = [{"description":"Архив","icon":"..\/..\/modules\/Archive\/Archive.png","name":"Archive"},{"description":"Excel","icon":"..\/..\/modules\/Excel\/Excel.png","name":"Excel"},{"description":"FTP\/SSH","icon":"..\/..\/modules\/FTP\/FTP.png","name":"FTP"},{"description":"Решение FunCaptcha","icon":"..\/..\/modules\/FunCaptcha\/captcha.png","name":"FunCaptcha"},{"description":"Решение HCaptcha","icon":"..\/..\/modules\/HCaptcha\/captcha.png","name":"HCaptcha"},{"description":"Почта (устаревшее)","icon":"..\/..\/modules\/MailDeprecated\/email.png","name":"MailDeprecated"},{"description":"Решение ReCaptcha","icon":"..\/..\/modules\/ReCaptcha\/ReCaptcha.png","name":"ReCaptcha"},{"description":"Получить смс (устаревшее)","icon":"..\/..\/modules\/SmsReceive\/SmsReceive.png","name":"SmsReceive"},{"description":"SQL","icon":"..\/..\/modules\/SQL\/SQL.png","name":"SQL"}]; </script>

  <!-- ========= -->
  <!--   Styles  -->
  <!-- ========= -->
  <link rel="stylesheet" href="bootstrap.min.css">
  <link rel="stylesheet" href="style.css">
  <link rel="stylesheet" href="font-awesome.min.css">
  <link rel="stylesheet" href="expressioneditor.css">
  <link rel="stylesheet" href="rappid.css">
  <link rel="stylesheet" href="bootstrap-checkbox.css">
  <link rel="stylesheet" href="toastr.min.css">
  <link rel="stylesheet" href="nice-forms.css">
  <link rel="stylesheet" href="slimselect.css">

  <!-- Modal Dialogs (styles) -->
  <link rel="stylesheet" href="./dialogs/dialogs.css">

  <!-- Actions Search (styles) -->
  <link rel="stylesheet" href="./search/search.css">

  <!-- =============== -->
  <!-- Javascript code -->
  <!-- =============== -->
  <script type="text/javascript">
    var _Filter = new Filter();
    var _Filters = new Filters();

    bootbox.setLocale(_K);

    function OnInputKeyPress(e)
    {
      var charCode = !e.charCode ? e.which : e.charCode;
      var IsGoodchar =  (charCode == ','.charCodeAt(0) && $(e.target).is("[data-append-array]")) || charCode >= 'A'.charCodeAt(0) && charCode <= 'Z'.charCodeAt(0) || charCode >= 'a'.charCodeAt(0) && charCode <= 'z'.charCodeAt(0) || charCode == '_'.charCodeAt(0) || charCode >= '0'.charCodeAt(0) && charCode <= '9'.charCodeAt(0)
      if(!IsGoodchar)
          e.preventDefault();
    }

    var TaskModel = Backbone.Model.extend({
        defaults: {
            name: "",
            description: "",
            ref: ""
        }
    });
    var ResourceModel = Backbone.Model.extend({
        defaults: {
            name: "",
            description: "",
            type: ""
        }
    });
    var VariableModel = Backbone.Model.extend({
        defaults: {
            name: "",
            global: false
        }
    });
    var FunctionModel = Backbone.Model.extend({
        defaults: {
            name: "",
            properties: null
        }
    });
    var LabelModel = Backbone.Model.extend({
        defaults: {
            name: ""
        }
    });
    var GobalModel = Backbone.Model.extend({
        defaults: {
            state: "main",
            isedit: false,
            x: "",
            y: "",
            index: 0
        },
        GetPageInfo: function()
        {
          var state = this.get("state")
          var task = _TaskCollection.find(function(item){
            return item.get("ref") == state
          });
          if(task)
            return task.get("name")

          return null;
          
        },
        GetGroupInfo: function()
        {
          var state = this.get("state")

          var CurrentGroupName = null
          var CurrentGroupIcon = null
          var CurrentGroupDescription = null

          for(var i=0; i<_TaskCollection.length; i++)
          {
            var el = _TaskCollection.models[i]
            if(el.get("type") == "group")
            {
              CurrentGroupName = el.get("name")
              CurrentGroupIcon = el.get("icon")
              CurrentGroupDescription = el.get("description")
            }if(el.get("ref") == state)
            {
              return {name: CurrentGroupName, icon: CurrentGroupIcon, description: CurrentGroupDescription}
            }
          }

          return null;
          
        },
    });
    var SelectorModel = Backbone.Model.extend({
        defaults: {
            css: "",
            css1: "",
            css2: "",
            css3: "",
            match: "",
            xpath: "",
            mousex: 0,
            mousey: 0,
            current: "css",
            is_editing: false,
            is_image:false,
            image_data:"",
            version: "1.0",
            is_ai_generated: false,
            ai_generated_name: ""
        }
    });

    function BrowserAutomationStudio_HasPathChoice()
    {
      var m = _SelectorModel.toJSON()
      return m["current"] == "css" && m["is_editing"] == false && (("css1" in m && m["css1"].length > 0) + ("css2" in m && m["css2"].length > 0) + ("css3" in m && m["css3"].length > 0) > 1)
    }

    

    var TaskCollection = Backbone.Collection.extend({
        model: TaskModel
    });
    var ResourceCollection = Backbone.Collection.extend({
        model: ResourceModel
    });
    var VariableCollection = Backbone.Collection.extend({
        model: VariableModel
    });
    var GlobalVariableCollection = Backbone.Collection.extend({
        model: VariableModel
    });
    var FunctionCollection = Backbone.Collection.extend({
        model: FunctionModel
    });
    var LabelCollection = Backbone.Collection.extend({
        model: LabelModel
    });

    var MainView = Backbone.View.extend({
      el: '#container',

      currentInputLabel: "none",

      events: {
        "click #ok": "accept",
        "click #WaitingDisable": "interrupt",
        //"mouseover .toolbutton": "showtooltip",
        "click #backtomain": "backtomain",
        "click #backtomainfromtopmenu": "backtomainfromtopmenu",
        "click #backtohomefromtopmenu": "backtohomefromtopmenu",
        "show.bs.modal #LabelModal": "labeladdstart",
        "mousedown .var": "varaddstarttrigger",
        "mousedown .res": "resaddstarttrigger",
        "mousedown .func": "funcaddstarttrigger",
        "click #PathCount": "nextpath",

        "click .labelok": "labeladd",
        "click .timeoutok": "timeoutadd",
        "click .timeoutdefault": "timeoutdefault",
        "click .groupshow": "groupshow",
        "click .returntomain": "returntomain",
        "click #showhistory": "showhistory",
        "click #showbookmarks": "showbookmarks",
        "mouseup #showhistory": "showhistorymouseup",
        "mouseup #showbookmarks": "showbookmarksmouseup",

        "mousedown .edit": "editstart",
        "click .specialletter": "specialletter",
        "click .execute-type-item": "clickExecuteType",
        "click #css":"css",
        "click #match":"match",
        "click #xpath":"xpath",
        "click #at":"at",
        "click #none":"none",
        "click .string": "string",
        "click .expression": "expression",
        "click .int": "int",
        "mousedown .variant": "selectvariant",
        "click .addtopost": "addpostdata",
        "click .addtopostfile": "addpostdatafile",
        "click .addtopostbase64": "addpostdatabase64",

        "click #use-waiter": "usewaiterchange",
        "click #use-timeout": "usetimeoutchange",
        "click #use-target": "usetargetchange",
        "click #use-move": "usemovechange",
        "click #use-emulation": "useemulationchange",
        "click #use-scroll-params": "usescrollparamschange",

        "click #searchclear": "searchclearclick",
        "click #searchinput": "searchinputclick",
        "focus #searchinput": "searchinputfocus",
        "blur #searchinput": "searchinputblur",
        "input #searchinput": "searchinput",
        
        "focus .dropdown-menu-path": "dropdownmenupathfocus",
        "blur .dropdown-menu-path": "dropdownmenupathblur",
        "click .dropdown-menu-path": "stoppropagation",
        "keyup .dropdown-menu-path": "pathchanged",
        "mousedown .dropdown-menu-css-item": "dropdownmenupathselectitem",

        "change #Table": "tablechange",
        "mouseenter .tool": "toolmouseenter",
        "mouseleave .tool": "toolmouseleave",

        "focus .input_selector_string": "input_selector_focus",
        "blur .input_selector_string": "input_selector_blur",

        "focus .input_selector_number": "input_selector_focus",
        "blur .input_selector_number": "input_selector_blur",

        "focus .variable-input": "input_selector_focus",
        "blur .variable-input": "input_selector_blur",

        "focus .function-input": "input_selector_focus",
        "blur .function-input": "input_selector_blur",

        "focus .resource-input": "input_selector_focus",
        "blur .resource-input": "input_selector_blur",

        "change #checkbox-image-show-data": "toggleimageshowdata",
        "change #ImageBase64": "imagebase64changed",
        "click #ImageDataRef": "showimage",
        
        "input .variable-input": function ({ target }) {
          target.value = target.value.toUpperCase();
        },
     },

      nextpath: function(event)
      {
        var Total = parseInt($("#PathCount").text())
        if(Total > 0 && $("#selector-input").length > 0 && $("#selector-input").val().length > 0)
        {
          BrowserAutomationStudio_IncrementHighlightIndex()
        }
      },

      showimage: function(event)
      {
        event.preventDefault();
        event.stopPropagation();
        var dialog = bootbox.alert({
          message: $("<img/>").attr("src",$("#ImageData").attr("src")).attr("class","img-responsive")[0].outerHTML
   
        });
      },

      imagebase64changed:function()
      {
        var data = $("#ImageBase64").val()
        $("#ImageData").attr("src","data:image/png;base64," + data)
      },

      toggleimageshowdata:function()
      {
        if($("#checkbox-image-show-data").prop("checked"))
        {
          $("#ImageBase64Container").show()
        }else
        {
          $("#ImageBase64Container").hide()
        }
      },

      pathchanged:function()
      {
        _MultiSelectManager.PathManualyEdited()
        BrowserAutomationStudio_TestPathInternal();
      },


      input_selector_focus:function(event)
      {
        $(event.target).siblings(".input-field-dropdown").show();
        $(event.target).trigger('show.bs.dropdown');
      },

      input_selector_blur:function(event)
      {
        $(event.target).siblings(".input-field-dropdown").hide();
        $(event.target).trigger('hide.bs.dropdown');
      },


      toolmouseenter:function(event)
      {
        $(event.target).closest(".tool").addClass("toolhover")
      },

      toolmouseleave:function(event)
      {
        $(event.target).closest(".tool").removeClass("toolhover")
      },

      showhistory:function(event)
      {
        event.preventDefault();
        event.stopPropagation();
        BrowserAutomationStudio_ShowHideHistory();
      },

      showbookmarks:function(event)
      {
        event.preventDefault();
        event.stopPropagation();
        BrowserAutomationStudio_ShowHideBookmarks();
      },

      showhistorymouseup:function(event)
      {
        $("#showhistory").blur();
      },

      showbookmarksmouseup:function(event)
      {
        $("#showbookmarks").blur();
      },

      returntomain:function(event)
      {
        event.preventDefault();
        event.stopPropagation();
        BrowserAutomationStudio_ReturnToMainFunction();
      },

      groupshow:function(event)
      {
        event.preventDefault();
        event.stopPropagation();
        if($(event.target).closest(".panelgrid").hasClass("panelunused"))
        {
          var ModuleName = $(event.target).closest(".panelgrid").attr("data-task-name")
          var ModuleDescription = $(event.target).closest(".panelgrid").find(".panelgridtitleinner").text()
          //Clicked on unused module
          BrowserAutomationStudio_AskEnableModule(ModuleName, ModuleDescription)
          return
        }
        if(CurrentGroup == "")
        {
          var group = $(event.target).closest("a").attr("data-group")
          if(group == "ai")
          {
            BrowserAutomationStudio_StartHelper();
            return;
          }
          BrowserAutomationStudio_GotoGroup(group);
        }else
        {
          BrowserAutomationStudio_ReturnToMainFunction();
        }

      },

      tablechange:function(event)
      {
        $("*[data-table-id]").hide()
        $("*[data-table-id=" + $("#Table").val() + "]").show()
        _Filter.Clear()
      },

     
      interrupt: function(event)
      {
        event.preventDefault();
        $("#InterruptMessage").show();
        $("#WaitingDisable").hide();
        BrowserAutomationStudio_Interrupt()
      },

      stoppropagation: function(event)
      {
        event.stopPropagation();
      },

      dropdownmenupathselectitem: function(event)
      {
          event.preventDefault();
          event.stopPropagation();

          $(".dropdown-menu-css-item").removeAttr("data-selected")
          $(event.target).closest("a").attr("data-selected","true")

          $(".dropdown-menu-path").val($(event.target).closest("a").text())
          $(".dropdown-menu-path").blur();
          $(".dropdown-menu-css-options").hide()
          $(".dropdown-menu-match-xpath-at-css-options").hide()
          BrowserAutomationStudio_TestPathInternal()
      },

      dropdownmenupathblur: function(event)
      {
          $(".dropdown-menu-css-options").hide()  
          $(".dropdown-menu-match-xpath-at-css-options").hide()
      },

      dropdownmenupathfocus: function(event)
      {
        var current = _SelectorModel.get("current")
        if(current == "css")
        {
          $(".dropdown-menu-css-options").show()
          
        }else if(current == "match" || current == "xpath" || current == "at")
        {
          $(".dropdown-menu-match-xpath-at-css-options").show()
        }      
      },

      searchinput: _.debounce(function (event) {
        const query = $(event.target).val().trim();

        if (query) {
          _SearchManager.search(query);
        } else {
          _SearchManager.recent();
        }
      }, 500),

      searchinputclick: function(event)
      {
        _SearchManager.show();
      },

      searchclearclick: function(event)
        {
        _SearchManager.hide();
      },

      searchinputfocus: function(event)
      {
        $(event.target).attr("placeholder", 
          tr("Search by action name, name part or keyword. Examples: 'Ignore Errors', 'phone'."));
      },

      searchinputblur: function(event)
      {
        $(event.target).attr("placeholder", 
          tr("What to search?"));
      },

      usewaiterchange: function(event)
      {
        event.preventDefault();
        var el = $(event.target).closest("a")
        var new_state = el.attr("data-enabled") != "true"
        el.attr("data-enabled",((new_state) ? "true" : "false") );
        el.removeClass().addClass(((new_state) ? "use-waiter-enabled" : "use-waiter-disabled") );
      },

      usetimeoutchange: function(event)
      {
        event.preventDefault();
        var el = $(event.target).closest("a");
        $('#TimeoutModal').modal() 
        $("#TimeoutValue").val(el.attr("data-value"))
      },

      usetargetchange: function(event)
      {
        event.preventDefault();
        var el = $(event.target).closest("a")
        var new_state = el.attr("data-enabled") != "true"
        el.attr("data-enabled",((new_state) ? "true" : "false") );
        el.removeClass().addClass(((new_state) ? "use-target-enabled" : "use-target-disabled") );
        if(new_state)
        {
          $("#target-data").show()
        }else
        {
          $("#target-data").hide()
        }
      },

      usemovechange: function(event)
      {
        event.preventDefault();
        var el = $(event.target).closest("a")
        var new_state = el.attr("data-enabled") != "true"
        el.attr("data-enabled",((new_state) ? "true" : "false") );
        el.removeClass().addClass(((new_state) ? "use-move-enabled" : "use-move-disabled") );
        if(new_state)
        {
          $("#move-data").show()
        }else
        {
          $("#move-data").hide()
        }
      },

      useemulationchange: function(event)
      {
        event.preventDefault();
        var el = $(event.target).closest("a")
        var new_state = el.attr("data-enabled") != "true"
        el.attr("data-enabled",((new_state) ? "true" : "false") );
        el.removeClass().addClass(((new_state) ? "use-emulation-enabled" : "use-emulation-disabled") );
        if(new_state)
        {
          $("#emulation-data").show()
        }else
        {
          $("#emulation-data").hide()
        }
      },

      usescrollparamschange: function(event)
      {
        event.preventDefault();
        var el = $(event.target).closest("a")
        var new_state = el.attr("data-enabled") != "true"
        el.attr("data-enabled",((new_state) ? "true" : "false") );
        el.removeClass().addClass(((new_state) ? "use-scroll-params-enabled" : "use-scroll-params-disabled") );
        if(new_state)
        {
          $("#scroll-params-data").show()
        }else
        {
          $("#scroll-params-data").hide()
        }
      },

      editstart: function(event)
      {
        event.preventDefault();

        $("#containerdata").hide()
        var target = $(event.target).closest("a")
        var selector = target.attr("data-result-target")
        ToolboxMaximizeCallback = function()
        {
          $(".modal-backdrop").hide()
          $("#expressioneditor-container").show()
          document.documentElement.style.zoom = '100%';

          //Get original value
          var value = null
          var data = null
          {
            var Loader = new ResourceLoader()
            Loader.SetIsPrerender(true)
            var id = target.closest("*[data-preserve-id]").attr("data-preserve-id")
            //console.log(id)
            var V = GetInputConstructorValue(id,Loader)
            data = target.closest("*[data-preserve-id]").attr("data-preserve-json")
            if(typeof(data) == "undefined")
              data = ""

            value = V["updated"]
          }
          _ExpressionEditor = new ExpressionEditor(function(Result){
            $("#containerdata").show()
            BrowserAutomationStudio_Minimize()
            $(".modal-backdrop").show()
            $("#expressioneditor-container").hide()
            document.documentElement.style.zoom = _Z + '%'
            if(Result["ok"])
            {
              target.closest("*[data-preserve-id]").attr("data-preserve-json",Result["data"])
              $(selector).val(Result["res"])
              $(selector).closest(".input-group").find(".selector").html("expression")
              $(selector).closest(".input-group").find(".input_selector_number").hide()
              $(selector).closest(".input-group").find(".input_selector_string").show()
            }
          },value,data)
        };
        BrowserAutomationStudio_Maximize();
      },

      backtomain: function()
      {
        $('.modal').modal('hide');
        BrowserAutomationStudio_EditCancel();
      },

      backtomainfromtopmenu: function(event)
      {
        $('.modal').modal('hide');
        var target = $(event.target).closest("a")
        var GroupName = target.attr("data-group-name")
        _PreserveMainPosition.SetScroll(0);
        _PreserveMainPosition.SetGroup(GroupName);
        BrowserAutomationStudio_EditCancel();
      },

      backtohomefromtopmenu: function()
      {
        $('.modal').modal('hide');
        _PreserveMainPosition.SetScroll(0);
        _PreserveMainPosition.SetGroup("");
        BrowserAutomationStudio_EditCancel();
      },
      
      addpostdata: function(event)
      {
        var loader = new ResourceLoader();
        loader.SetIsPrerender(true)
        var Name = GetInputConstructorValue("PostName",loader)["updated"]
        var Value = GetInputConstructorValue("PostValue",loader)["updated"]

        var Data = $("#PostDataArray").val()
        if(Name.length > 0 && Value.length > 0)
        {
          if(Data.length === 0)
          {
            $("#PostDataArray").val(Name  + "," + Value);
          }else
          {
            $("#PostDataArray").val(Data + "," + Name  + "," + Value)
          }
          $("#PostName").val("")
          $("#PostValue").val("")
        }
        
      },

      addpostdatafile: function(event)
      {
        $("#PostValue").val("file://" + $("#PostValue").val());
        this.addpostdata(null)
      },

      addpostdatabase64: function(event)
      {
        $("#PostValue").val("base64://" + $("#PostValue").val());
        this.addpostdata(null)
      },

      selectvariant: function(event)
      {
        var target = $(event.target).closest("a");
        var variant = target.attr("data-variant");
        var variant_type = target.attr("data-variant-type");
        var result = $("#" + target.attr("data-result"));
        function _set_variant(value, type){
          if(type=="string" || type=="expression"){
            result.closest(".input-group").find(".selector").html(type);
            result.closest(".input-group").find(".input_selector_number").hide();
            result.closest(".input-group").find(".input_selector_string").show();
            result.closest(".input-group").find(".input_selector_string").val(value);
          }else{
            result.closest(".input-group").find(".selector").html("int");
            result.closest(".input-group").find(".input_selector_number").show();
            result.closest(".input-group").find(".input_selector_string").hide();
            result.closest(".input-group").find(".input_selector_number").val(value);
          };
        };
        if(variant_type && result.closest(".input-group").find("." + variant_type).length > 0){
          _set_variant(variant, variant_type);
        }else{
          if(result.closest(".input-group").find(".string").length > 0){
            _set_variant(variant, "string");
          }else{
            if(result.closest(".input-group").find(".int").length > 0){
              _set_variant(variant, "int");
            }else{
              _set_variant(variant, "expression");
            };
          };
        };
      },

      string: function(event)
      {
        $(event.target).closest(".input-group").find(".selector").html("string")
        $(event.target).closest(".input-group").find(".input_selector_number").hide()
        $(event.target).closest(".input-group").find(".input_selector_string").show()
      },

      int: function(event)
      {
        $(event.target).closest(".input-group").find(".selector").html("int")
        $(event.target).closest(".input-group").find(".input_selector_number").show()
        $(event.target).closest(".input-group").find(".input_selector_string").hide()
      },

      expression: function(event)
      {
        $(event.target).closest(".input-group").find(".selector").html("expression")
        $(event.target).closest(".input-group").find(".input_selector_number").hide()
        $(event.target).closest(".input-group").find(".input_selector_string").show()
      },

      updatepath: function()
      {
        if(_SelectorModel.get("is_image"))
        {
          $(".disable-if-find-by-image").hide()
        }else
        {
          var current = _SelectorModel.get("current")
          
          if(current == "css")
            this.css()
          else if(current == "match")
            this.match()
          else if(current == "xpath")
            this.xpath()
          else if(current == "at")
            this.at()
          else if(current == "none")
            this.none()
        }
      },

      css:function(event)
      {
        
        $("#selector").html("css")
        $("#selector-input").removeAttr("disabled").val(_SelectorModel.get("css"))
        _SelectorModel.set("current","css")
        BrowserAutomationStudio_TestPathInternal();
        
        $(".dropdown-menu-css-item").removeAttr("data-selected")
        $(".dropdown-menu-css-item").first().attr("data-selected","true")

      },

      match:function(event)
      {
        $("#selector").html("match")
        $("#selector-input").removeAttr("disabled").val(_SelectorModel.get("match"))
        _SelectorModel.set("current","match")
        BrowserAutomationStudio_TestPathInternal();

        $(".dropdown-menu-css-item").removeAttr("data-selected")
        $(".dropdown-menu-css-item").first().attr("data-selected","true")
      },

      xpath:function(event)
      {
        $("#selector").html("xpath")
        $("#selector-input").removeAttr("disabled").val(_SelectorModel.get("xpath"))
        _SelectorModel.set("current","xpath")
        BrowserAutomationStudio_TestPathInternal();

        $(".dropdown-menu-css-item").removeAttr("data-selected")
        $(".dropdown-menu-css-item").first().attr("data-selected","true")
      },

      at:function(event)
      {
        $("#selector").html("at")
        $("#selector-input").removeAttr("disabled").val(_SelectorModel.get("mousex") + ", " + _SelectorModel.get("mousey"))
        _SelectorModel.set("current","at")
        BrowserAutomationStudio_TestPathInternal();

        $(".dropdown-menu-css-item").removeAttr("data-selected")
        $(".dropdown-menu-css-item").first().attr("data-selected","true")
      },

      none:function(event)
      {
        $("#selector").html("none")
        $("#selector-input").attr("disabled","disabled").val("")

        _SelectorModel.set("current","none")
        BrowserAutomationStudio_TestPathInternal();

        $(".dropdown-menu-css-item").removeAttr("data-selected")
        $(".dropdown-menu-css-item").first().attr("data-selected","true")
      },

      clickExecuteType:function(event)
      {
        const $executeTypeItem = $(event.target).closest('a');
        const data = $executeTypeItem.data();
        const html = $executeTypeItem.html();
        event.preventDefault();

        $('#executeTypeValue').data('action', data.action).html(html);
      },

      specialletter: function(event)
      {
        InsertAtCaret("TypeData","<" + $(event.target).attr("data-key") + ">");
      },

      funcaddstarttrigger: function({ target })
      {
        BasFunctionsDialog.create($(target).closest('a'));
      },

      resaddstarttrigger: function({ target })
      {
        BasResourcesDialog.create($(target).closest('a'));
      },

      varaddstarttrigger: function({ target })
      {
        BasVariablesDialog.create($(target).closest('a'));
      },

      funcchange: function(FuncName)
      {
        var Parameters = _FunctionCollection.toJSON().find(function(Func){
          if(Func.name == FuncName)
            return Func

        });

        if(typeof(Parameters) == "undefined" || !Parameters)
        {
          return
        }

        $("#FunctionParameters").html("")
        $("#FunctionParametersNoReturn").html("")
        Parameters.properties.p.forEach(function(Param){
          var Type = Param.type

          
          var Settings = {id:"ParamId_" + tohex(Param.name), description:Param.name}
          if(Type == "String")
          {
            Settings["default_selector"] = "string"
            Settings["disable_int"] = true
            Settings["disable_expression"] = true
            Settings["value_string"] = Param.defaults
          }
          if(Type == "Number")
          {
            Settings["default_selector"] = "int"
            Settings["disable_string"] = true
            //Settings["disable_expression"] = true
            Settings["min_number"] = Number.MIN_SAFE_INTEGER
            Settings["max_number"] = Number.MAX_SAFE_INTEGER
            Settings["value_number"] = 0

            try
            {
              if(Param.defaults.length > 0 )
              {
                Settings["value_number"] = parseInt(Param.defaults)
              }
            }catch(e)
            {

            }
            
          }
          if(Type == "Boolean")
          {
            Settings["default_selector"] = "string"
            Settings["disable_int"] = true
            Settings["variants"] = ["true", "false"]
            Settings["value_string"] = "true"
            if(Param.defaults.length > 0)
            {
              Settings["value_string"] = Param.defaults
            }

          }
          if(Type == "Expression")
          {
            Settings["default_selector"] = "expression"
            Settings["disable_int"] = true
            Settings["disable_string"] = true
            Settings["value_string"] = Param.defaults
            
          }
          if(Type == "StringOrExpression")
          {
            Settings["default_selector"] = "string"
            Settings["disable_int"] = true
            Settings["value_string"] = Param.defaults
          }
          if(Type == "NumberOrExpression")
          {
            Settings["default_selector"] = "int"
            Settings["disable_string"] = true
            Settings["min_number"] = Number.MIN_SAFE_INTEGER
            Settings["max_number"] = Number.MAX_SAFE_INTEGER
            Settings["value_number"] = 0

            try
            {
              if(Param.defaults.length > 0 )
              {
                Settings["value_number"] = parseInt(Param.defaults)
              }
            }catch(e)
            {

            }
          }

          Settings["help"] = {description: Param.description}
          var Template = _.template($('#input_constructor').html())(Settings)
          $("#FunctionParameters").append(Template)
          $("#FunctionParametersNoReturn").append(Template)

        })

        if(Parameters.properties.hr)
        {
          var Template = _.template($('#variable_constructor').html())({
            id:"Save", 
            description: tr("Return value"), 
            default_variable: Parameters.properties.rv,
            help: {description: Parameters.properties.rd}
          })
          $("#FunctionParameters").append(Template)
        }
        Toolbox.setupTooltips();
        $("#FunctionParameters .variable-input, #FunctionParameters .function-input").keypress(OnInputKeyPress)
      },

      labeladdstart: function(event)
      {
        var json = _LabelCollection.toJSON();

        $('#LabelNameInput').html("")
        if(json.length == 0)
        {
          $("#NoLabelFound").show()
          $("#LabelNameInput").hide()
          $(".labelok").hide()

        }else
        {
          $("#NoLabelFound").hide()
          $("#LabelNameInput").show()
          $(".labelok").show()
          json = jsort(json);
          for(var i = 0;i<json.length;i+=1)
          {
            $('#LabelNameInput')
             .append($("<option></option>")
             .attr("value",json[i]["name"])
             .text(json[i]["name"]));
           }
         }

        $('#LabelNameInput').focus()
        this.currentInputLabel = $(event.relatedTarget).attr("data-result-target")

      },
      
      labeladd: function(event)
      {
        var el = $(this.currentInputLabel)

        var name = $("#LabelNameInput").val();
        if(name.length > 0)
        {
          el.val($("#LabelNameInput").val())
        }
      },

      timeoutadd: function(event)
      {
        var timeout_value = $("#TimeoutValue").val()

        $("#use-timeout").attr("data-value", (typeof(timeout_value) != "undefined" && timeout_value > 0) ? timeout_value : "0")
                        .attr("class", ((typeof(timeout_value) != "undefined" && timeout_value > 0) ? "" : "use-timeout-disabled") + " trtitle")
                        .attr("data-enabled", (typeof(timeout_value) != "undefined" && timeout_value > 0) ? "true" : "false")

        $("#timeout-val").html((typeof(timeout_value) != "undefined" && timeout_value > 0) ? ("" + timeout_value) : "")
        if(typeof(timeout_value) != "undefined" && timeout_value > 0)
        {
         $("#timeout-is-default").hide()
        }else
        {
          $("#timeout-is-default").show()
        }


      },

      timeoutdefault: function(event)
      {
        $("#TimeoutValue").val(0)

        this.timeoutadd(null);

      },

      accept: function()
      {
          var State = this.model.get("state");
          var loader = new ResourceLoader();

          var action = $("#executeTypeValue").data("action")

          BrowserAutomationStudio_LastExecuteType = action

          if(typeof(action) == "undefined")
          {
            action = 2
          }else if(action == "execute")
          {
            action = 0
          }else if(action == "add")
          {
            action = 1
          }else if(action == "executeandadd")
          {
            action = 2
          }


          var DisableIfAdd = true
          if(_GobalModel.get("isedit"))
          {
            DisableIfAdd = action == 1
            action = 1
          }




          if(State == "load")
          {
            var val = GetInputConstructorValue("LoadUrl",loader)
            var referrer = GetInputConstructorValue("Referrer",loader)

            if(val["original"].length == 0)
            {
              Invalid("Url is empty");
              return;
            }

               try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({url:val["updated"],referrer:referrer["updated"],notinstant:BrowserAutomationStudio_UsesWaitCode()})
                code = Normalize(code,0)

                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
              }catch(e)
              {}
        
          }else if(State == "navigateback")
          {
            
            try{
              var is_instant = true
              var usewaiter = $("#use-waiter")

              if(usewaiter.length > 0 && usewaiter.attr("data-enabled") == "true")  
              {
                is_instant = false
              }

              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({is_instant: is_instant}) + BrowserAutomationStudio_GetWaitCode()
              code = Normalize(code,0)

              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {

            }
            
          }else if(State == "httpclientxpathxml")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();
            var Value = GetInputConstructorValue("Value", loader);
            var fail = $("#Check").is(':checked')


            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Value["original"].length == 0)
            {
              Invalid("Query is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,value: Value["updated"], fail:fail})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "httpclientxpathxmllist")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();
            var Value = GetInputConstructorValue("Value", loader);

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Value["original"].length == 0)
            {
              Invalid("Query is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,value: Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "waitelement")
          {
             var CheckIsvisible = $("#Check").is(':checked')
             try{
              var path = GetPath(loader,true,CheckIsvisible)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({waiter: path["waiter"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "httpclientxpathtext")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();
            var Value = GetInputConstructorValue("Value", loader);
            var fail = $("#Check").is(':checked')


            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Value["original"].length == 0)
            {
              Invalid("Query is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,value: Value["updated"], fail:fail})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "httpclientxpathtextlist")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();
            var Value = GetInputConstructorValue("Value", loader);

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Value["original"].length == 0)
            {
              Invalid("Query is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,value: Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "httpclientxpathcount")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();
            var Value = GetInputConstructorValue("Value", loader);

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Value["original"].length == 0)
            {
              Invalid("Query is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,value: Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "httpclientxpathexists")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();
            var Value = GetInputConstructorValue("Value", loader);

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Value["original"].length == 0)
            {
              Invalid("Query is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,value: Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "httpclientfailonerror")
          {
            var Value = GetInputConstructorValue("SetFailed",loader)

            if(Value["original"].length <= 0)
            {
              Invalid("Value is empty");
              return;
            }

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({value:Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          
            
          }else if(State == "httpclienturl")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "httpclientcontent")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();
            var Encoding = GetInputConstructorValue("Encoding", loader);

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save, encoding: Encoding["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "httpclientiserror")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "httpclientgeterrorstring")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "httpclientstatus")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "httpclientgetheader")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();
            var Value = GetInputConstructorValue("Value", loader);

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Value["original"].length == 0)
            {
              Invalid("Header is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,value: Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "httpclientsetheader")
          {
            var Name = GetInputConstructorValue("Name",loader)
            var Value = GetInputConstructorValue("Value",loader)

            if(Name["original"].length <= 0)
            {
              Invalid("Name is empty");
              return;
            }
            
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({name:Name["updated"],value:Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("" , BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
            
          }else if(State == "httpclientgetcookiesforurl")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();
            var Value = GetInputConstructorValue("Value", loader);

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Value["original"].length == 0)
            {
              Invalid("Url is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,value: Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "httpclientrestorecookies")
          {
            var Value = GetInputConstructorValue("Value",loader)

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({value:Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
            
          }else if(State == "httpclientsavecookies")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "httpclientclearheader")
          {

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("" , BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
            
          }else if(State == "httpclientget")
          {
            var Value = GetInputConstructorValue("Value",loader)
            var Method = GetInputConstructorValue("Method",loader)
            var Headers = GetInputConstructorValue("Headers",loader)
            var follow = $("#Check").is(':checked')

            if(Value["original"].length <= 0)
            {
              Invalid("Url is empty");
              return;
            }

            if(Method["original"].length <= 0)
            {
              Invalid("Method is empty");
              return;
            }
            
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({follow:follow,value:Value["updated"],method:Method["updated"], headers: Headers["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          
            
          }else if(State == "httpclientpost")
          {
            var Value = GetInputConstructorValue("Value",loader)
            var follow = $("#Check").is(':checked')
            var UseConstructor = $("#Check2").is(':checked')
            var Encoding = GetInputConstructorValue("Encoding",loader)
            var Method = GetInputConstructorValue("Method",loader)
            var ContentType = GetInputConstructorValue("ContentType",loader)
            var PostDataArray = GetInputConstructorValue("PostDataArray",loader)
            var Headers = GetInputConstructorValue("Headers",loader)

            var PostDataRaw = GetInputConstructorValue("PostDataRaw",loader)
            var ContentTypeRaw = GetInputConstructorValue("ContentTypeRaw",loader)


            if(Value["original"].length <= 0)
            {
              Invalid("Url is empty");
              return;
            }

            if(Encoding["original"].length <= 0)
            {
              Invalid("Encoding is empty");
              return;
            }

            if(Method["original"].length <= 0)
            {
              Invalid("Method is empty");
              return;
            }

            if(ContentType["original"].length <= 0)
            {
              Invalid("ContentType is empty");
              return;
            }


             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({
                follow:follow,
                value:Value["updated"],
                contenttype:ContentType["updated"],
                encoding:Encoding["updated"],
                method:Method["updated"],
                useconstructor:UseConstructor,
                postdataraw:PostDataRaw["updated"].replace(/base64:/g,"_browserautomationstudio_base64:"),
                contenttyperaw:ContentTypeRaw["updated"],
                params:"[" + PostDataArray["updated"] + "]",
                headers: Headers["updated"]
              })
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          
          }else if(State == "parseline")
          {
            var Value = GetInputConstructorValue("Value",loader)
            var List = $("#VariablesList").val().toUpperCase()
            
            if(Value["original"].length <= 0)
            {
              Invalid("Value is empty");
              return;
            }

            if(List.length <= 0)
            {
              Invalid("Variables list is empty");
              return;
            }

            List = List.replace(/\s/g,"")
            List = List.split(",")
            List = _.compact(List);
            if(List.length > 0)
            {
              /*List[0] = List[0].replace(/[\\[\\]]/g,"")
              List[List.length - 1] = List[List.length - 1].replace(/[\\[\\]]/g,"")*/
            }else
            {
              Invalid("Variables list is empty");
              return; 
            }

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({list:List,value:Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
           
          }else if(State == "httpclientproxy")
          {
              var ProxyText = GetInputConstructorValue("ProxyText",loader)
              var ProxyType = GetInputConstructorValue("ProxyType", loader)
              var ProxyLogin = GetInputConstructorValue("ProxyLogin",loader)
              if(ProxyLogin["updated"] == "")
                ProxyLogin["updated"] = '""'
              var ProxyPassword = GetInputConstructorValue("ProxyPassword",loader)
              if(ProxyPassword["updated"] == "")
                ProxyPassword["updated"] = '""'
              var IsEmptyProxy = false
              if(ProxyText["updated"] == "")
              {
                ProxyText["updated"] = '""'
                IsEmptyProxy = true
              }

              try{
                var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({ProxyText:ProxyText["updated"], ProxyType:ProxyType["updated"],ProxyLogin:ProxyLogin["updated"],ProxyPassword:ProxyPassword["updated"]})
                code = Normalize(code,0)
                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
              }catch(e){}


          }
          else if(State == "httpclientreset")
          {
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "solverfailed")
          {
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }
          else if(State == "httpclientdownload")
          {
            var Value = GetInputConstructorValue("Value",loader)
            var File = GetInputConstructorValue("File",loader)


            if(Value["original"].length <= 0)
            {
              Invalid("Url is empty");
              return;
            }
            if(File["original"].length <= 0)
            {
              Invalid("File is empty");
              return;
            }
            
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({file:File["updated"],value:Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          
            
          }else if(State == "globalset")
          {
            var Name = this.$el.find("#Name").val().toUpperCase();
            var Value = GetInputConstructorValue("Value",loader)

            if(Name.length <= 0)
            {
              Invalid("Key is empty");
              return;
            }
            if(Value["original"].length <= 0)
            {
              Invalid("Value is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({key:JSON.stringify(Name),value:Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "globalget")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();
            var Name = GetInputConstructorValue("Name", loader);

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Name["original"].length == 0)
            {
              Invalid("Key is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,key: Name["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "result")
          {
            var Value = GetInputConstructorValue("Value",loader)
            var num = $("#Select").val()

            if(Value["original"].length <= 0)
            {
              Invalid("Data is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({number:parseInt(num)-1,value:Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
            
          }else if(State == "cachemaskallow" || State == "cachemaskdeny")
          {
            var urlFilters = _Filters.getFiltersValue("urlFilters");

            var methods = GetInputConstructorValue("methods",loader);
            if(methods["original"].length == 0){
              ParameterNotSpecified("Request type");
              return;
            }

            urlFilters = urlFilters.slice(0,-1) + `,methods:(${methods["updated"]})}`;

            var limit = GetInputConstructorValue("limit",loader);

            var Save = this.$el.find("#Save").val().toUpperCase();
            if(Save.length == 0)
            {
              ParameterNotSpecified(tr("Variable") + " -> " + tr("Replacement ID"));
              return;
            }
            
            try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,urlFilters:urlFilters,limit:limit["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "requestmaskallow" || State == "requestmaskdeny")
          {
            var urlFilters = _Filters.getFiltersValue("urlFilters");

            var methods = GetInputConstructorValue("methods",loader);
            if(methods["original"].length == 0){
              ParameterNotSpecified("Request type");
              return;
            }

            urlFilters = urlFilters.slice(0,-1) + `,methods:(${methods["updated"]})}`;

            var Save = this.$el.find("#Save").val().toUpperCase();
            if(Save.length == 0)
            {
              ParameterNotSpecified(tr("Variable") + " -> " + tr("Replacement ID"));
              return;
            }
            
            try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,urlFilters:urlFilters})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "cleardata")
          {
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "loadcookiesfrombrowser")
          {
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "loadcookiesfromhttpclient")
          {
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "closebrowser")
          {
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd, "", true);
            }catch(e)
            {}
          }else if(State == "openbrowser")
          {
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd, "", true);
            }catch(e)
            {}
          }else if(State == "clearmasks")
          {
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "getstatus" || State == "isloaded")
          {
            var urlFilters = _Filters.getFiltersValue("urlFilters");

            var Save = this.$el.find("#Save").val().toUpperCase();
            if(Save.length == 0)
            {
              ParameterNotSpecified("Variable To Save");
              return;
            }
            
            try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,urlFilters:urlFilters})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "getfromcache")
          {
            var urlFilters = _Filters.getFiltersValue("urlFilters");

            var methods = GetInputConstructorValue("methods",loader);
            if(methods["original"].length == 0){
              ParameterNotSpecified("Request type");
              return;
            }

            urlFilters = urlFilters.slice(0,-1) + `,methods:(${methods["updated"]})}`;

            var Save = this.$el.find("#Save").val().toUpperCase();
            if(Save.length == 0)
            {
              ParameterNotSpecified("Variable To Save");
              return;
            }

            var waitItem = $("#waitItem").is(':checked')
            var base64 = $("#Check").is(':checked')
            
            try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,urlFilters:urlFilters,waitItem:waitItem,base64:base64})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "getallcache")
          {
            var urlFilters = _Filters.getFiltersValue("urlFilters");

            var methods = GetInputConstructorValue("methods",loader);
            if(methods["original"].length == 0){
              ParameterNotSpecified("Request type");
              return;
            }

            urlFilters = urlFilters.slice(0,-1) + `,methods:(${methods["updated"]})}`;

            var Save = this.$el.find("#Save").val().toUpperCase();
            if(Save.length == 0)
            {
              ParameterNotSpecified("Variable To Save");
              return;
            }
            
            try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,urlFilters:urlFilters})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "redirectrequests")
          {
            var urlFilters = _Filters.getFiltersValue("urlFilters");

            var methods = GetInputConstructorValue("methods",loader);
            if(methods["original"].length == 0){
              ParameterNotSpecified("Request type");
              return;
            }

            urlFilters = urlFilters.slice(0,-1) + `,methods:(${methods["updated"]})}`;

            var replaceMode = $("#replaceMode").val();

            var exact = GetInputConstructorValue("exact",loader);
            if(replaceMode == "exact" && exact["original"].length == 0){
              ParameterNotSpecified("Exact value");
              return;
            }
            var replaceAllExact = $("#replaceAllExact").is(':checked');

            var regexp = GetInputConstructorValue("regexp",loader);
            if(replaceMode == "regexp" && regexp["original"].length == 0){
              ParameterNotSpecified("Regular expression");
              return;
            }
            var ignoreСase = GetInputConstructorValue("ignoreСase",loader);
            if(replaceMode == "regexp" && ignoreСase["original"].length == 0){
              ParameterNotSpecified("Ignore case");
              return;
            }
            var globalSearch = GetInputConstructorValue("globalSearch",loader);
            if(replaceMode == "regexp" && globalSearch["original"].length == 0){
              ParameterNotSpecified("Global search");
              return;
            }

            var before = GetInputConstructorValue("before",loader);
            if(replaceMode == "before" && before["original"].length == 0){
              ParameterNotSpecified("Value");
              return;
            }

            var after = GetInputConstructorValue("after",loader);
            if(replaceMode == "after" && after["original"].length == 0){
              ParameterNotSpecified("Value");
              return;
            }

            var leftValue = GetInputConstructorValue("leftValue",loader);
            if(replaceMode == "between" && leftValue["original"].length == 0){
              ParameterNotSpecified("Left value");
              return;
            }
            var rightValue = GetInputConstructorValue("rightValue",loader);
            if(replaceMode == "between" && rightValue["original"].length == 0){
              ParameterNotSpecified("Right value");
              return;
            }

            var searchValue = ''
            if(replaceMode == "exact"){
              searchValue = exact["updated"]
            }if(replaceMode == "regexp"){
              searchValue = regexp["updated"]
            }else if(replaceMode == "before"){
              searchValue = before["updated"]
            }else if(replaceMode == "after"){
              searchValue = after["updated"]
            }else if(replaceMode == "between"){
              searchValue = leftValue["updated"]
            }

            var newValue = GetInputConstructorValue("newValue",loader);

            var limit = GetInputConstructorValue("limit",loader);

            var Save = this.$el.find("#Save").val().toUpperCase();
            if(Save.length == 0)
            {
              ParameterNotSpecified(tr("Variable") + " -> " + tr("Replacement ID"));
              return;
            }
            
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,urlFilters:urlFilters,replaceMode:replaceMode,searchValue:searchValue,replaceAllExact:replaceAllExact,ignoreСase:ignoreСase["updated"],globalSearch:globalSearch["updated"],searchValue2:rightValue["updated"],newValue:newValue["updated"],limit:limit["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "replacerequestcontent")
          {
            var urlFilters = _Filters.getFiltersValue("urlFilters");

            var methods = GetInputConstructorValue("methods",loader);
            if(methods["original"].length == 0){
              ParameterNotSpecified("Request type");
              return;
            }

            urlFilters = urlFilters.slice(0,-1) + `,methods:(${methods["updated"]})}`;

            var contentFilters = _Filters.getFiltersValue("contentFilters");

            var replaceMode = $("#replaceMode").val();

            var exact = GetInputConstructorValue("exact",loader);
            if(replaceMode == "exact" && exact["original"].length == 0){
              ParameterNotSpecified("Exact value");
              return;
            }
            var replaceAllExact = $("#replaceAllExact").is(':checked');

            var regexp = GetInputConstructorValue("regexp",loader);
            if(replaceMode == "regexp" && regexp["original"].length == 0){
              ParameterNotSpecified("Regular expression");
              return;
            }
            var ignoreСase = GetInputConstructorValue("ignoreСase",loader);
            if(replaceMode == "regexp" && ignoreСase["original"].length == 0){
              ParameterNotSpecified("Ignore case");
              return;
            }
            var globalSearch = GetInputConstructorValue("globalSearch",loader);
            if(replaceMode == "regexp" && globalSearch["original"].length == 0){
              ParameterNotSpecified("Global search");
              return;
            }
            var multiline = GetInputConstructorValue("multiline",loader);
            if(replaceMode == "regexp" && multiline["original"].length == 0){
              ParameterNotSpecified("Multiline mode");
              return;
            }

            var before = GetInputConstructorValue("before",loader);
            if(replaceMode == "before" && before["original"].length == 0){
              ParameterNotSpecified("Value");
              return;
            }

            var after = GetInputConstructorValue("after",loader);
            if(replaceMode == "after" && after["original"].length == 0){
              ParameterNotSpecified("Value");
              return;
            }

            var leftValue = GetInputConstructorValue("leftValue",loader);
            if(replaceMode == "between" && leftValue["original"].length == 0){
              ParameterNotSpecified("Left value");
              return;
            }
            var rightValue = GetInputConstructorValue("rightValue",loader);
            if(replaceMode == "between" && rightValue["original"].length == 0){
              ParameterNotSpecified("Right value");
              return;
            }

            var searchValue = ''
            if(replaceMode == "exact"){
              searchValue = exact["updated"]
            }if(replaceMode == "regexp"){
              searchValue = regexp["updated"]
            }else if(replaceMode == "before"){
              searchValue = before["updated"]
            }else if(replaceMode == "after"){
              searchValue = after["updated"]
            }else if(replaceMode == "between"){
              searchValue = leftValue["updated"]
            }

            var newValue = GetInputConstructorValue("newValue",loader);

            var limit = GetInputConstructorValue("limit",loader);

            var Save = this.$el.find("#Save").val().toUpperCase();
            if(Save.length == 0)
            {
              ParameterNotSpecified(tr("Variable") + " -> " + tr("Replacement ID"));
              return;
            }
            
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,urlFilters:urlFilters,contentFilters:contentFilters,replaceMode:replaceMode,searchValue:searchValue,replaceAllExact:replaceAllExact,ignoreСase:ignoreСase["updated"],globalSearch:globalSearch["updated"],multiline:multiline["updated"],searchValue2:rightValue["updated"],newValue:newValue["updated"],limit:limit["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "replaceresponsecontent")
          {
            var urlFilters = _Filters.getFiltersValue("urlFilters");

            var methods = GetInputConstructorValue("methods",loader);
            if(methods["original"].length == 0){
              ParameterNotSpecified("Request type");
              return;
            }

            urlFilters = urlFilters.slice(0,-1) + `,methods:(${methods["updated"]})}`;

            var contentFilters = _Filters.getFiltersValue("contentFilters");

            var replaceMode = $("#replaceMode").val();

            var exact = GetInputConstructorValue("exact",loader);
            if(replaceMode == "exact" && exact["original"].length == 0){
              ParameterNotSpecified("Exact value");
              return;
            }
            var replaceAllExact = $("#replaceAllExact").is(':checked');

            var regexp = GetInputConstructorValue("regexp",loader);
            if(replaceMode == "regexp" && regexp["original"].length == 0){
              ParameterNotSpecified("Regular expression");
              return;
            }
            var ignoreСase = GetInputConstructorValue("ignoreСase",loader);
            if(replaceMode == "regexp" && ignoreСase["original"].length == 0){
              ParameterNotSpecified("Ignore case");
              return;
            }
            var globalSearch = GetInputConstructorValue("globalSearch",loader);
            if(replaceMode == "regexp" && globalSearch["original"].length == 0){
              ParameterNotSpecified("Global search");
              return;
            }
            var multiline = GetInputConstructorValue("multiline",loader);
            if(replaceMode == "regexp" && multiline["original"].length == 0){
              ParameterNotSpecified("Multiline mode");
              return;
            }

            var before = GetInputConstructorValue("before",loader);
            if(replaceMode == "before" && before["original"].length == 0){
              ParameterNotSpecified("Value");
              return;
            }

            var after = GetInputConstructorValue("after",loader);
            if(replaceMode == "after" && after["original"].length == 0){
              ParameterNotSpecified("Value");
              return;
            }

            var leftValue = GetInputConstructorValue("leftValue",loader);
            if(replaceMode == "between" && leftValue["original"].length == 0){
              ParameterNotSpecified("Left value");
              return;
            }
            var rightValue = GetInputConstructorValue("rightValue",loader);
            if(replaceMode == "between" && rightValue["original"].length == 0){
              ParameterNotSpecified("Right value");
              return;
            }

            var searchValue = ''
            if(replaceMode == "exact"){
              searchValue = exact["updated"]
            }if(replaceMode == "regexp"){
              searchValue = regexp["updated"]
            }else if(replaceMode == "before"){
              searchValue = before["updated"]
            }else if(replaceMode == "after"){
              searchValue = after["updated"]
            }else if(replaceMode == "between"){
              searchValue = leftValue["updated"]
            }

            var newValue = GetInputConstructorValue("newValue",loader);

            var limit = GetInputConstructorValue("limit",loader);

            var Save = this.$el.find("#Save").val().toUpperCase();
            if(Save.length == 0)
            {
              ParameterNotSpecified(tr("Variable") + " -> " + tr("Replacement ID"));
              return;
            }
            
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,urlFilters:urlFilters,contentFilters:contentFilters,replaceMode:replaceMode,searchValue:searchValue,replaceAllExact:replaceAllExact,ignoreСase:ignoreСase["updated"],globalSearch:globalSearch["updated"],multiline:multiline["updated"],searchValue2:rightValue["updated"],newValue:newValue["updated"],limit:limit["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "disablerules")
          {
            var Ids = GetInputConstructorValue("ids",loader)
            if(Ids["original"].length <= 0)
            {
              ParameterNotSpecified(tr("Replacement ID"));
              return;
            }
            
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({ids:Ids["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "getrulestats")
          {
            var Id = GetInputConstructorValue("id",loader)

            var SaveExecutionCount = this.$el.find("#SaveExecutionCount").val().toUpperCase();
            if(SaveExecutionCount.length == 0)
            {
              ParameterNotSpecified(tr("Variable") + " -> " + tr("Number of executions"));
              return;
            }

            var SaveIsActive = this.$el.find("#SaveIsActive").val().toUpperCase();
            if(SaveIsActive.length == 0)
            {
              ParameterNotSpecified(tr("Variable") + " -> " + tr("Is active"));
              return;
            }

            var SaveAllIds = this.$el.find("#SaveAllIds").val().toUpperCase();
            if(SaveAllIds.length == 0)
            {
              ParameterNotSpecified(tr("Variable") + " -> " + tr("List of all replacement IDs"));
              return;
            }

            var SaveActiveIds = this.$el.find("#SaveActiveIds").val().toUpperCase();
            if(SaveActiveIds.length == 0)
            {
              ParameterNotSpecified(tr("Variable") + " -> " + tr("List of active replacement IDs"));
              return;
            }
            
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variableExecutionCount:"VAR_" + SaveExecutionCount,variableIsActive:"VAR_" + SaveIsActive,variableAllIds:"VAR_" + SaveAllIds,variableActiveIds:"VAR_" + SaveActiveIds,id:Id["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "html")
          {
            var Save = this.$el.find("#Save").val().toUpperCase();

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "getcookiesforurl")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();
            var Value = GetInputConstructorValue("Value", loader);
            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Value["original"].length == 0)
            {
              Invalid("Url is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,value: Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "restorecookies")
          {
            var Value = GetInputConstructorValue("Value",loader)
            var Append = $("#Append").is(':checked')

            if(Value["updated"].length <= 0)
            {
              Value["updated"] = "\"\""
            }

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({value:Value["updated"],append:Append})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
            
          }else if(State == "savecookies")
          {
            var Domain = GetInputConstructorValue("Domain",loader)

            var Save = this.$el.find("#Save").val().toUpperCase();
            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,domain:Domain["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "openfile")
          {
            var Value = GetInputConstructorValue("Value",loader)

            if(Value["original"].length <= 0)
            {
              Invalid("File is empty");
              return;
            }

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({value:Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
            
          }else if(State == "dragfile")
          {
            var Value = GetInputConstructorValue("Value",loader)

            if(Value["original"].length <= 0)
            {
              Invalid("File is empty");
              return;
            }

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({value:Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
            
          }else if(State == "promptresult")
          {
            var Value = GetInputConstructorValue("Value",loader)

            if(Value["original"].length <= 0)
            {
              Invalid("Value is empty");
              return;
            }

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({value:Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
            
          }else if(State == "httpauth")
          {
            var Login = GetInputConstructorValue("Login",loader)
            var Password = GetInputConstructorValue("Password",loader)
            

            if(Login["original"].length <= 0)
            {
              Invalid("Login is empty");
              return;
            }

            if(Password["original"].length <= 0)
            {
              Invalid("Password is empty");
              return;
            }

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({login:Login["updated"],password:Password["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
            
          }else if(State == "javascript")
          {
            loader.SetIsJsonStringify(true);
            var Save = this.$el.find("#Save").val().toUpperCase();
            var Value = GetInputConstructorValue("Value", loader);

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Value["original"].length == 0)
            {
              Invalid("Javascript is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,value: Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "browserjavascript")
          {
            var source = window.Code.Editor.getValue();

            if(source.length === 0) {
              Invalid("Code is empty");
              return;
            }

            if(source.indexOf("GLOBAL:") >= 0) {
              Invalid("Global variables are not allowed");
              return;
            }

            var prepared = ExtractVariables(source);

            try {
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({
                variables: JSON.stringify(prepared),
                source: source,
              });
              code = Normalize(code,0);
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            } catch(e) { }
          }else if(State == "onloadjavascript")
          {
            var Value = GetInputConstructorValue("Value", loader);

             try{
              var TargetCode = BrowserAutomationStudio_GetTargetCode(loader)
              var code = loader.GetAdditionalData() + TargetCode + _.template($('#' + State + "_code").html())({value: Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "reset")
          {
             try{

              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd, "", true);
            }catch(e)
            {}

          }else if(State == "clickCaptchaBrowser")
          {
            const clickCoordinatesList = this.$el.find('#clickCoordinatesList').val().toUpperCase();
            const textInstructions = GetInputConstructorValue('textInstructions', loader);
            const taskWaitTimeout = GetInputConstructorValue('taskWaitTimeout', loader);
            const taskWaitDelay = GetInputConstructorValue('taskWaitDelay', loader);
            const serviceName = GetInputConstructorValue('serviceName', loader);
            const serviceKey = GetInputConstructorValue('serviceKey', loader);
            const serviceUrl = GetInputConstructorValue('serviceUrl', loader);
            const imageData = GetInputConstructorValue('imageData', loader);

            if (!clickCoordinatesList.length) {
              return Invalid(tr('The "Click coordinates" variable must not be empty'));
            } else if (!taskWaitTimeout.original.length) {
              return Invalid(tr('The "Task solution check interval" parameter is empty'));
            } else if (!taskWaitDelay.original.length) {
              return Invalid(tr('The "Task solution check delay" parameter is empty'));
            } else if (!serviceName.original.length) {
              return Invalid(tr('The "Service name" parameter is empty'));
            } else if (!serviceKey.original.length) {
              return Invalid(tr('The "Service key" parameter is empty'));
            } else if (!imageData.original.length) {
              return Invalid(tr('The "Captcha picture data encoded in base64" parameter is empty'));
            }

            try {
              const code = Normalize(loader.GetAdditionalData() + _.template($('#clickCaptchaBrowser_code').html())({
                clickCoordinatesList: `VAR_${clickCoordinatesList}`,
                textInstructions: textInstructions.updated,
                taskWaitTimeout: taskWaitTimeout.updated,
                taskWaitDelay: taskWaitDelay.updated,
                serviceName: serviceName.updated,
                serviceKey: serviceKey.updated,
                serviceUrl: serviceUrl.updated,
                imageData: imageData.updated,
              }), 0);
              BrowserAutomationStudio_Append('', BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            } catch (e) { console.log('Error while adding action:', e) }
          }else if(State == "solvecaptcha")
          {
            
            var Method = GetInputConstructorValue("Method", loader);
            var Save = this.$el.find("#Save").val().toUpperCase();
            var Value = GetInputConstructorValue("Value", loader);
            var Antigate = GetInputConstructorValue("Antigate", loader);
            var Server = GetInputConstructorValue("Server", loader);

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Value["original"].length == 0)
            {
              Invalid("Captcha is empty");
              return;
            }
            if(Method["original"].length == 0)
            {
              Invalid("Method is empty");
              return;
            }

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,value: Value["updated"],method: Method["updated"], antigate: Antigate["updated"], serverurl: Server["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "randomint")
          {
            
            var MinValue = GetInputConstructorValue("MinValue", loader);
            var MaxValue = GetInputConstructorValue("MaxValue", loader);
            var Save = this.$el.find("#Save").val().toUpperCase();
            
            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(MinValue["original"].length == 0)
            {
              Invalid("MinValue is empty");
              return;
            }
            if(MaxValue["original"].length == 0)
            {
              Invalid("MaxValue is empty");
              return;
            }

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,min: MinValue["updated"],max: MaxValue["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "setheader")
          {
            var Name = GetInputConstructorValue("Name",loader)
            var Value = GetInputConstructorValue("Value",loader)

            if(Name["original"].length <= 0)
            {
              Invalid("Name is empty");
              return;
            }

            
             try{
              var TargetCode = BrowserAutomationStudio_GetTargetCode(loader)
              var code = loader.GetAdditionalData() + TargetCode + _.template($('#' + State + "_code").html())({name:Name["updated"],value:Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("" , BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          
            
          }else if(State == "custom")
          {
            var val = GetInputConstructorValue("Code",loader)

            if(val["original"].length > 0)
            {
               try{
                var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({code:val["updated"]})
                code = Normalize(code,0)
                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
              }catch(e)
              {}
            }else
            {
              Invalid("Code is empty");
              return;
            }
          }else if(State == "break")
          {

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})

              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 1, false);

            }catch(e)
            {}

          }else if(State == "continue")
          {
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})

              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 1, false);

            }catch(e)
            {}

          }else if(State == "success")
          {
            var val = GetInputConstructorValue("SuccessMessage",loader)

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({message:val["updated"]})

              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 1, false);

            }catch(e)
            {}

          }else if(State == "fail")
          {
            var val = GetInputConstructorValue("FailMessage",loader)
            var Check = $("#Check").is(':checked')


             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({message:val["updated"],dontrestart: Check})

              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 1, false);

            }catch(e)
            {}

          }else if(State == "die")
          {
            var val = GetInputConstructorValue("FailMessage",loader)
            var Check = $("#Check").is(':checked')


             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({message:val["updated"],instant: Check})

              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 1, false);

            }catch(e)
            {}

          }else if(State == "label")
          {
            var val = GetInputConstructorValue("Label",loader)
            if(!val["original"].match(/^[a-zA-Z0-9а-яА-Я_ ]+$/))
            {
                Invalid(tr("Label can contain only letters, digits, underscore and spaces"));
                return;
            }
            if(val["original"].length <= 0)
            {
                Invalid("Label is empty");
                return;
            }

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({label:val["updated"]})

              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 1, false);

            }catch(e)
            {}

          }else if(State == "goto")
          {
            var val = $("#LabelName").val()
            if(val.length <= 0)
            {
                Invalid("Label is empty");
                return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({label:JSON.stringify(val)})

              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 1, false);

            }catch(e)
            {}

          }else if(State == "sleep")
          {
            if($("#sleeprandom").is(':checked'))
            {
              var from = GetInputConstructorValue("sleepfrom",loader)
              var to = GetInputConstructorValue("sleepto",loader)
              if(from["original"].length <= 0)
              {
                Invalid("Sleep from time is empty");
                return;
              }

              if(to["original"].length <= 0)
              {
                Invalid("Sleep to time is empty");
                return;
              }


              try{
                var code = loader.GetAdditionalData() + _.template($('#' + State + "_fromto_code").html())({from:from["updated"], to:to["updated"]})
                code = Normalize(code,0)
                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
              }catch(e){}
            }else
            {
              var t = GetInputConstructorValue("sleepfromto",loader)

              if(t["original"].length <= 0)
              {
                Invalid("Sleep time is empty");
                return;
              }

              try{
                var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({t:t["updated"]})
                code = Normalize(code,0)
                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
              }catch(e){}
            }

          }else if(State == "proxy")
          {
              var ProxyText = GetInputConstructorValue("ProxyText",loader)
              var ProxyType = GetInputConstructorValue("ProxyType", loader)
              var ProxyLogin = GetInputConstructorValue("ProxyLogin",loader)
              
              var ChangeTimezone = GetInputConstructorValue("ChangeTimezone",loader)
              var ChangeGeolocation = GetInputConstructorValue("ChangeGeolocation",loader)
              var ChangeWebrtcIp = GetInputConstructorValue("ChangeWebrtcIp",loader)
              var DetectExternalIp = GetInputConstructorValue("DetectExternalIp",loader)
              var ChangeBrowserLanguage = GetInputConstructorValue("ChangeBrowserLanguage",loader)

              var IpInfoMethod = GetInputConstructorValue("IpInfoMethod", loader);
              var IpApiKey = GetInputConstructorValue("IpApiKey", loader);
              var FunctionName = this.$el.find("#FunctionName").val();

              var ServiceURL = GetInputConstructorValue("ServiceURL", loader);
              var IpExtractionParam = GetInputConstructorValue("IpExtractionParam", loader);
              var IpExtractionMethod = GetInputConstructorValue("IpExtractionMethod", loader);

              var PublicIPv4 = GetInputConstructorValue("PublicIPv4", loader);
              var PublicIPv6 = GetInputConstructorValue("PublicIPv6", loader);
              var PrivateIPv4 = GetInputConstructorValue("PrivateIPv4", loader);
              var PrivateIPv6 = GetInputConstructorValue("PrivateIPv6", loader);
              var DetectExternalIpV6 = GetInputConstructorValue("DetectExternalIpV6", loader);
              var ServiceURLV6 = GetInputConstructorValue("ServiceURLV6", loader);
              var IpExtractionMethodV6 = GetInputConstructorValue("IpExtractionMethodV6", loader);
              var IpExtractionParamV6 = GetInputConstructorValue("IpExtractionParamV6", loader);

              var DNSMode = GetInputConstructorValue("DNSMode", loader);
              var CustomDNSIP = GetInputConstructorValue("CustomDNSIP", loader);

              var CallsFunctionCode = ""

              if(FunctionName.length == 0)
              {
                FunctionName = "null"
              }else
              {
                CallsFunctionCode = "\/*CallsFunction:" + FunctionName + "*\/\n"
              }


              if(ProxyLogin["updated"] == "")
                ProxyLogin["updated"] = '""'
              var ProxyPassword = GetInputConstructorValue("ProxyPassword",loader)
              if(ProxyPassword["updated"] == "")
                ProxyPassword["updated"] = '""'
              var IsEmptyProxy = false
              if(ProxyText["updated"] == "")
              {
                ProxyText["updated"] = '""'
                IsEmptyProxy = true
              }
              /*if(ProxyText["original"].length <= 0)
              {
                Invalid("Proxy is empty");
                return;
              }*/

              try{
                var TargetCode = BrowserAutomationStudio_GetTargetCode(loader)
                var code = loader.GetAdditionalData() + TargetCode + _.template($('#' + State + "_code").html())(
                  {
                    ProxyText:ProxyText["updated"], 
                    ProxyType:ProxyType["updated"],
                    ProxyLogin:ProxyLogin["updated"],
                    ProxyPassword:ProxyPassword["updated"], 
                    ChangeTimezone:ChangeTimezone["updated"], 
                    ChangeGeolocation:ChangeGeolocation["updated"], 
                    ChangeWebrtcIp:ChangeWebrtcIp["updated"], 
                    DetectExternalIp:DetectExternalIp["updated"], 
                    ChangeBrowserLanguage: ChangeBrowserLanguage["updated"],
                    ServiceURL: ServiceURL["updated"],
                    IpExtractionParam: IpExtractionParam["updated"],
                    IpExtractionMethod: IpExtractionMethod["updated"],
                    ip_info_method: IpInfoMethod["updated"],
                    ip_api_key: IpApiKey["updated"],

                    PublicIPv4: PublicIPv4["updated"],
                    PublicIPv6: PublicIPv6["updated"],
                    PrivateIPv4: PrivateIPv4["updated"],
                    PrivateIPv6: PrivateIPv6["updated"],
                    DetectExternalIpV6: DetectExternalIpV6["updated"],
                    ServiceURLV6: ServiceURLV6["updated"],
                    IpExtractionMethodV6: IpExtractionMethodV6["updated"],
                    IpExtractionParamV6: IpExtractionParamV6["updated"],

                    DNSMode: DNSMode["updated"],
                    CustomDNSIP: CustomDNSIP["updated"],

                    function_name: FunctionName,
                  })
                code = Normalize(code,0)
                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + CallsFunctionCode + code, action, DisableIfAdd);
              }catch(e){}


          }else if(State == "waitload")
          {
            var urlFilters = _Filters.getFiltersValue("urlFilters");

            try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({urlFilters:urlFilters})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "waiturl" || State == "waitcontent" || State == "waitcss")
          {
            var val = GetInputConstructorValue("Wait",loader)

            if(val["original"].length > 0)
            {
               try{
                var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({waiter:val["updated"]})
                code = Normalize(code,0)
                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
              }catch(e)
              {}
            }else
            {
              Invalid("Waiter is empty");
              return;
            }
          }else if(State == "waitfullload")
          {
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "if")
          {
            var val = GetInputConstructorValue("IfExpression",loader)
            var ElseEnabled = $("#IfElse").is(":checked")

            if(val["original"].length > 0)
            {
               var UpdatedVal = val["updated"];

               if ((/^VAR_\w+$/).test(UpdatedVal.trim())) {
                 UpdatedVal = `typeof(${UpdatedVal}) !== "undefined" ? (${UpdatedVal}) : undefined`;
               }

               try{
                if(!ElseEnabled)
                {
                  var code = loader.GetAdditionalData() + `\n_set_if_expression(${JSON.stringify(utf8_to_b64(val.original))});\n`;
                  code += _.template($('#' + State + "_code").html())({expression:UpdatedVal, do_delete: ""})
                  code = Normalize(code,0)
                  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 1, false);
                }else
                {
                  var v = "_cycle_params().if_else"
                  var slave_id = Math.floor(Math.random() * (1000000000 - 100)) + 100
                  var master_id = Math.floor(Math.random() * (1000000000 - 100)) + 100

                  if(_GobalModel.get("isedit"))
                  {
                    if(CurrentDat && CurrentDat["slave"])
                      slave_id = parseInt(CurrentDat["slave"])

                    if(CurrentDat && CurrentDat["master"])
                      master_id = parseInt(CurrentDat["master"])

                    if(CurrentDat && CurrentDat["if_var"])
                      v = CurrentDat["if_var"]
                  }


                  var code = loader.GetAdditionalData() + "\n" +  v + " = " + UpdatedVal + ";\n"
                  code += `_set_if_expression(${JSON.stringify(utf8_to_b64(val.original))});\n`

                  code += _.template($('#' + State + "_code").html())({expression:v, do_delete: ""})
                  code = Normalize(code,0)
                  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls({role: "master", slave: slave_id, master: master_id, if_var: v}) + code, 1, false, master_id.toString());

                  if(!_GobalModel.get("isedit"))
                  {
                    code = _.template($('#' + State + "_code").html())({expression:"!" + v, do_delete: v})
                    code = Normalize(code,0)
                    BrowserAutomationStudio_Append("Else", BrowserAutomationStudio_SaveControls({role: "slave", slave: slave_id, master: master_id, if_var: v}) + code, 1, false, slave_id.toString());
                  }
                }
              }catch(e)
              {}
            }else
            {
              Invalid("Expression is empty");
              return;
            }
          }else if(State == "while")
          {
            var val = GetInputConstructorValue("WhileExpression",loader)
            if(val["original"].length > 0)
            {
               try{
                var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({expression:val["updated"],additional:loader.GetAdditionalData()})
                code = Normalize(code,0)
                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 1, false);
                if(!_GobalModel.get("isedit"))
                {
                  var LogText = tr("Current loop repetition") + " : [[CYCLE_INDEX]]"
                  var ControlsAdditional = {"s":"log","v":1,"f":[],"uw":"0","ut":"0","uto":"0","um":"0","d":[{"id":"LogText","type":"constr","data":LogText,"class":"string"}]}
                  var CodeAdditional = _.template($("#log_code").html())({text:"\"" + tr("Current loop repetition") + " : \" + VAR_CYCLE_INDEX"})
                  ControlsAdditional = "/*Dat:" + utf8_to_b64(JSON.stringify(ControlsAdditional)) + "*/"
                  BrowserAutomationStudio_Append("", ControlsAdditional + CodeAdditional, 1);
                }

              }catch(e)
              {}
            }else
            {
              Invalid("Expression is empty");
              return;
            }
          }else if(State == "for")
          {
            var from = GetInputConstructorValue("ForFrom",loader)
            var to = GetInputConstructorValue("ForTo",loader)
            if(from["original"].length == 0)
            {
              Invalid("From is empty");
              return;
            }
            if(to["original"].length == 0)
            {
              Invalid("To is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({expression_from:from["updated"],expression_to:to["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 1, false);
              if(!_GobalModel.get("isedit"))
              {
                var LogText = tr("Current loop repetition") + " : [[CYCLE_INDEX]]"
                var ControlsAdditional = {"s":"log","v":1,"f":[],"uw":"0","ut":"0","uto":"0","um":"0","d":[{"id":"LogText","type":"constr","data":LogText,"class":"string"}]}
                var CodeAdditional = _.template($("#log_code").html())({text:"\"" + tr("Current loop repetition") + " : \" + VAR_CYCLE_INDEX"})
                ControlsAdditional = "/*Dat:" + utf8_to_b64(JSON.stringify(ControlsAdditional)) + "*/"
                BrowserAutomationStudio_Append("", ControlsAdditional + CodeAdditional, 1);
              }

            }catch(e)
            {}
          }else if(State == "ignoreerrors")
          {
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 1, false);

              if(!_GobalModel.get("isedit"))
              {
                BrowserAutomationStudio_Append("\u007b\u0022c\u0022:\u00225\u0022\u007d", `/*Dat:eyJzIjoiaWYiLCJ2IjoxLCJmIjpbXSwidXciOiIwIiwidXQiOiIwIiwidXRvIjoiMCIsInVtIjoiMCIsImQiOlt7ImlkIjoiSWZFeHByZXNzaW9uIiwidHlwZSI6ImNvbnN0ciIsImRhdGEiOiJbW1dBU19FUlJPUl1dIiwiY2xhc3MiOiJleHByZXNzaW9uIn0seyJpZCI6IklmRWxzZSIsInR5cGUiOiJjaGVjayIsImRhdGEiOmZhbHNlfV19*/
                _if(VAR_WAS_ERROR,function(){
                section_insert()
                })!`, 1, false);

                var LogText = tr("Error occurred") + " : [[LAST_ERROR]]"
                var ControlsAdditional = {"s":"log","v":1,"f":[],"uw":"0","ut":"0","uto":"0","um":"0","d":[{"id":"LogText","type":"constr","data":LogText,"class":"string"}]}
                var CodeAdditional = _.template($("#log_code").html())({text:"\"" + tr("Error occurred") + " : \" + VAR_LAST_ERROR"})
                ControlsAdditional = "/*Dat:" + utf8_to_b64(JSON.stringify(ControlsAdditional)) + "*/"
                BrowserAutomationStudio_Append("\u007b\u0022c\u0022:\u00225\u0022\u007d", ControlsAdditional + CodeAdditional, 1);
              }


            }catch(e)
            {}
          }else if(State == "foreach")
          {
            var ForArray = GetInputConstructorValue("ForArray",loader)
            if(ForArray["original"].length == 0)
            {
              Invalid("Array is empty");
              return;
            }
             try{

              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({for_array:ForArray["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 1, false);

              if(!_GobalModel.get("isedit"))
              {
                var LogText = tr("Current data") + " : [[FOREACH_DATA]]"
                var ControlsAdditional = {"s":"log","v":1,"f":[],"uw":"0","ut":"0","uto":"0","um":"0","d":[{"id":"LogText","type":"constr","data":LogText,"class":"string"}]}
                var CodeAdditional = _.template($("#log_code").html())({text:"\"" + tr("Current data") + " : \" + VAR_FOREACH_DATA"})
                ControlsAdditional = "/*Dat:" + utf8_to_b64(JSON.stringify(ControlsAdditional)) + "*/"
                BrowserAutomationStudio_Append("", ControlsAdditional + CodeAdditional, 1);

                var LogText = tr("Current loop repetition") + " : [[CYCLE_INDEX]]"
                var ControlsAdditional = {"s":"log","v":1,"f":[],"uw":"0","ut":"0","uto":"0","um":"0","d":[{"id":"LogText","type":"constr","data":LogText,"class":"string"}]}
                var CodeAdditional = _.template($("#log_code").html())({text:"\"" + tr("Current loop repetition") + " : \" + VAR_CYCLE_INDEX"})
                ControlsAdditional = "/*Dat:" + utf8_to_b64(JSON.stringify(ControlsAdditional)) + "*/"
                BrowserAutomationStudio_Append("", ControlsAdditional + CodeAdditional, 1);
              }

            }catch(e)
            {}
          }else if(State == "resize")
          {
            var width = GetInputConstructorValue("ResizeX",loader)
            var height = GetInputConstructorValue("ResizeY",loader)

            if(width["original"].length == 0)
            {
              Invalid("Width is empty");
              return;
            }


            if(height["original"].length == 0)
            {
              Invalid("Height is empty");
              return;
            }

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({width:width["updated"],height:height["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "type")
          {
            var TypeData = GetInputConstructorValue("TypeData",loader);
            var TypeInterval = GetInputConstructorValue("TypeInterval",loader);

            if(TypeInterval["original"].length == 0)
            {
              Invalid("interval is empty");
              return;
            }
            if(TypeData["original"].length == 0)
            {
              Invalid("Type data is empty");
              return;
            }

            try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({text:TypeData["updated"],interval:TypeInterval["updated"]}) + BrowserAutomationStudio_GetWaitCode()
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "typeelement")
          {
            var TypeData = GetInputConstructorValue("TypeData",loader);
            var TypeInterval = GetInputConstructorValue("TypeInterval",loader);
            var Check = $("#Check").is(':checked')

            if(TypeInterval["original"].length == 0)
            {
              Invalid("interval is empty");
              return;
            }
            if(TypeData["original"].length == 0)
            {
              Invalid("Type data is empty");
              return;
            }

            try{
              var path = GetPath(loader,false,true)
              var MoveSettings = BrowserAutomationStudio_GetMoveJson(loader)
              var EmulationTime = GetInputConstructorValue("time",loader)
              var EmulationSettings = BrowserAutomationStudio_GetEmulationData(loader)
              var AdditionalEmulation = GetInputConstructorValue("additionalEmulation",loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({text:TypeData["updated"],move_settings: MoveSettings, emulation_time: EmulationTime["updated"], emulation_settings: EmulationSettings, additional_emulation: AdditionalEmulation["updated"],interval:TypeInterval["updated"],path: path["path"],waiter: path["waiter"], disableemulation: Check}) + BrowserAutomationStudio_GetWaitCode()
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "set")
          {
            var Value = GetInputConstructorValue("Value",loader);


            if(Value["original"].length == 0)
            {
              Invalid("Set value is empty");
              return;
            }

            try{
              var path = GetPath(loader,false,true)
              var EmulationTime = GetInputConstructorValue("time",loader)
              var EmulationSettings = BrowserAutomationStudio_GetEmulationData(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({set:Value["updated"],path: path["path"],waiter: path["waiter"], emulation_time: EmulationTime["updated"], emulation_settings: EmulationSettings})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "set_integer")
          {
            var Value = GetInputConstructorValue("Value",loader);


            if(Value["original"].length == 0)
            {
              Invalid("Set value is empty");
              return;
            }

            try{
              var path = GetPath(loader,false,true)
              var EmulationTime = GetInputConstructorValue("time",loader)
              var EmulationSettings = BrowserAutomationStudio_GetEmulationData(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({set:Value["updated"],path: path["path"],waiter: path["waiter"], emulation_time: EmulationTime["updated"], emulation_settings: EmulationSettings})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "set_random")
          {

            try{
              var path = GetPath(loader,false,true)
              var EmulationTime = GetInputConstructorValue("time",loader)
              var EmulationSettings = BrowserAutomationStudio_GetEmulationData(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({path: path["path"],waiter: path["waiter"], emulation_time: EmulationTime["updated"], emulation_settings: EmulationSettings})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }
          else if(State == "Checksum_String"){var input = GetInputConstructorValue("input", loader);
if(input["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var algorithm = GetInputConstructorValue("algorithm", loader);
if(algorithm["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("Algorithm") + tr("\" is not specified"));
    return;
};
var base64 = $("#Check").is(':checked');
var outputLength = GetInputConstructorValue("outputLength", loader);
var outputEncoding = GetInputConstructorValue("outputEncoding", loader);
if(outputEncoding["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("Output format") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
try{
    var code = loader.GetAdditionalData() + _.template($("#Checksum_String_code").html())({
        "input": input["updated"],
        "algorithm": algorithm["updated"],
        "base64": base64,
        "outputLength": outputLength["updated"],
        "outputEncoding": outputEncoding["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "Checksum_File"){var filePath = GetInputConstructorValueFilename("filePath", loader);
if(filePath["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("File path") + tr("\" is not specified"));
    return;
};
var algorithm = GetInputConstructorValue("algorithm", loader);
if(algorithm["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("Algorithm") + tr("\" is not specified"));
    return;
};
var outputLength = GetInputConstructorValue("outputLength", loader);
var outputEncoding = GetInputConstructorValue("outputEncoding", loader);
if(outputEncoding["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("Output format") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
try{
    var code = loader.GetAdditionalData() + _.template($("#Checksum_File_code").html())({
        "filePath": filePath["updated"],
        "algorithm": algorithm["updated"],
        "outputLength": outputLength["updated"],
        "outputEncoding": outputEncoding["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "Checksum_GetAlgorithmsList"){var Save = this.$el.find("#Save").val().toUpperCase();
try{
    var code = loader.GetAdditionalData() + _.template($("#Checksum_GetAlgorithmsList_code").html())({
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}
}else if(State == "clickCaptchaElement"){const textInstructions = GetInputConstructorValue('textInstructions', loader);
const taskWaitTimeout = GetInputConstructorValue('taskWaitTimeout', loader);
const taskWaitDelay = GetInputConstructorValue('taskWaitDelay', loader);
const serviceName = GetInputConstructorValue('serviceName', loader);
const serviceKey = GetInputConstructorValue('serviceKey', loader);
const serviceUrl = GetInputConstructorValue('serviceUrl', loader);
const emulateMouse = $("#emulateMouse").is(':checked');

if (!taskWaitTimeout.original.length) {
  return Invalid(tr('The "Task solution check interval" parameter is empty'));
}
if (!taskWaitDelay.original.length) {
  return Invalid(tr('The "Task solution check delay" parameter is empty'));
}
if (!serviceName.original.length) {
  return Invalid(tr('The "Service name" parameter is empty'));
}
if (!serviceKey.original.length) {
  return Invalid(tr('The "Service key" parameter is empty'));
}

try {
  const code = Normalize(loader.GetAdditionalData() + _.template($('#clickCaptchaElement_code').html())({
    textInstructions: textInstructions.updated,
    taskWaitTimeout: taskWaitTimeout.updated,
    taskWaitDelay: taskWaitDelay.updated,
    serviceName: serviceName.updated,
    serviceKey: serviceKey.updated,
    serviceUrl: serviceUrl.updated,
    emulateMouse,
    ...GetPath(loader)
  }), 0);
  BrowserAutomationStudio_Append('', BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
} catch (e) { console.log('Error while adding action:', e) }}else if(State == "clipboard_getclipboard"){var Save = this.$el.find("#Save").val().toUpperCase();
var Mime = GetInputConstructorValue("MimeType", loader);
var Base64 = $("#Check").is(':checked')

if(Mime.length == 0)
{
  Invalid("MimeType is empty");
  return;
}
 try{
  var code = loader.GetAdditionalData() + _.template($("#getclipboard_code").html())({variable:"VAR_" + Save,base64:Base64,mime:Mime["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "clipboard_setclipboard"){var Value = GetInputConstructorValue("Value",loader)
var Mime = GetInputConstructorValue("MimeType",loader)
var Base64 = $("#Check").is(':checked')


if(Value["original"].length <= 0)
{
  Invalid("Data is empty");
  return;
}

if(Mime["original"].length <= 0)
{
  Invalid("MimeType is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($('#setclipboard_code').html())({data:Value["updated"],mime:Mime["updated"],base64:Base64})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{
}}else if(State == "Database_GetGroupList"){var GroupList = this.$el.find("#GroupList").val().toUpperCase();

var Table = $("#Table").val();

if(GroupList.length == 0)
{
  Invalid("GroupList is empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#database_get_group_list_code").html())({variable:"VAR_" + GroupList,table: Table})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "Database_CreateGroup"){var GroupId = this.$el.find("#GroupId").val().toUpperCase();
var Name = GetInputConstructorValue("Name", loader);
var Description = GetInputConstructorValue("Description", loader);
var Table = $("#Table").val();


if(GroupId.length == 0)
{
  Invalid("GroupId is empty");
  return;
}

if(Name["original"].length == 0)
{
  Invalid("Name is empty");
  return;
}

if(Description["original"].length == 0)
{
  Invalid("Description is empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#database_create_group_code").html())({group:"VAR_" + GroupId,name: Name["updated"],description: Description["updated"],table: Table})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "Database_DeleteGroup"){var GroupId = GetInputConstructorValue("GroupId", loader);
var DeleteData = GetInputConstructorValue("DeleteData", loader);

var Table = $("#Table").val();


if(GroupId["original"].length == 0)
{
  Invalid("GroupId is empty");
  return;
}

if(DeleteData["original"].length == 0)
{
  Invalid("DeleteData is empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#database_delete_group_code").html())({group_id: GroupId["updated"], delete_data: DeleteData["updated"],table: Table})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "Database_ChangeGroup"){var Name = GetInputConstructorValue("Name", loader);
var GroupId = GetInputConstructorValue("GroupId", loader);
var Description = GetInputConstructorValue("Description", loader);
var Table = $("#Table").val();


try{
  var code = loader.GetAdditionalData() + _.template($("#database_change_group_code").html())({group:GroupId["updated"],name: Name["updated"],description: Description["updated"],table: Table})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "Database_CopyGroup"){var DuplicatedGroupId = this.$el.find("#DuplicatedGroupId").val().toUpperCase();
var GroupId = GetInputConstructorValue("GroupId", loader);

var Table = $("#Table").val();


if(DuplicatedGroupId.length == 0)
{
  Invalid("DuplicatedGroupId is empty");
  return;
}



try{
  var code = loader.GetAdditionalData() + _.template($("#database_copy_group_code").html())({group_id: GroupId["updated"], variable: "VAR_" + DuplicatedGroupId,table: Table})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "Database_MoveRecordToGroup"){var MovedRecordId = this.$el.find("#MovedRecordId").val().toUpperCase();
var GroupId = GetInputConstructorValue("GroupId", loader);
var MoveType = GetInputConstructorValue("MoveType", loader);
var RecordId = GetInputConstructorValue("RecordId", loader);


var Table = $("#Table").val();


if(MovedRecordId.length == 0)
{
  Invalid("MovedRecordId is empty");
  return;
}

if(MoveType["original"] == 0)
{
  Invalid("MoveType is empty");
  return;
}

if(RecordId["original"] == 0)
{
  Invalid("RecordId is empty");
  return;
}



try{
  var code = loader.GetAdditionalData() + _.template($("#database_move_record_to_group_code").html())(
  	{
  		group_id: GroupId["updated"], 
  		move_type: MoveType["updated"], 
  		record_id: RecordId["updated"], 
  		variable: "VAR_" + MovedRecordId,
  		table: Table
  	})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "Database_InsertRecord"){var GroupId = GetInputConstructorValue("GroupId", loader);
var AddToResources = GetInputConstructorValue("AddToResources", loader);
var Variable = this.$el.find("#Record").val().toUpperCase();

var Table = $("#Table").val();

if(AddToResources["original"] == 0)
{
  Invalid("AddToResources is empty");
  return;
}

var params = []

var els = $("*[data-table-id=" + Table + "]")
for(var i = 0;i<els.length;i++)
{
	var el = els[i]
	var id = el.attributes["data-id"]["value"]
	var p = GetInputConstructorValue("Table_" + Table + "_Column_" + id, loader);
	params.push(id)
	params.push(p["updated"])
}


try{
  var code = loader.GetAdditionalData() + _.template($("#database_insert_record_code").html())({ variable: "VAR_" + Variable,group:GroupId["updated"],table: Table, params: params, add_to_resources: AddToResources["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "Database_UpdateRecord"){var RecordId = GetInputConstructorValue("RecordId", loader);
var UpdateResources = GetInputConstructorValue("UpdateResources", loader);

var Table = $("#Table").val();

if(UpdateResources["original"] == 0)
{
  Invalid("UpdateResources is empty");
  return;
}

var params = []

var els = $("*[data-table-id=" + Table + "]")
for(var i = 0;i<els.length;i++)
{
	var el = els[i]
	var id = el.attributes["data-id"]["value"]
	
	var p = GetInputConstructorValue("Table_" + Table + "_Column_" + id, loader);
	if(p["original"].length > 0)
	{
		params.push(id)
		params.push(p["updated"])
	}
}


try{
  var code = loader.GetAdditionalData() + _.template($("#database_update_record_code").html())({update_resources: UpdateResources["updated"], record:RecordId["updated"],table: Table, params: params})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "Database_UpdateRecordsByCriteria"){var GroupId = GetInputConstructorValue("GroupId", loader);
var UpdateResources = GetInputConstructorValue("UpdateResources", loader);

var Table = $("#Table").val();

if(UpdateResources["original"] == 0)
{
  Invalid("UpdateResources is empty");
  return;
}

var params = []

var els = $("*[data-table-id=" + Table + "]")
for(var i = 0;i<els.length;i++)
{
	var el = els[i]
	var id = el.attributes["data-id"]["value"]
	
	var p = GetInputConstructorValue("Table_" + Table + "_Column_" + id, loader);
	if(p["original"].length > 0)
	{
		params.push(id)
		params.push(p["updated"])
	}
}


var filters = _Filter.GetFilters()
var Filters = " [ " 
filters.forEach(function(filter, item_index_all){
	Filters += " [ " 
	filter.forEach(function(item, item_index){
		if(item_index == 0)
			loader.SetIsString(false)
		if(item_index == 1)
			loader.SetIsString(true)
		if(item_index == 2)
			loader.SetIsString(false)
		
    	var add = loader.Resolve(item);
    	Filters += add
    	
		if(item_index != filter.length - 1)
			Filters += ","
	})
	
	Filters += " ] " 

	if(item_index_all != filters.length - 1)
		Filters += ","	
})

Filters += " ]" 



try{
  var code = loader.GetAdditionalData() + _.template($("#database_update_records_by_criteria_code").html())({update_resources: UpdateResources["updated"], table: Table, params: params, group_id: GroupId["updated"],filters: Filters})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "Database_SelectOne"){var RecordId = GetInputConstructorValue("RecordId", loader);
var RecordString = this.$el.find("#RecordString").val().toUpperCase();
var Table = $("#Table").val();

if(RecordString.length == 0)
{
  Invalid("Record is empty");
  return;
}

if(RecordId["original"] == 0)
{
  Invalid("RecordId is empty");
  return;
}


try{

  var code = loader.GetAdditionalData() + _.template($("#database_select_one_record_code").html())
  (
  	{
  		record_id:RecordId["updated"],
  		table: Table,
  		variable:"VAR_" + RecordString
  	}
  )

  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{
	alert(e)
}}else if(State == "Database_SelectRecords"){var RecordList = this.$el.find("#RecordList").val().toUpperCase();
var PageNumber = GetInputConstructorValue("PageNumber", loader);
var PageSize = GetInputConstructorValue("PageSize", loader);

var Table = $("#Table").val();

var SortingType = GetInputConstructorValue("SortingType", loader);
var GroupId = GetInputConstructorValue("GroupId", loader);
var SortColumn = $("#SortColumns" + Table).val();

if(SortingType["original"] == 0)
{
  Invalid("SortingType is empty");
  return;
}

var filters = _Filter.GetFilters()
var Filters = " [ " 
filters.forEach(function(filter, item_index_all){
	Filters += " [ " 
	filter.forEach(function(item, item_index){
		if(item_index == 0)
			loader.SetIsString(false)
		if(item_index == 1)
			loader.SetIsString(true)
		if(item_index == 2)
			loader.SetIsString(false)
		
    	var add = loader.Resolve(item);
    	Filters += add
    	
		if(item_index != filter.length - 1)
			Filters += ","
	})
	
	Filters += " ] " 

	if(item_index_all != filters.length - 1)
		Filters += ","	
})

Filters += " ]" 



if(RecordList.length == 0)
{
  Invalid("RecordList is empty");
  return;
}



try{
  var code = loader.GetAdditionalData() + _.template($("#database_select_records_code").html())(
  	{
  		page_number: PageNumber["updated"], 
  		page_size: PageSize["updated"],
  		filters: Filters,
  		variable:"VAR_" + RecordList,
  		table: Table,
  		sorting_type: SortingType["updated"],
  		group_id: GroupId["updated"],
  		sort_column: SortColumn
  			
  	})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "Database_DeleteOneRecord"){var RecordId = GetInputConstructorValue("RecordId", loader);
var DeleteResources = GetInputConstructorValue("DeleteResources", loader);

var Table = $("#Table").val();

if(DeleteResources["original"] == 0)
{
  Invalid("DeleteResources is empty");
  return;
}



try{

  var code = loader.GetAdditionalData() + _.template($("#database_delete_one_record_code").html())({delete_resources: DeleteResources["updated"], record_id:RecordId["updated"],table: Table})

  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{
	alert(e)
}}else if(State == "Database_DeleteRecords"){var GroupId = GetInputConstructorValue("GroupId", loader);
var DeleteResources = GetInputConstructorValue("DeleteResources", loader);

var Table = $("#Table").val();

if(DeleteResources["original"] == 0)
{
  Invalid("DeleteResources is empty");
  return;
}

var filters = _Filter.GetFilters()
var Filters = " [ " 
filters.forEach(function(filter, item_index_all){
	Filters += " [ " 
	filter.forEach(function(item, item_index){
		if(item_index == 0)
			loader.SetIsString(false)
		if(item_index == 1)
			loader.SetIsString(true)
		if(item_index == 2)
			loader.SetIsString(false)
		
    	var add = loader.Resolve(item);
    	Filters += add
    	
		if(item_index != filter.length - 1)
			Filters += ","
	})
	
	Filters += " ] " 

	if(item_index_all != filters.length - 1)
		Filters += ","	
})

Filters += " ]" 

try{
  var code = loader.GetAdditionalData() + _.template($("#database_delete_records_code").html())({filters: Filters,table: Table, group_id: GroupId["updated"], delete_resources: DeleteResources["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "Database_CountRecords"){var GroupId = GetInputConstructorValue("GroupId", loader);
var RecordsCount = this.$el.find("#RecordsCount").val().toUpperCase();
var Table = $("#Table").val();

var filters = _Filter.GetFilters()
var Filters = " [ " 
filters.forEach(function(filter, item_index_all){
	Filters += " [ " 
	filter.forEach(function(item, item_index){
		if(item_index == 0)
			loader.SetIsString(false)
		if(item_index == 1)
			loader.SetIsString(true)
		if(item_index == 2)
			loader.SetIsString(false)
		
    	var add = loader.Resolve(item);
    	Filters += add
    	
		if(item_index != filter.length - 1)
			Filters += ","
	})
	
	Filters += " ] " 

	if(item_index_all != filters.length - 1)
		Filters += ","	
})

Filters += " ]" 

try{
  var code = loader.GetAdditionalData() + _.template($("#database_count_records_code").html())({filters: Filters,table: Table, group_id: GroupId["updated"], variable: "VAR_" + RecordsCount})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_stringtodate"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);
var Format = GetInputConstructorValue("Format", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}

if(Format["original"].length == 0)
{
  Invalid("Format is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($("#stringtodate_code").html())({variable:"VAR_" + Save,value: StringValue["updated"],format: Format["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_datetostring"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);
var Format = GetInputConstructorValue("Format", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}

if(Format["original"].length == 0)
{
  Invalid("Format is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($("#datetostring_code").html())({variable:"VAR_" + Save,value: StringValue["updated"],format: Format["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_msecondstodate"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#msecondstodate_code").html())({variable:"VAR_" + Save,value: StringValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_datetomseconds"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($("#datetomseconds_code").html())({variable:"VAR_" + Save,value: StringValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_createdate"){var Save = this.$el.find("#Save").val().toUpperCase();

var Year = GetInputConstructorValue("Year", loader);
var Month = GetInputConstructorValue("Month", loader);
var Day = GetInputConstructorValue("Day", loader);
var Hour = GetInputConstructorValue("Hour", loader);
var Minutes = GetInputConstructorValue("Minutes", loader);
var Seconds = GetInputConstructorValue("Seconds", loader);
var Milliseconds = GetInputConstructorValue("Milliseconds", loader);
var Timezone = GetInputConstructorValue("Timezone", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(Month["original"].length == 0)
{
  Invalid("Month is empty");
  return;
}

if(Day["original"].length == 0)
{
  Invalid("Day is empty");
  return;
}

if(Hour["original"].length == 0)
{
  Invalid("Hour is empty");
  return;
}

if(Minutes["original"].length == 0)
{
  Invalid("Minutes is empty");
  return;
}

if(Seconds["original"].length == 0)
{
  Invalid("Seconds is empty");
  return;
}

if(Milliseconds["original"].length == 0)
{
  Invalid("Milliseconds is empty");
  return;
}

if(Timezone["original"].length == 0)
{
  Invalid("Timezone is empty");
  return;
}

if(Year["original"].length == 0)
{
  Invalid("Year is empty");
  return;
}



 try{
  var code = loader.GetAdditionalData() + _.template($("#createdate_code").html())(
  	{
  		variable:"VAR_" + Save,
  		month: Month["updated"],
  		day: Day["updated"],
  		hour: Hour["updated"],
  		minute: Minutes["updated"],
  		second: Seconds["updated"],
  		millisecond: Milliseconds["updated"],
  		timezone: Timezone["updated"],
  		year: Year["updated"]
  	})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_changedate"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);
var Year = GetInputConstructorValue("Year", loader);
var Month = GetInputConstructorValue("Month", loader);
var Day = GetInputConstructorValue("Day", loader);
var Hour = GetInputConstructorValue("Hour", loader);
var Minutes = GetInputConstructorValue("Minutes", loader);
var Seconds = GetInputConstructorValue("Seconds", loader);
var Milliseconds = GetInputConstructorValue("Milliseconds", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}

if(Month["original"].length == 0)
{
  Invalid("Month is empty");
  return;
}

if(Day["original"].length == 0)
{
  Invalid("Day is empty");
  return;
}

if(Hour["original"].length == 0)
{
  Invalid("Hour is empty");
  return;
}

if(Minutes["original"].length == 0)
{
  Invalid("Minutes is empty");
  return;
}

if(Seconds["original"].length == 0)
{
  Invalid("Seconds is empty");
  return;
}

if(Milliseconds["original"].length == 0)
{
  Invalid("Milliseconds is empty");
  return;
}


if(Year["original"].length == 0)
{
  Invalid("Year is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($("#changedate_code").html())(
  	{
  		variable:"VAR_" + Save,
  		value: StringValue["updated"],
  		month: Month["updated"],
  		day: Day["updated"],
  		hour: Hour["updated"],
  		minute: Minutes["updated"],
  		second: Seconds["updated"],
  		millisecond: Milliseconds["updated"],
  		year: Year["updated"]
  	
  	})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}
}else if(State == "datetime_addsecondstodate"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);
var Seconds = GetInputConstructorValue("Seconds", loader);
var Minutes = GetInputConstructorValue("Minutes", loader);
var Hours = GetInputConstructorValue("Hours", loader);
var Days = GetInputConstructorValue("Days", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}

if(Seconds["original"].length == 0)
{
  Invalid("Seconds is empty");
  return;
}

if(Minutes["original"].length == 0)
{
  Invalid("Minutes is empty");
  return;
}


if(Hours["original"].length == 0)
{
  Invalid("Hours is empty");
  return;
}

if(Days["original"].length == 0)
{
  Invalid("Days is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($("#addsecondstodate_code").html())({variable:"VAR_" + Save,value: StringValue["updated"],seconds: Seconds["updated"],minutes: Minutes["updated"],hours: Hours["updated"],days: Days["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_substractdates"){var Save = this.$el.find("#Save").val().toUpperCase();
var DecreasingString = GetInputConstructorValue("DecreasingString", loader);
var SubtractedString = GetInputConstructorValue("SubtractedString", loader);



if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(DecreasingString["original"].length == 0)
{
  Invalid("Decreasing string is empty");
  return;
}

if(SubtractedString["original"].length == 0)
{
  Invalid("Subtracted string is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($("#substractdates_code").html())({variable:"VAR_" + Save,decreasing: DecreasingString["updated"],subtracted: SubtractedString["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_datenow"){var Save = this.$el.find("#Save").val().toUpperCase();

if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($("#datenow_code").html())({variable:"VAR_" + Save})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_changetimezone"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);
var Timezone = GetInputConstructorValue("Timezone", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}

if(Timezone["original"].length == 0)
{
  Invalid("Timezone is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($("#changetimezone_code").html())({variable:"VAR_" + Save,value: StringValue["updated"],timezone: Timezone["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_gettimezone"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#gettimezone_code").html())({variable:"VAR_" + Save,value: StringValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_dayofmonth"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#dayofmonth_code").html())({variable:"VAR_" + Save,value: StringValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_dayofweek"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#dayofweek_code").html())({variable:"VAR_" + Save,value: StringValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_dayofyear"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#dayofyear_code").html())({variable:"VAR_" + Save,value: StringValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_year"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#year_code").html())({variable:"VAR_" + Save,value: StringValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_month"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#month_code").html())({variable:"VAR_" + Save,value: StringValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_hour"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#hour_code").html())({variable:"VAR_" + Save,value: StringValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_minute"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#minute_code").html())({variable:"VAR_" + Save,value: StringValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_second"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#second_code").html())({variable:"VAR_" + Save,value: StringValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "datetime_millisecond"){var Save = this.$el.find("#Save").val().toUpperCase();
var StringValue = GetInputConstructorValue("String", loader);


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(StringValue["original"].length == 0)
{
  Invalid("String is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#millisecond_code").html())({variable:"VAR_" + Save,value: StringValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "EmbeddedLanguagesNodeJs"){var Code = ""
if(window.NodeJsGlobal.Selected == "current")
{
  Code = window.NodeJsGlobal.Editor.getValue()
}else
{
  Code = window.NodeJsGlobal.InitialValue
}

var CodeInfo = ""

if(typeof(CodeInfo) == "string")
{
  CodeInfo = Code.substring(0, 64)
}

var NameRaw = GetInputConstructorValue("Name", loader)["original"];
var Name = '"' + NameRaw + '"';
var VersionRaw = this.$el.find("#NodeVersionList").val();
var Version = '"' + VersionRaw + '"';

var Variables = $.unique((Code.match(/\[\[([^\]]+)\]\]/g) || []));
var VariablesString = '"' + Variables.join(",").replace(/[\]\[]/g,"")+ '"';

Variables = Variables.map((el) => {return el.replace("[[","VAR_").replace("]]","")})

//Code = Code.replace(/\[\[([^\]]+)\]\]/g, "BAS_VARS[\"$1\"]")

try{
  var code = loader.GetAdditionalData() + _.template($('#embedded_language_nodejs_code').html())(
  	{
  		name_raw: NameRaw,
  		name: Name,
  		version_raw: VersionRaw,
  		version: Version,
      variables: Variables.join(" "),
      variables_string: VariablesString
  	})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls({ci: CodeInfo}) + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "filesystem_readfile"){var Save = this.$el.find("#Save").val().toUpperCase();
var Value = GetInputConstructorValueFilename("Value", loader);
var From = GetInputConstructorValue("From", loader);
var To = GetInputConstructorValue("To", loader);
var base64 = $("#Check").is(':checked')


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}
if(Value["original"].length == 0)
{
  Invalid("File path is empty");
  return;
}
 try{
  var code = loader.GetAdditionalData() + _.template($("#readfile_code").html())({variable:"VAR_" + Save,value: Value["updated"],base64:base64,from:From["updated"],to:To["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "filesystem_writefile"){var File = GetInputConstructorValueFilename("File",loader)
var Value = GetInputConstructorValue("Value",loader)
var append = $("#Check").is(':checked')
var base64 = $("#Check2").is(':checked')
var eol = $("#Check3").is(':checked')


if(File["original"].length <= 0)
{
  Invalid("File is empty");
  return;
}

if(Value["original"].length <= 0)
{
  Invalid("Data is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($('#writefile_code').html())({path:File["updated"],value:Value["updated"],append:append,base64:base64,eol:eol})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{
}}else if(State == "filesystem_fileinfo"){var SaveExists = this.$el.find("#SaveExists").val().toUpperCase();
var SaveSize = this.$el.find("#SaveSize").val().toUpperCase();
var SaveDirectory = this.$el.find("#SaveDirectory").val().toUpperCase();
var SaveIsDirectory = this.$el.find("#SaveIsDirectory").val().toUpperCase();
var SaveLastModified = this.$el.find("#SaveLastModified").val().toUpperCase();

var Value = GetInputConstructorValueFilename("Value", loader);


if(SaveExists.length == 0 || SaveSize.length == 0 || SaveDirectory.length == 0 || SaveIsDirectory.length == 0 || SaveLastModified.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(Value["original"].length == 0)
{
  Invalid("File path is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($("#fileinfo_code").html())({variable_exists:"VAR_" + SaveExists,variable_size:"VAR_" + SaveSize,variable_directory:"VAR_" + SaveDirectory,variable_is_directory:"VAR_" + SaveIsDirectory,variable_last_modified:"VAR_" + SaveLastModified,value: Value["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "filesystem_createdir"){var Value = GetInputConstructorValue("Value", loader);

if(Value["original"].length == 0)
{
  Invalid("Dir path is empty");
  return;
}
 try{
  var code = loader.GetAdditionalData() + _.template($("#createdir_code").html())({value: Value["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "filesystem_removefile"){var Value = GetInputConstructorValueFilename("Value", loader);

if(Value["original"].length == 0)
{
  Invalid("File path is empty");
  return;
}
 try{
  var code = loader.GetAdditionalData() + _.template($("#removefile_code").html())({value: Value["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "filesystem_movefile"){var Value = GetInputConstructorValueFilename("Value", loader);
var ValueDest = GetInputConstructorValueFilename("ValueDest", loader);

if(Value["original"].length == 0)
{
  Invalid("File path is empty");
  return;
}

if(ValueDest["original"].length == 0)
{
  Invalid("File path is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($("#movefile_code").html())({value: Value["updated"],dest: ValueDest["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "filesystem_copyfile"){var Value = GetInputConstructorValueFilename("Value", loader);
var ValueDest = GetInputConstructorValueFilename("ValueDest", loader);

if(Value["original"].length == 0)
{
  Invalid("File path is empty");
  return;
}

if(ValueDest["original"].length == 0)
{
  Invalid("File path is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($("#copyfile_code").html())({value: Value["updated"],dest: ValueDest["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "filesystem_search"){var Folder = GetInputConstructorValue("Folder",loader)
var Mask = GetInputConstructorValue("Mask",loader)
var FileContains = GetInputConstructorValue("FileContains",loader)
var IncludeFiles = $("#Check2").is(':checked')
var IncludeFolders = $("#Check").is(':checked')
var RecursiveSearch = $("#Check3").is(':checked')
var Save = this.$el.find("#Save").val().toUpperCase();



if(Folder["original"].length <= 0)
{
  Invalid("Folder is empty");
  return;
}

if(Mask["original"].length <= 0)
{
  Invalid("Mask is empty");
  return;
}

if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($('#search_code').html())(
	  	{
	  		variable:"VAR_" + Save,
	  		folder:Folder["updated"],
	  		mask:Mask["updated"],
	  		contains:FileContains["updated"],
	  		include_folders:IncludeFolders,
	  		include_files:IncludeFiles,
	  		recursive:RecursiveSearch
	  	}
  	)
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{
}}else if(State == "filesystem_file_to_list"){var Save = this.$el.find("#Save").val().toUpperCase();
var Value = GetInputConstructorValueFilename("Value", loader);


if(Save.length == 0)
{
  Invalid("List is empty");
  return;
}
if(Value["original"].length == 0)
{
  Invalid("File path is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($("#file_to_list_code").html())({variable:"VAR_" + Save,value: Value["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "filesystem_list_to_file"){var File = GetInputConstructorValueFilename("File",loader)
var Save = this.$el.find("#Save").val().toUpperCase();
var append = $("#Check").is(':checked')
var eol = $("#Check2").is(':checked')



if(File["original"].length <= 0)
{
  Invalid("File is empty");
  return;
}

if(Save.length <= 0)
{
  Invalid("List is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($('#list_to_file_code').html())({path:File["updated"],save:"VAR_" + Save,append:append,eol:eol})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{
}}else if(State == "FingerprintSwitcher_Get"){var Tags = GetInputConstructorValue("Tags", loader);
var Key = GetInputConstructorValue("Key", loader);
var Save = this.$el.find("#Save").val().toUpperCase();

var AddedDate = GetInputConstructorValue("AddedDate", loader);
var BrowserVersion = GetInputConstructorValue("BrowserVersion", loader);
var MaxBrowserVersion = GetInputConstructorValue("MaxBrowserVersion", loader);
var MinimumWidth = GetInputConstructorValue("MinimumWidth", loader);
var MinimumHeight = GetInputConstructorValue("MinimumHeight", loader);
var MaximumWidth = GetInputConstructorValue("MaximumWidth", loader);
var MaximumHeight = GetInputConstructorValue("MaximumHeight", loader);
var PerfectCanvasRequest = GetInputConstructorValue("PerfectCanvasRequest", loader);
var PerfectCanvasDebug = GetInputConstructorValue("PerfectCanvasDebug", loader);

var EnableCustomServers = GetInputConstructorValue("EnableCustomServers", loader);
var DynamicPerfectCanvas = GetInputConstructorValue("DynamicPerfectCanvas", loader);
var EnablePrecomputedFingerprints = GetInputConstructorValue("EnablePrecomputedFingerprints", loader);

var SuppressWarnings = GetInputConstructorValue("SuppressWarnings", loader);

if(Tags["original"].length == 0)
{
  Invalid("Tags are empty");
  return;
}

if(AddedDate["original"].length == 0)
{
  Invalid("AddedDate are empty");
  return;
}
if(BrowserVersion["original"].length == 0)
{
  Invalid("BrowserVersion are empty");
  return;
}
if(MaxBrowserVersion["original"].length == 0)
{
  Invalid("MaxBrowserVersion are empty");
  return;
}
if(MinimumWidth["original"].length == 0)
{
  Invalid("MinimumWidth are empty");
  return;
}
if(MinimumHeight["original"].length == 0)
{
  Invalid("MinimumHeight are empty");
  return;
}
if(MaximumWidth["original"].length == 0)
{
  Invalid("MaximumWidth are empty");
  return;
}
if(MaximumHeight["original"].length == 0)
{
  Invalid("MaximumHeight are empty");
  return;
}
if(EnableCustomServers["original"].length == 0)
{
  Invalid("EnableCustomServers is empty");
  return;
}
if(DynamicPerfectCanvas["original"].length == 0)
{
  Invalid("DynamicPerfectCanvas is empty");
  return;
}
if(EnablePrecomputedFingerprints["original"].length == 0)
{
  Invalid("EnablePrecomputedFingerprints is empty");
  return;
}
if(SuppressWarnings["original"].length == 0)
{
  Invalid("SuppressWarnings is empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#get_fingerprint_code").html())(
    {
      tags: Tags["updated"], 
      variable:"VAR_" + Save, 
      key: Key["updated"],
      min_browser_version: BrowserVersion["updated"],
      max_browser_version: MaxBrowserVersion["updated"],
      min_width: MinimumWidth["updated"],
      min_height: MinimumHeight["updated"],
      max_width: MaximumWidth["updated"],
      max_height: MaximumHeight["updated"],
      time_limit: AddedDate["updated"],
      perfectcanvas_request: PerfectCanvasRequest["updated"],
	    perfectcanvas_logs: PerfectCanvasDebug["updated"],
      enable_custom_server: EnableCustomServers["updated"],
      dynamic_perfect_canvas: DynamicPerfectCanvas["updated"],
      enable_precomputed_fingerprints: EnablePrecomputedFingerprints["updated"],
      suppress_warnings: SuppressWarnings["updated"]
    })

  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "FingerprintSwitcher_Apply"){var Fingerprint = GetInputConstructorValue("Fingerprint", loader);
var CanvasNoise = GetInputConstructorValue("CanvasNoise", loader);
var WebglNoise = GetInputConstructorValue("WebglNoise", loader);
var AudioNoise = GetInputConstructorValue("AudioNoise", loader);
var SafeBattery = GetInputConstructorValue("SafeBattery", loader);
var SafeRectangles = GetInputConstructorValue("SafeRectangles", loader);
var PerfectCanvas = GetInputConstructorValue("PerfectCanvas", loader);
var Sensor = GetInputConstructorValue("EmulateSensor", loader);
var FontData = GetInputConstructorValue("FontData", loader);
var Key = GetInputConstructorValue("Key", loader);
var EmulateDeviceScaleFactor = GetInputConstructorValue("EmulateDeviceScaleFactor", loader);


if(EmulateDeviceScaleFactor["original"].length == 0)
{
  Invalid("EmulateDeviceScaleFactor is empty");
  return;
}


if(FontData["original"].length == 0)
{
  Invalid("FontData is empty");
  return;
}

if(Sensor["original"].length == 0)
{
  Invalid("Sensor is empty");
  return;
}

if(Fingerprint["original"].length == 0)
{
  Invalid("Fingerprint is empty");
  return;
}

if(CanvasNoise["original"].length == 0)
{
  Invalid("CanvasNoise is empty");
  return;
}

if(PerfectCanvas["original"].length == 0)
{
  Invalid("PerfectCanvas is empty");
  return;
}

if(WebglNoise["original"].length == 0)
{
  Invalid("WebglNoise is empty");
  return;
}

if(AudioNoise["original"].length == 0)
{
  Invalid("AudioNoise is empty");
  return;
}

if(SafeBattery["original"].length == 0)
{
  Invalid("Battery is empty");
  return;
}

if(SafeRectangles["original"].length == 0)
{
  Invalid("Rectangles is empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#apply_fingerprint_code").html())(
  	{
  		fingerprint: Fingerprint["updated"],
  		canvas: CanvasNoise["updated"],
  		webgl: WebglNoise["updated"],
      audio: AudioNoise["updated"],
      battery: SafeBattery["updated"],
      rectangles: SafeRectangles["updated"],
      perfectcanvas: PerfectCanvas["updated"],
      sensor: Sensor["updated"],
      font_data: FontData["updated"],
      device_scale: EmulateDeviceScaleFactor["updated"],
      key: Key["updated"],
  	})

  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "FingerprintSwitcher_Performance"){var TimeDeformationFrom = GetInputConstructorValue("TimeDeformationFrom", loader);
var TimeDeformationTo = GetInputConstructorValue("TimeDeformationTo", loader);
var MaxMeasurementTime = GetInputConstructorValue("MaxMeasurementTime", loader);
var DisablePerformancePrecision = GetInputConstructorValue("DisablePerformancePrecision", loader);

if(TimeDeformationFrom["original"].length == 0)
{
  Invalid("TimeDeformationFrom are empty");
  return;
}
if(TimeDeformationTo["original"].length == 0)
{
  Invalid("TimeDeformationTo are empty");
  return;
}
if(MaxMeasurementTime["original"].length == 0)
{
  Invalid("MaxMeasurementTime are empty");
  return;
}
if(DisablePerformancePrecision["original"].length == 0)
{
  Invalid("DisablePerformancePrecision are empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#performance_fingerprint_code").html())(
    {
      time_deformation_from: TimeDeformationFrom["updated"], 
      time_deformation_to: TimeDeformationTo["updated"],
      max_measurement_time: MaxMeasurementTime["updated"],
      disable_performance_precision: DisablePerformancePrecision["updated"],
    })

  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "FingerprintSwitcher_Override"){var Key = GetInputConstructorValue("Key", loader);


try{
  var code = loader.GetAdditionalData() + _.template($("#override_key_code").html())(
  	{
  		key: Key["updated"],
  	})

  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "FingerprintSwitcher_DisableOverride"){

try{
  var code = loader.GetAdditionalData() + _.template($("#disable_override_key_code").html())(
  	{
  		
  	})

  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "asyncfunction_call"){var FunctionName = $("#FunctionName").val();
if(FunctionName.length == 0)
{
	Invalid("FunctionName is empty");
	return;
}

var Arguments = {}

_.each(this.$el.find("#FunctionParametersNoReturn").find("[data-preserve-type=constr]"), function(Element) {
	var IdHex = $(Element).attr("data-preserve-id")
	var Id = fromhex(IdHex.replace("ParamId_",""))
	Arguments[Id] = GetInputConstructorValue(IdHex, loader)["updated"]
})

var ResultThreadId = this.$el.find("#ResultThreadId").val().toUpperCase();
if(ResultThreadId.length == 0)
{
	Invalid("ResultThreadId is empty");
	return;
}

var ThreadList = this.$el.find("#ThreadList").val().toUpperCase();
if(ThreadList.length == 0)
{
	Invalid("ThreadList is empty");
	return;
}

var DesiredThreadId = GetInputConstructorValue("DesiredThreadId", loader)
var CloseThreadAfterFunctionEnds = GetInputConstructorValue("CloseThreadAfterFunctionEnds", loader)
var MaxThreads = GetInputConstructorValue("MaxThreads", loader)
var OnIdle = GetInputConstructorValue("OnIdle", loader)


if(DesiredThreadId["original"].length == 0)
{
	Invalid("DesiredThreadId is empty");
	return;
}

if(CloseThreadAfterFunctionEnds["original"].length == 0)
{
	Invalid("CloseThreadAfterFunctionEnds is empty");
	return;
}


if(MaxThreads["original"].length == 0)
{
	Invalid("MaxThreads is empty");
	return;
}

if(OnIdle["original"].length == 0)
{
	Invalid("OnIdle is empty");
	return;
}



try{
	var code = loader.GetAdditionalData() + _.template($("#asyncfunction_call_code").html())({
		name:FunctionName, 
		args: Arguments,
		result_thread_id: "VAR_" + ResultThreadId,
		thread_list: "VAR_" + ThreadList,
		desired_thread_id: DesiredThreadId["updated"],
		on_iddle: OnIdle["updated"],
		close_thread_after_function_ends: CloseThreadAfterFunctionEnds["updated"],
		max_threads: MaxThreads["updated"],
	})
	code = Normalize(code,0)
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 1, false);
}catch(e)
{}}else if(State == "asyncfunction_wait"){var ThreadId = GetInputConstructorValue("ThreadId", loader)
if(ThreadId["original"].length == 0)
{
	Invalid("ThreadId is empty");
	return;
}



try{
	var code = loader.GetAdditionalData() + _.template($("#asyncfunction_wait_code").html())({
		thread_id: ThreadId["updated"]
	})
	code = Normalize(code,0)
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "asyncfunction_result"){var ThreadId = GetInputConstructorValue("ThreadId", loader)
if(ThreadId["original"].length == 0)
{
	Invalid("ThreadId is empty");
	return;
}

var Result = this.$el.find("#Result").val().toUpperCase();
if(Result.length == 0)
{
	Invalid("Result is empty");
	return;
}

var IsRunnig = this.$el.find("#IsRunnig").val().toUpperCase();
if(IsRunnig.length == 0)
{
	Invalid("IsRunnig is empty");
	return;
}

var ErrorString = this.$el.find("#Error").val().toUpperCase();
if(ErrorString.length == 0)
{
	Invalid("Error is empty");
	return;
}

var IsSuccess = this.$el.find("#IsSuccess").val().toUpperCase();
if(IsSuccess.length == 0)
{
	Invalid("IsSuccess is empty");
	return;
}

try{
	var code = loader.GetAdditionalData() + _.template($("#asyncfunction_result_code").html())({
		result: "VAR_" + Result, 
		is_running: "VAR_" + IsRunnig,
		is_success: "VAR_" + IsSuccess,
		error: "VAR_" + ErrorString,
		thread_id: ThreadId["updated"]
	})
	code = Normalize(code,0)
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "asyncfunction_stop"){var ThreadId = GetInputConstructorValue("ThreadId", loader)
if(ThreadId["original"].length == 0)
{
	Invalid("ThreadId is empty");
	return;
}



try{
	var code = loader.GetAdditionalData() + _.template($("#asyncfunction_stop_code").html())({
		thread_id: ThreadId["updated"]
	})
	code = Normalize(code,0)
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "IdleEmulationNew"){var time = GetInputConstructorValue("time", loader);
if(time["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Emulation time") + tr("\" is not specified"));
	return;
};
var accuracy = GetInputConstructorValue("accuracy", loader);
if(accuracy["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Actions accuracy") + tr("\" is not specified"));
	return;
};
var intensity = GetInputConstructorValue("intensity", loader);
if(intensity["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Actions intensity") + tr("\" is not specified"));
	return;
};

var sleep = GetInputConstructorValue("sleep", loader);
if(sleep["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Sleep") + tr("\" is not specified"));
	return;
};
var longElementMove = GetInputConstructorValue("longElementMove", loader);
if(longElementMove["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Long move to element") + tr("\" is not specified"));
	return;
};
var shortElementMove = GetInputConstructorValue("shortElementMove", loader);
if(shortElementMove["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Short move to element") + tr("\" is not specified"));
	return;
};
var scroll = GetInputConstructorValue("scroll", loader);
if(scroll["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Scroll") + tr("\" is not specified"));
	return;
};
var randomMove = GetInputConstructorValue("randomMove", loader);
if(randomMove["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Random movement") + tr("\" is not specified"));
	return;
};
var microMove = GetInputConstructorValue("microMove", loader);
if(microMove["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Micro movement") + tr("\" is not specified"));
	return;
};
var goingBeyond = GetInputConstructorValue("goingBeyond", loader);
if(goingBeyond["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Going beyond") + tr("\" is not specified"));
	return;
};
var moveAlongText = GetInputConstructorValue("moveAlongText", loader);
if(moveAlongText["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Movement along text") + tr("\" is not specified"));
	return;
};

var actions = [];
var obj = {sleep: sleep, longElementMove: longElementMove, shortElementMove: shortElementMove, scroll: scroll, randomMove: randomMove, microMove: microMove, goingBeyond: goingBeyond, moveAlongText: moveAlongText};
for(var key in obj){
	var value = obj[key]["updated"];
	if(value !== '"enable"'){
		actions.push(`${key}: (${value})`);
	};
}
actions = actions.join(', ');

var manualSettings = [];
for(var name of ["longMax", "shortMax", "miss", "delay", "filters", "hoverMode", "maxRepeatSkip", "overlapByPoints", "reverseScroll"]){
	var value = GetInputConstructorValue(name, loader)["updated"];
	if(value !== '""'){
		manualSettings.push(`${name}: (${value})`);
	};
};
manualSettings = manualSettings.join(', ');
try{
	var code = loader.GetAdditionalData() + _.template($("#idle_emulation_new_code").html())({
		time: time["updated"],
		accuracy: accuracy["updated"],
		intensity: intensity["updated"],
		actions: actions,
		manualSettings: manualSettings
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}
}else if(State == "IdleEmulationSetGeneralSettings"){var collectParams = function(names, arr = []){
	for(var name of names){
		var value = GetInputConstructorValue(name, loader)["updated"];
		if(value !== '""'){
			arr.push(`${name}: (${value})`);
		};
	};
	return arr;
};

var generalSettings = collectParams(["time", "accuracy", "intensity"]);

var actions = collectParams(["sleep", "longElementMove", "shortElementMove", "scroll", "randomMove", "microMove", "goingBeyond", "moveAlongText"]);
if(actions.length){
	generalSettings.push(`useActions: {${actions.join(', ')}}`);
};

collectParams(["longMax", "shortMax", "miss", "delay", "targetScroll", "targetDelay", "filters", "hoverMode", "maxRepeatSkip", "overlapByPoints", "reverseScroll", "additionalEmulation"], generalSettings);

if(generalSettings.length == 0){
	Invalid(tr("None of the parameters are specified"));
	return;
};

generalSettings = `{${generalSettings.join(', ')}}`;
try{
	var code = loader.GetAdditionalData() + _.template($("#idle_emulation_set_general_settings_code").html())({
		generalSettings: generalSettings
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}
}else if(State == "IdleEmulationResetGeneralSettings"){try{
    var code = loader.GetAdditionalData() + _.template($("#idle_emulation_reset_general_settings_code").html())({});
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "IdleEmulation"){var IddleTime = GetInputConstructorValue("IddleTime", loader);
var Distribution = GetInputConstructorValue("Distribution", loader);

if(IddleTime["original"].length == 0)
{
  Invalid("Iddle time is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#idle_emulation_code").html())({iddle:IddleTime["updated"],distribution:Distribution["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "IdleEmulationSetDebug"){var enable = GetInputConstructorValue("enable",loader);
if(enable["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Enable debug") + tr("\" is not specified"));
	return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#idle_emulation_set_debug_code").html())({
        "enable": enable["updated"]
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "imageprocessingload"){var Data = GetInputConstructorValue("Data", loader);
var Save = this.$el.find("#Save").val().toUpperCase();


if(Data["original"].length == 0)
{
  Invalid("File path is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#imageprocessingload_code").html())({data: Data["updated"],variable: "VAR_" + Save})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "imageprocessingdelete"){var Id = GetInputConstructorValue("Id", loader);


if(Id["original"].length == 0)
{
  Invalid("Id is empty");
  return;
}



 try{
  var code = loader.GetAdditionalData() + _.template($("#imageprocessingdelete_code").html())({id: Id["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "imageprocessingcreate"){var Width = GetInputConstructorValue("Width", loader);
var Height = GetInputConstructorValue("Height", loader);
var ColorR = GetInputConstructorValue("ColorR", loader);
var ColorG = GetInputConstructorValue("ColorG", loader);
var ColorB = GetInputConstructorValue("ColorB", loader);
var ColorA= GetInputConstructorValue("ColorA", loader);
var Save = this.$el.find("#Save").val().toUpperCase();


if(Width["original"].length == 0)
{
  Invalid("Width is empty");
  return;
}
if(Height["original"].length == 0)
{
  Invalid("Height is empty");
  return;
}
if(ColorR["original"].length == 0)
{
  Invalid("ColorR is empty");
  return;
}
if(ColorG["original"].length == 0)
{
  Invalid("ColorG is empty");
  return;
}
if(ColorB["original"].length == 0)
{
  Invalid("ColorB is empty");
  return;
}
if(ColorA["original"].length == 0)
{
  Invalid("ColorA is empty");
  return;
}

if(Save.length == 0)
{
  Invalid("Save is empty");
  return;
}



 try{
  var code = loader.GetAdditionalData() + _.template($("#imageprocessingcreate_code").html())({width: Width["updated"],height: Height["updated"],r: ColorR["updated"],g: ColorG["updated"],b: ColorB["updated"],a: ColorA["updated"],variable: "VAR_" + Save})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "imageprocessingconvert"){var Id = GetInputConstructorValue("Id", loader);
var Format = GetInputConstructorValue("Format", loader);


if(Id["original"].length == 0)
{
  Invalid("Id is empty");
  return;
}

if(Format["original"].length == 0)
{
  Invalid("Format is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($("#imageprocessingconvert_code").html())({id: Id["updated"],format: Format["updated"],})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "imageprocessinggetdata"){var Id = GetInputConstructorValue("Id", loader);
var Save = this.$el.find("#Save").val().toUpperCase();


if(Id["original"].length == 0)
{
  Invalid("Id is empty");
  return;
}

if(Save.length == 0)
{
  Invalid("Save is empty");
  return;
}



 try{
  var code = loader.GetAdditionalData() + _.template($("#imageprocessinggetdata_code").html())({id: Id["updated"],variable: "VAR_" + Save})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "imageprocessinggetpixel"){var Id = GetInputConstructorValue("Id", loader);
var X = GetInputConstructorValue("X", loader);
var Y = GetInputConstructorValue("Y", loader);
var R = this.$el.find("#R").val().toUpperCase();
var G = this.$el.find("#G").val().toUpperCase();
var B = this.$el.find("#B").val().toUpperCase();
var A = this.$el.find("#A").val().toUpperCase();


if(Id["original"].length == 0)
{
  Invalid("Id is empty");
  return;
}

if(X["original"].length == 0)
{
  Invalid("X is empty");
  return;
}

if(Y["original"].length == 0)
{
  Invalid("Y is empty");
  return;
}

if(R.length == 0)
{
  Invalid("R is empty");
  return;
}

if(G.length == 0)
{
  Invalid("G is empty");
  return;
}
if(B.length == 0)
{
  Invalid("B is empty");
  return;
}
if(A.length == 0)
{
  Invalid("A is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#imageprocessinggetpixel_code").html())({id: Id["updated"],x: X["updated"],y: Y["updated"],variable_r: "VAR_" + R,variable_g: "VAR_" + G,variable_b: "VAR_" + B,variable_a: "VAR_" + A})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "imageprocessingsetpixel"){var Id = GetInputConstructorValue("Id", loader);
var X = GetInputConstructorValue("X", loader);
var Y = GetInputConstructorValue("Y", loader);
var ColorR = GetInputConstructorValue("ColorR", loader);
var ColorG = GetInputConstructorValue("ColorG", loader);
var ColorB = GetInputConstructorValue("ColorB", loader);
var ColorA= GetInputConstructorValue("ColorA", loader);


if(Id["original"].length == 0)
{
  Invalid("Id is empty");
  return;
}
if(X["original"].length == 0)
{
  Invalid("X is empty");
  return;
}
if(Y["original"].length == 0)
{
  Invalid("Y is empty");
  return;
}
if(ColorR["original"].length == 0)
{
  Invalid("ColorR is empty");
  return;
}
if(ColorG["original"].length == 0)
{
  Invalid("ColorG is empty");
  return;
}
if(ColorB["original"].length == 0)
{
  Invalid("ColorB is empty");
  return;
}
if(ColorA["original"].length == 0)
{
  Invalid("ColorA is empty");
  return;
}



 try{
  var code = loader.GetAdditionalData() + _.template($("#imageprocessingsetpixel_code").html())({x: X["updated"],y: Y["updated"],r: ColorR["updated"],g: ColorG["updated"],b: ColorB["updated"],a: ColorA["updated"],id: Id["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "imageprocessinggetsize"){var Id = GetInputConstructorValue("Id", loader);
var Width = this.$el.find("#Width").val().toUpperCase();
var Height = this.$el.find("#Height").val().toUpperCase();


if(Id["original"].length == 0)
{
  Invalid("Id is empty");
  return;
}

if(Width.length == 0)
{
  Invalid("Width is empty");
  return;
}

if(Height.length == 0)
{
  Invalid("Height is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#imageprocessinggetsize_code").html())({id: Id["updated"],variable_width: "VAR_" + Width,variable_height: "VAR_" + Height})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "imageprocessingresize"){var Id = GetInputConstructorValue("Id", loader);
var Width = GetInputConstructorValue("Width", loader);
var Height = GetInputConstructorValue("Height", loader);


if(Id["original"].length == 0)
{
  Invalid("Id is empty");
  return;
}

if(Width["original"].length == 0)
{
  Invalid("Width is empty");
  return;
}

if(Height["original"].length == 0)
{
  Invalid("Height is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#imageprocessingresize_code").html())({id: Id["updated"],width: Width["updated"],height: Height["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "imageprocessinginsert"){var Id1 = GetInputConstructorValue("Id1", loader);
var Id2 = GetInputConstructorValue("Id2", loader);
var X = GetInputConstructorValue("X", loader);
var Y = GetInputConstructorValue("Y", loader);


if(Id1["original"].length == 0)
{
  Invalid("Id1 is empty");
  return;
}

if(Id2["original"].length == 0)
{
  Invalid("Id2 is empty");
  return;
}

if(X["original"].length == 0)
{
  Invalid("X is empty");
  return;
}

if(Y["original"].length == 0)
{
  Invalid("Y is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#imageprocessinginsert_code").html())({id1: Id1["updated"],id2: Id2["updated"],x: X["updated"],y: Y["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "imageprocessingfind"){var Id1 = GetInputConstructorValue("Id1", loader);
var Id2 = GetInputConstructorValue("Id2", loader);
var X = this.$el.find("#X").val().toUpperCase();
var Y = this.$el.find("#Y").val().toUpperCase();
var Threshold = this.$el.find("#Threshold").val().toUpperCase();


if(Id1["original"].length == 0)
{
  Invalid("Id1 is empty");
  return;
}

if(Id2["original"].length == 0)
{
  Invalid("Id2 is empty");
  return;
}

if(X.length == 0)
{
  Invalid("X is empty");
  return;
}

if(Y.length == 0)
{
  Invalid("Y is empty");
  return;
}

if(Threshold.length == 0)
{
  Invalid("Threshold is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#imageprocessingfind_code").html())({id1: Id1["updated"],id2: Id2["updated"],x: "VAR_" + X,y: "VAR_" + Y,threshold: "VAR_" + Threshold})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "imageprocessingfill"){var Id = GetInputConstructorValue("Id", loader);
var X = GetInputConstructorValue("X", loader);
var Y = GetInputConstructorValue("Y", loader);
var Width = GetInputConstructorValue("Width", loader);
var Height = GetInputConstructorValue("Height", loader);
var ColorR = GetInputConstructorValue("ColorR", loader);
var ColorG = GetInputConstructorValue("ColorG", loader);
var ColorB = GetInputConstructorValue("ColorB", loader);
var ColorA= GetInputConstructorValue("ColorA", loader);


if(Id["original"].length == 0)
{
  Invalid("Id is empty");
  return;
}
if(X["original"].length == 0)
{
  Invalid("X is empty");
  return;
}
if(Y["original"].length == 0)
{
  Invalid("Y is empty");
  return;
}
if(Width["original"].length == 0)
{
  Invalid("Width is empty");
  return;
}
if(Height["original"].length == 0)
{
  Invalid("Height is empty");
  return;
}
if(ColorR["original"].length == 0)
{
  Invalid("ColorR is empty");
  return;
}
if(ColorG["original"].length == 0)
{
  Invalid("ColorG is empty");
  return;
}
if(ColorB["original"].length == 0)
{
  Invalid("ColorB is empty");
  return;
}
if(ColorA["original"].length == 0)
{
  Invalid("ColorA is empty");
  return;
}



 try{
  var code = loader.GetAdditionalData() + _.template($("#imageprocessingfill_code").html())({x: X["updated"],y: Y["updated"],width: Width["updated"],height: Height["updated"],r: ColorR["updated"],g: ColorG["updated"],b: ColorB["updated"],a: ColorA["updated"],id: Id["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "imageprocessingsub"){var Id = GetInputConstructorValue("Id", loader);
var X = GetInputConstructorValue("X", loader);
var Y = GetInputConstructorValue("Y", loader);
var Width = GetInputConstructorValue("Width", loader);
var Height = GetInputConstructorValue("Height", loader);
var Save = this.$el.find("#Save").val().toUpperCase();


if(Width["original"].length == 0)
{
  Invalid("Width is empty");
  return;
}
if(Height["original"].length == 0)
{
  Invalid("Height is empty");
  return;
}
if(X["original"].length == 0)
{
  Invalid("X is empty");
  return;
}
if(Y["original"].length == 0)
{
  Invalid("Y is empty");
  return;
}

if(Save.length == 0)
{
  Invalid("Save is empty");
  return;
}



 try{
  var code = loader.GetAdditionalData() + _.template($("#imageprocessingsub_code").html())({id: Id["updated"],x: X["updated"],y: Y["updated"],width: Width["updated"],height: Height["updated"],variable: "VAR_" + Save})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "imageprocessingtext"){var Id = GetInputConstructorValue("Id", loader);
var X = GetInputConstructorValue("X", loader);
var Y = GetInputConstructorValue("Y", loader);
var Width = GetInputConstructorValue("Width", loader);
var Height = GetInputConstructorValue("Height", loader);
var FontFamily = GetInputConstructorValue("FontFamily", loader);
var FontSize = GetInputConstructorValue("FontSize", loader);
var TextString = GetInputConstructorValue("Text", loader);
var ColorR = GetInputConstructorValue("ColorR", loader);
var ColorG = GetInputConstructorValue("ColorG", loader);
var ColorB = GetInputConstructorValue("ColorB", loader);
var ColorA= GetInputConstructorValue("ColorA", loader);
var VerticalAlign= GetInputConstructorValue("VerticalAlign", loader);
var HorizontalAlign= GetInputConstructorValue("HorizontalAlign", loader);


if(FontFamily["original"].length == 0)
{
  Invalid("FontFamily is empty");
  return;
}
if(FontSize["original"].length == 0)
{
  Invalid("FontSize is empty");
  return;
}
if(TextString["original"].length == 0)
{
  Invalid("Text is empty");
  return;
}
if(Id["original"].length == 0)
{
  Invalid("Id is empty");
  return;
}
if(X["original"].length == 0)
{
  Invalid("X is empty");
  return;
}
if(Y["original"].length == 0)
{
  Invalid("Y is empty");
  return;
}
if(Width["original"].length == 0)
{
  Invalid("Width is empty");
  return;
}
if(Height["original"].length == 0)
{
  Invalid("Height is empty");
  return;
}
if(ColorR["original"].length == 0)
{
  Invalid("ColorR is empty");
  return;
}
if(ColorG["original"].length == 0)
{
  Invalid("ColorG is empty");
  return;
}
if(ColorB["original"].length == 0)
{
  Invalid("ColorB is empty");
  return;
}
if(ColorA["original"].length == 0)
{
  Invalid("ColorA is empty");
  return;
}

if(VerticalAlign["original"].length == 0)
{
  Invalid("VerticalAlign is empty");
  return;
}

if(HorizontalAlign["original"].length == 0)
{
  Invalid("HorizontalAlign is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($("#imageprocessingtext_code").html())(
    {
      x: X["updated"],
      y: Y["updated"],
      width: Width["updated"],
      height: Height["updated"],
      fontfamily: FontFamily["updated"],
      fontsize: FontSize["updated"],
      text: TextString["updated"],
      r: ColorR["updated"],
      g: ColorG["updated"],
      b: ColorB["updated"],
      a: ColorA["updated"],
      vertical_align: VerticalAlign["updated"],
      horizontal_align: HorizontalAlign["updated"],
      id: Id["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{

}}else if(State == "InMail_Configure"){var protocol = GetInputConstructorValue("protocol", loader);
if(protocol["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Protocol") + tr("\" is not specified"));
    return;
};
var autoConfig = GetInputConstructorValue("autoConfig", loader);
if(autoConfig["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Auto configuration") + tr("\" is not specified"));
    return;
};
var host = GetInputConstructorValue("host", loader);
var port = GetInputConstructorValue("port", loader);
var encrypt = GetInputConstructorValue("encrypt", loader);
if($('#autoConfig').val() != "true"){
	if(host["original"].length == 0){
		Invalid(tr("The parameter \"") + tr("Server address") + tr("\" is not specified"));
		return;
	};
	if(port["original"].length == 0){
		Invalid(tr("The parameter \"") + tr("Port") + tr("\" is not specified"));
		return;
	};
	if(encrypt["original"].length == 0){
		Invalid(tr("The parameter \"") + tr("Encryption") + tr("\" is not specified"));
		return;
	};
};
var username = GetInputConstructorValue("username", loader);
if($('#autoConfig').val() == "true" && username["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Username") + tr("\" is not specified"));
	return;
};
var authMethod = GetInputConstructorValue("authMethod", loader);
if(authMethod["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Authorization method") + tr("\" is not specified"));
	return;
};
var password = GetInputConstructorValue("password", loader);
var oauth2Token = GetInputConstructorValue("oauth2Token", loader);
if($('#authMethod').val() == "OAuth2" && oauth2Token["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("OAuth 2.0 token") + tr("\" is not specified"));
	return;
};
var box = GetInputConstructorValue("box", loader);
if(box["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Folder name") + tr("\" is not specified"));
    return;
};
var connectTimeout = GetInputConstructorValue("connectTimeout", loader);
if(connectTimeout["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Connection timeout") + tr("\" is not specified"));
    return;
};
var resetTimeout = GetInputConstructorValue("resetTimeout", loader);
if(resetTimeout["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Reset timeout") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_Configure_code").html())({
        "protocol": protocol["updated"],
        "autoConfig": autoConfig["updated"],
        "host": host["updated"],
        "port": port["updated"],
        "encrypt": encrypt["updated"],
        "username": username["updated"],
        "authMethod": authMethod["updated"],
        "password": password["updated"],
        "oauth2Token": oauth2Token["updated"],
        "box": box["updated"],
        "connectTimeout": connectTimeout["updated"],
        "resetTimeout": resetTimeout["updated"]
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "InMail_Proxy"){var proxyString = GetInputConstructorValue("proxyString", loader);
var proxyType = GetInputConstructorValue("proxyType", loader);
var proxyUsername = GetInputConstructorValue("proxyUsername", loader);
var proxyPassword = GetInputConstructorValue("proxyPassword", loader);
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_Proxy_code").html())({
        "proxyString": proxyString["updated"],
        "proxyType": proxyType["updated"],
        "proxyUsername": proxyUsername["updated"],
        "proxyPassword": proxyPassword["updated"]
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "InMail_GetLastMessage"){var getUid = $("#getUid").is(':checked');
var saveUid = this.$el.find("#saveUid").val().toUpperCase();
if(getUid && saveUid.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Message id") + tr("\" is not specified"));
    return;
};
var getFrom = $("#getFrom").is(':checked');
var saveFrom = this.$el.find("#saveFrom").val().toUpperCase();
if(getFrom && saveFrom.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Recipient of letter") + tr("\" is not specified"));
    return;
};
var getTo = $("#getTo").is(':checked');
var saveTo = this.$el.find("#saveTo").val().toUpperCase();
if(getTo && saveTo.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Recipient of letter") + tr("\" is not specified"));
    return;
};
var getSubject = $("#getSubject").is(':checked');
var saveSubject = this.$el.find("#saveSubject").val().toUpperCase();
if(getSubject && saveSubject.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Letter subject") + tr("\" is not specified"));
    return;
};
var getTextHtml = $("#getTextHtml").is(':checked');
var saveTextHtml = this.$el.find("#saveTextHtml").val().toUpperCase();
if(getTextHtml && saveTextHtml.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Body of letter") + " (text/html)" + tr("\" is not specified"));
    return;
};
var getLinksTextHtml = $("#getLinksTextHtml").is(':checked');
var saveLinksTextHtml = this.$el.find("#saveLinksTextHtml").val().toUpperCase();
if(getTextHtml && getLinksTextHtml && saveLinksTextHtml.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Links from body of letter") + " (text/html)" + tr("\" is not specified"));
	return;
};
var getTextPlain = $("#getTextPlain").is(':checked');
var saveTextPlain = this.$el.find("#saveTextPlain").val().toUpperCase();
if(getTextPlain && saveTextPlain.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Body of letter") + " (text/plain)" + tr("\" is not specified"));
    return;
};
var getLinksTextPlain = $("#getLinksTextPlain").is(':checked');
var saveLinksTextPlain = this.$el.find("#saveLinksTextPlain").val().toUpperCase();
if(getTextPlain && getLinksTextPlain && saveLinksTextPlain.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Links from body of letter") + " (text/plain)" + tr("\" is not specified"));
	return;
};
var getTextRaw = $("#getTextRaw").is(':checked');
var saveTextRaw = this.$el.find("#saveTextRaw").val().toUpperCase();
if(getTextRaw && saveTextRaw.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Body of letter") + " (raw)" + tr("\" is not specified"));
    return;
};
var getLinksTextRaw = $("#getLinksTextRaw").is(':checked');
var saveLinksTextRaw = this.$el.find("#saveLinksTextRaw").val().toUpperCase();
if(getTextRaw && getLinksTextRaw && saveLinksTextRaw.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Links from body of letter") + " (raw)" + tr("\" is not specified"));
	return;
};
var getSize = $("#getSize").is(':checked');
var saveSize = this.$el.find("#saveSize").val().toUpperCase();
if(getSize && saveSize.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Letter size") + tr("\" is not specified"));
    return;
};
var getFlags = $("#getFlags").is(':checked');
var saveFlags = this.$el.find("#saveFlags").val().toUpperCase();
if(getFlags && saveFlags.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Flags of letter") + tr("\" is not specified"));
    return;
};
var getDate = $("#getDate").is(':checked');
var saveDate = this.$el.find("#saveDate").val().toUpperCase();
if(getDate && saveDate.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Receiving date") + tr("\" is not specified"));
    return;
};
var getAttachNames = $("#getAttachNames").is(':checked');
var saveAttachnames = this.$el.find("#saveAttachnames").val().toUpperCase();
if(getAttachNames && saveAttachnames.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Attachments names") + tr("\" is not specified"));
    return;
};
var getAttachments = $("#getAttachments").is(':checked');
var attachmentsMask = GetInputConstructorValue("attachmentsMask", loader);
if(getAttachments && attachmentsMask["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("File name mask") + tr("\" is not specified"));
    return;
};
var saveAttachments = this.$el.find("#saveAttachments").val().toUpperCase();
if(getAttachments && saveAttachments.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Attachments") + tr("\" is not specified"));
    return;
};
var getRawHeader = $("#getRawHeader").is(':checked');
var saveRawHeader = this.$el.find("#saveRawHeader").val().toUpperCase();
if(getRawHeader && saveRawHeader.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Technical headers of letter") + tr("\" is not specified"));
    return;
};
var delAfter = $("#delAfter").is(':checked');
var setFlagsAfter = $("#setFlagsAfter").is(':checked');
var setFlags = GetInputConstructorValue("setFlags", loader);
if(setFlagsAfter && setFlags["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Flags") + tr("\" is not specified"));
    return;
};
var box = GetInputConstructorValue("box", loader);
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_GetLastMessage_code").html())({
		"getUid": getUid,
        "saveUid": "VAR_" + saveUid,
		"getFrom": getFrom,
        "saveFrom": "VAR_" + saveFrom,
		"getTo": getTo,
        "saveTo": "VAR_" + saveTo,
		"getSubject": getSubject,
        "saveSubject": "VAR_" + saveSubject,
		"getTextHtml": getTextHtml,
        "saveTextHtml": "VAR_" + saveTextHtml,
		"getLinksTextHtml": getLinksTextHtml,
        "saveLinksTextHtml": "VAR_" + saveLinksTextHtml,
		"getTextPlain": getTextPlain,
        "saveTextPlain": "VAR_" + saveTextPlain,
		"getLinksTextPlain": getLinksTextPlain,
        "saveLinksTextPlain": "VAR_" + saveLinksTextPlain,
		"getLinksTextRaw": getLinksTextRaw,
        "saveLinksTextRaw": "VAR_" + saveLinksTextRaw,
		"getTextRaw": getTextRaw,
        "saveTextRaw": "VAR_" + saveTextRaw,
		"getSize": getSize,
        "saveSize": "VAR_" + saveSize,
		"getFlags": getFlags,
        "saveFlags": "VAR_" + saveFlags,
        "getDate": getDate,
        "saveDate": "VAR_" + saveDate,
        "getAttachNames": getAttachNames,
        "saveAttachnames": "VAR_" + saveAttachnames,
        "getAttachments": getAttachments,
        "attachmentsMask": attachmentsMask["updated"],
        "saveAttachments": "VAR_" + saveAttachments,
        "getRawHeader": getRawHeader,
        "saveRawHeader": "VAR_" + saveRawHeader,
        "delAfter": delAfter,
		"setFlagsAfter": setFlagsAfter,
		"setFlags": setFlags["updated"],
        "box": box["updated"]
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}
}else if(State == "InMail_SearchLast"){var box = GetInputConstructorValue("box", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_SearchLast_code").html())({
        "box": box["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "InMail_FindMessage"){var from = GetInputConstructorValue("from", loader);
var notFrom = GetInputConstructorValue("notFrom", loader);
var to = GetInputConstructorValue("to", loader);
var notTo = GetInputConstructorValue("notTo", loader);
var subject = GetInputConstructorValue("subject", loader);
var notSubject = GetInputConstructorValue("notSubject", loader);
var text = GetInputConstructorValue("text", loader);
var notText = GetInputConstructorValue("notText", loader);
var flags = GetInputConstructorValue("flags", loader);
var notFlags = GetInputConstructorValue("notFlags", loader);
var since = GetInputConstructorValue("since", loader);
var before = GetInputConstructorValue("before", loader);
var sortType = GetInputConstructorValue("sortType", loader);
if(sortType["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Sorting type") + tr("\" is not specified"));
    return;
};
var sortField = GetInputConstructorValue("sortField", loader);
var getUid = $("#getUid").is(':checked');
var saveUid = this.$el.find("#saveUid").val().toUpperCase();
if(getUid && saveUid.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Message id") + tr("\" is not specified"));
    return;
};
var getFrom = $("#getFrom").is(':checked');
var saveFrom = this.$el.find("#saveFrom").val().toUpperCase();
if(getFrom && saveFrom.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Recipient of letter") + tr("\" is not specified"));
    return;
};
var getTo = $("#getTo").is(':checked');
var saveTo = this.$el.find("#saveTo").val().toUpperCase();
if(getTo && saveTo.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Recipient of letter") + tr("\" is not specified"));
    return;
};
var getSubject = $("#getSubject").is(':checked');
var saveSubject = this.$el.find("#saveSubject").val().toUpperCase();
if(getSubject && saveSubject.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Letter subject") + tr("\" is not specified"));
    return;
};
var getTextHtml = $("#getTextHtml").is(':checked');
var saveTextHtml = this.$el.find("#saveTextHtml").val().toUpperCase();
if(getTextHtml && saveTextHtml.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Body of letter") + " (text/html)" + tr("\" is not specified"));
    return;
};
var getLinksTextHtml = $("#getLinksTextHtml").is(':checked');
var saveLinksTextHtml = this.$el.find("#saveLinksTextHtml").val().toUpperCase();
if(getTextHtml && getLinksTextHtml && saveLinksTextHtml.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Links from body of letter") + " (text/html)" + tr("\" is not specified"));
	return;
};
var getTextPlain = $("#getTextPlain").is(':checked');
var saveTextPlain = this.$el.find("#saveTextPlain").val().toUpperCase();
if(getTextPlain && saveTextPlain.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Body of letter") + " (text/plain)" + tr("\" is not specified"));
    return;
};
var getLinksTextPlain = $("#getLinksTextPlain").is(':checked');
var saveLinksTextPlain = this.$el.find("#saveLinksTextPlain").val().toUpperCase();
if(getTextPlain && getLinksTextPlain && saveLinksTextPlain.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Links from body of letter") + " (text/plain)" + tr("\" is not specified"));
	return;
};
var getTextRaw = $("#getTextRaw").is(':checked');
var saveTextRaw = this.$el.find("#saveTextRaw").val().toUpperCase();
if(getTextRaw && saveTextRaw.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Body of letter") + " (raw)" + tr("\" is not specified"));
    return;
};
var getLinksTextRaw = $("#getLinksTextRaw").is(':checked');
var saveLinksTextRaw = this.$el.find("#saveLinksTextRaw").val().toUpperCase();
if(getTextRaw && getLinksTextRaw && saveLinksTextRaw.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Links from body of letter") + " (raw)" + tr("\" is not specified"));
	return;
};
var getSize = $("#getSize").is(':checked');
var saveSize = this.$el.find("#saveSize").val().toUpperCase();
if(getSize && saveSize.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Letter size") + tr("\" is not specified"));
    return;
};
var getFlags = $("#getFlags").is(':checked');
var saveFlags = this.$el.find("#saveFlags").val().toUpperCase();
if(getFlags && saveFlags.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Flags of letter") + tr("\" is not specified"));
    return;
};
var getDate = $("#getDate").is(':checked');
var saveDate = this.$el.find("#saveDate").val().toUpperCase();
if(getDate && saveDate.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Receiving date") + tr("\" is not specified"));
    return;
};
var getAttachNames = $("#getAttachNames").is(':checked');
var saveAttachnames = this.$el.find("#saveAttachnames").val().toUpperCase();
if(getAttachNames && saveAttachnames.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Attachments names") + tr("\" is not specified"));
    return;
};
var getAttachments = $("#getAttachments").is(':checked');
var attachmentsMask = GetInputConstructorValue("attachmentsMask", loader);
if(getAttachments && attachmentsMask["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("File name mask") + tr("\" is not specified"));
    return;
};
var saveAttachments = this.$el.find("#saveAttachments").val().toUpperCase();
if(getAttachments && saveAttachments.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Attachments") + tr("\" is not specified"));
    return;
};
var getRawHeader = $("#getRawHeader").is(':checked');
var saveRawHeader = this.$el.find("#saveRawHeader").val().toUpperCase();
if(getRawHeader && saveRawHeader.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Technical headers of letter") + tr("\" is not specified"));
    return;
};
var wait = $("#wait").is(':checked');
var minResults = GetInputConstructorValue("minResults", loader);
if(wait && minResults["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Number of letters") + tr("\" is not specified"));
    return;
};
var interval = GetInputConstructorValue("interval", loader);
if(wait && interval["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Interval") + tr("\" is not specified"));
    return;
};
var timeout = GetInputConstructorValue("timeout", loader);
if(wait && timeout["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Timeout") + tr("\" is not specified"));
    return;
};
var delAfter = $("#delAfter").is(':checked');
var setFlagsAfter = $("#setFlagsAfter").is(':checked');
var setFlags = GetInputConstructorValue("setFlags", loader);
if(setFlagsAfter && setFlags["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Flags") + tr("\" is not specified"));
    return;
};
var box = GetInputConstructorValue("box", loader);
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_FindMessage_code").html())({
		"from": from["updated"],
		"notFrom": notFrom["updated"],
		"to": to["updated"],
		"notTo": notTo["updated"],
		"subject": subject["updated"],
		"notSubject": notSubject["updated"],
		"text": text["updated"],
		"notText": notText["updated"],
		"flags": flags["updated"],
		"notFlags": notFlags["updated"],
		"since": since["updated"],
		"before": before["updated"],
		"sortType": sortType["updated"],
		"sortField": sortField["updated"],
		"getUid": getUid,
		"saveUid": "VAR_" + saveUid,
		"getFrom": getFrom,
        "saveFrom": "VAR_" + saveFrom,
		"getTo": getTo,
        "saveTo": "VAR_" + saveTo,
		"getSubject": getSubject,
        "saveSubject": "VAR_" + saveSubject,
		"getTextHtml": getTextHtml,
        "saveTextHtml": "VAR_" + saveTextHtml,
		"getLinksTextHtml": getLinksTextHtml,
        "saveLinksTextHtml": "VAR_" + saveLinksTextHtml,
		"getTextPlain": getTextPlain,
        "saveTextPlain": "VAR_" + saveTextPlain,
		"getLinksTextPlain": getLinksTextPlain,
        "saveLinksTextPlain": "VAR_" + saveLinksTextPlain,
		"getLinksTextRaw": getLinksTextRaw,
        "saveLinksTextRaw": "VAR_" + saveLinksTextRaw,
		"getTextRaw": getTextRaw,
        "saveTextRaw": "VAR_" + saveTextRaw,
		"getSize": getSize,
        "saveSize": "VAR_" + saveSize,
		"getFlags": getFlags,
        "saveFlags": "VAR_" + saveFlags,
        "getDate": getDate,
        "saveDate": "VAR_" + saveDate,
        "getAttachNames": getAttachNames,
        "saveAttachnames": "VAR_" + saveAttachnames,
        "getAttachments": getAttachments,
        "attachmentsMask": attachmentsMask["updated"],
        "saveAttachments": "VAR_" + saveAttachments,
        "getRawHeader": getRawHeader,
        "saveRawHeader": "VAR_" + saveRawHeader,
		"wait": wait,
		"minResults": minResults["updated"],
        "interval": interval["updated"],
        "timeout": timeout["updated"],
        "delAfter": delAfter,
		"setFlagsAfter": setFlagsAfter,
		"setFlags": setFlags["updated"],
        "box": box["updated"]
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "InMail_SearchOne"){var from = GetInputConstructorValue("from", loader);
var notFrom = GetInputConstructorValue("notFrom", loader);
var to = GetInputConstructorValue("to", loader);
var notTo = GetInputConstructorValue("notTo", loader);
var subject = GetInputConstructorValue("subject", loader);
var notSubject = GetInputConstructorValue("notSubject", loader);
var text = GetInputConstructorValue("text", loader);
var notText = GetInputConstructorValue("notText", loader);
var flags = GetInputConstructorValue("flags", loader);
var notFlags = GetInputConstructorValue("notFlags", loader);
var since = GetInputConstructorValue("since", loader);
var before = GetInputConstructorValue("before", loader);
var sortType = GetInputConstructorValue("sortType", loader);
if(sortType["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Sorting type") + tr("\" is not specified"));
    return;
};
var sortField = GetInputConstructorValue("sortField", loader);
var wait = $("#wait").is(':checked');
var minResults = GetInputConstructorValue("minResults", loader);
if(wait && minResults["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Number of letters") + tr("\" is not specified"));
    return;
};
var interval = GetInputConstructorValue("interval", loader);
if(wait && interval["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Interval") + tr("\" is not specified"));
    return;
};
var timeout = GetInputConstructorValue("timeout", loader);
if(wait && timeout["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Timeout") + tr("\" is not specified"));
    return;
};
var box = GetInputConstructorValue("box", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_SearchOne_code").html())({
		"from": from["updated"],
		"notFrom": notFrom["updated"],
		"to": to["updated"],
		"notTo": notTo["updated"],
		"subject": subject["updated"],
		"notSubject": notSubject["updated"],
		"text": text["updated"],
		"notText": notText["updated"],
		"flags": flags["updated"],
		"notFlags": notFlags["updated"],
		"since": since["updated"],
		"before": before["updated"],
		"sortType": sortType["updated"],
		"sortField": sortField["updated"],
		"wait": wait,
		"minResults": minResults["updated"],
        "interval": interval["updated"],
        "timeout": timeout["updated"],
        "box": box["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "InMail_Search"){var from = GetInputConstructorValue("from", loader);
var notFrom = GetInputConstructorValue("notFrom", loader);
var to = GetInputConstructorValue("to", loader);
var notTo = GetInputConstructorValue("notTo", loader);
var subject = GetInputConstructorValue("subject", loader);
var notSubject = GetInputConstructorValue("notSubject", loader);
var text = GetInputConstructorValue("text", loader);
var notText = GetInputConstructorValue("notText", loader);
var flags = GetInputConstructorValue("flags", loader);
var notFlags = GetInputConstructorValue("notFlags", loader);
var since = GetInputConstructorValue("since", loader);
var before = GetInputConstructorValue("before", loader);
var sortType = GetInputConstructorValue("sortType", loader);
if(sortType["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Sorting type") + tr("\" is not specified"));
    return;
};
var sortField = GetInputConstructorValue("sortField", loader);
var wait = $("#wait").is(':checked');
var minResults = GetInputConstructorValue("minResults", loader);
if(wait && minResults["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Number of letters") + tr("\" is not specified"));
    return;
};
var interval = GetInputConstructorValue("interval", loader);
if(wait && interval["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Interval") + tr("\" is not specified"));
    return;
};
var timeout = GetInputConstructorValue("timeout", loader);
if(wait && timeout["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Timeout") + tr("\" is not specified"));
    return;
};
var maxResults = GetInputConstructorValue("maxResults", loader);
var offset = GetInputConstructorValue("offset", loader);
var box = GetInputConstructorValue("box", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_Search_code").html())({
		"from": from["updated"],
		"notFrom": notFrom["updated"],
		"to": to["updated"],
		"notTo": notTo["updated"],
		"subject": subject["updated"],
		"notSubject": notSubject["updated"],
		"text": text["updated"],
		"notText": notText["updated"],
		"flags": flags["updated"],
		"notFlags": notFlags["updated"],
		"since": since["updated"],
		"before": before["updated"],
		"sortType": sortType["updated"],
		"sortField": sortField["updated"],
		"wait": wait,
		"minResults": minResults["updated"],
        "interval": interval["updated"],
        "timeout": timeout["updated"],
        "offset": offset["updated"],
        "maxResults": maxResults["updated"],
        "offset": offset["updated"],
        "box": box["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "InMail_GetMessage"){var uid = GetInputConstructorValue("uid", loader);
if(uid["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("Message id") + tr("\" is not specified"));
    return;
};
var getFrom = $("#getFrom").is(':checked');
var saveFrom = this.$el.find("#saveFrom").val().toUpperCase();
if(getFrom && saveFrom.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Recipient of letter") + tr("\" is not specified"));
    return;
};
var getTo = $("#getTo").is(':checked');
var saveTo = this.$el.find("#saveTo").val().toUpperCase();
if(getTo && saveTo.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Recipient of letter") + tr("\" is not specified"));
    return;
};
var getSubject = $("#getSubject").is(':checked');
var saveSubject = this.$el.find("#saveSubject").val().toUpperCase();
if(getSubject && saveSubject.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Letter subject") + tr("\" is not specified"));
    return;
};
var getTextHtml = $("#getTextHtml").is(':checked');
var saveTextHtml = this.$el.find("#saveTextHtml").val().toUpperCase();
if(getTextHtml && saveTextHtml.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Body of letter") + " (text/html)" + tr("\" is not specified"));
    return;
};
var getLinksTextHtml = $("#getLinksTextHtml").is(':checked');
var saveLinksTextHtml = this.$el.find("#saveLinksTextHtml").val().toUpperCase();
if(getTextHtml && getLinksTextHtml && saveLinksTextHtml.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Links from body of letter") + " (text/html)" + tr("\" is not specified"));
	return;
};
var getTextPlain = $("#getTextPlain").is(':checked');
var saveTextPlain = this.$el.find("#saveTextPlain").val().toUpperCase();
if(getTextPlain && saveTextPlain.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Body of letter") + " (text/plain)" + tr("\" is not specified"));
    return;
};
var getLinksTextPlain = $("#getLinksTextPlain").is(':checked');
var saveLinksTextPlain = this.$el.find("#saveLinksTextPlain").val().toUpperCase();
if(getTextPlain && getLinksTextPlain && saveLinksTextPlain.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Links from body of letter") + " (text/plain)" + tr("\" is not specified"));
	return;
};
var getTextRaw = $("#getTextRaw").is(':checked');
var saveTextRaw = this.$el.find("#saveTextRaw").val().toUpperCase();
if(getTextRaw && saveTextRaw.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Body of letter") + " (raw)" + tr("\" is not specified"));
    return;
};
var getLinksTextRaw = $("#getLinksTextRaw").is(':checked');
var saveLinksTextRaw = this.$el.find("#saveLinksTextRaw").val().toUpperCase();
if(getTextRaw && getLinksTextRaw && saveLinksTextRaw.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Links from body of letter") + " (raw)" + tr("\" is not specified"));
	return;
};
var getSize = $("#getSize").is(':checked');
var saveSize = this.$el.find("#saveSize").val().toUpperCase();
if(getSize && saveSize.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Letter size") + tr("\" is not specified"));
    return;
};
var getFlags = $("#getFlags").is(':checked');
var saveFlags = this.$el.find("#saveFlags").val().toUpperCase();
if(getFlags && saveFlags.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Flags of letter") + tr("\" is not specified"));
    return;
};
var getDate = $("#getDate").is(':checked');
var saveDate = this.$el.find("#saveDate").val().toUpperCase();
if(getDate && saveDate.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Receiving date") + tr("\" is not specified"));
    return;
};
var getAttachNames = $("#getAttachNames").is(':checked');
var saveAttachnames = this.$el.find("#saveAttachnames").val().toUpperCase();
if(getAttachNames && saveAttachnames.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Attachments names") + tr("\" is not specified"));
    return;
};
var getAttachments = $("#getAttachments").is(':checked');
var attachmentsMask = GetInputConstructorValue("attachmentsMask", loader);
if(getAttachments && attachmentsMask["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("File name mask") + tr("\" is not specified"));
    return;
};
var saveAttachments = this.$el.find("#saveAttachments").val().toUpperCase();
if(getAttachments && saveAttachments.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Attachments") + tr("\" is not specified"));
    return;
};
var getRawHeader = $("#getRawHeader").is(':checked');
var saveRawHeader = this.$el.find("#saveRawHeader").val().toUpperCase();
if(getRawHeader && saveRawHeader.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Technical headers of letter") + tr("\" is not specified"));
    return;
};
var delAfter = $("#delAfter").is(':checked');
var setFlagsAfter = $("#setFlagsAfter").is(':checked');
var setFlags = GetInputConstructorValue("setFlags", loader);
if(setFlagsAfter && setFlags["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Flags") + tr("\" is not specified"));
    return;
};
var box = GetInputConstructorValue("box", loader);
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_GetMessage_code").html())({
        "uid": uid["updated"],
		"getFrom": getFrom,
        "saveFrom": "VAR_" + saveFrom,
		"getTo": getTo,
        "saveTo": "VAR_" + saveTo,
		"getSubject": getSubject,
        "saveSubject": "VAR_" + saveSubject,
		"getTextHtml": getTextHtml,
        "saveTextHtml": "VAR_" + saveTextHtml,
		"getLinksTextHtml": getLinksTextHtml,
        "saveLinksTextHtml": "VAR_" + saveLinksTextHtml,
		"getTextPlain": getTextPlain,
        "saveTextPlain": "VAR_" + saveTextPlain,
		"getLinksTextPlain": getLinksTextPlain,
        "saveLinksTextPlain": "VAR_" + saveLinksTextPlain,
		"getLinksTextRaw": getLinksTextRaw,
        "saveLinksTextRaw": "VAR_" + saveLinksTextRaw,
		"getTextRaw": getTextRaw,
        "saveTextRaw": "VAR_" + saveTextRaw,
		"getSize": getSize,
        "saveSize": "VAR_" + saveSize,
		"getFlags": getFlags,
        "saveFlags": "VAR_" + saveFlags,
        "getDate": getDate,
        "saveDate": "VAR_" + saveDate,
        "getAttachNames": getAttachNames,
        "saveAttachnames": "VAR_" + saveAttachnames,
        "getAttachments": getAttachments,
        "attachmentsMask": attachmentsMask["updated"],
        "saveAttachments": "VAR_" + saveAttachments,
        "getRawHeader": getRawHeader,
        "saveRawHeader": "VAR_" + saveRawHeader,
        "delAfter": delAfter,
		"setFlagsAfter": setFlagsAfter,
		"setFlags": setFlags["updated"],
        "box": box["updated"]
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}
}else if(State == "InMail_Count"){var from = GetInputConstructorValue("from", loader);
var notFrom = GetInputConstructorValue("notFrom", loader);
var to = GetInputConstructorValue("to", loader);
var notTo = GetInputConstructorValue("notTo", loader);
var subject = GetInputConstructorValue("subject", loader);
var notSubject = GetInputConstructorValue("notSubject", loader);
var text = GetInputConstructorValue("text", loader);
var notText = GetInputConstructorValue("notText", loader);
var flags = GetInputConstructorValue("flags", loader);
var notFlags = GetInputConstructorValue("notFlags", loader);
var since = GetInputConstructorValue("since", loader);
var before = GetInputConstructorValue("before", loader);
var box = GetInputConstructorValue("box", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_Count_code").html())({
		"from": from["updated"],
		"notFrom": notFrom["updated"],
		"to": to["updated"],
		"notTo": notTo["updated"],
		"subject": subject["updated"],
		"notSubject": notSubject["updated"],
		"text": text["updated"],
		"notText": notText["updated"],
		"flags": flags["updated"],
		"notFlags": notFlags["updated"],
		"since": since["updated"],
		"before": before["updated"],
        "box": box["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "InMail_DelMessages"){var uids = GetInputConstructorValue("uids", loader);
if(uids["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("Message id") + tr("\" is not specified"));
    return;
};
var box = GetInputConstructorValue("box", loader);
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_DelMessages_code").html())({
        "uids": uids["updated"],
        "box": box["updated"]
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}
}else if(State == "InMail_CopyMessages"){var uids = GetInputConstructorValue("uids", loader);
if(uids["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("Message id") + tr("\" is not specified"));
    return;
};
var toBox = GetInputConstructorValue("toBox", loader);
if(toBox["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("To folder") + tr("\" is not specified"));
    return;
};
var box = GetInputConstructorValue("box", loader);
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_CopyMessages_code").html())({
        "uids": uids["updated"],
		"toBox": toBox["updated"],
        "box": box["updated"]
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}
}else if(State == "InMail_MoveMessages"){var uids = GetInputConstructorValue("uids", loader);
if(uids["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("Message id") + tr("\" is not specified"));
    return;
};
var toBox = GetInputConstructorValue("toBox", loader);
if(toBox["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("To folder") + tr("\" is not specified"));
    return;
};
var box = GetInputConstructorValue("box", loader);
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_MoveMessages_code").html())({
        "uids": uids["updated"],
		"toBox": toBox["updated"],
        "box": box["updated"]
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}
}else if(State == "InMail_GetFlags"){var uid = GetInputConstructorValue("uid", loader);
if(uid["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("Message id") + tr("\" is not specified"));
    return;
};
var box = GetInputConstructorValue("box", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_GetFlags_code").html())({
        "uid": uid["updated"],
        "box": box["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "InMail_SetFlags"){var uids = GetInputConstructorValue("uids", loader);
if(uids["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("Message id") + tr("\" is not specified"));
    return;
};
var flags = GetInputConstructorValue("flags", loader);
if(flags["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("Flags") + tr("\" is not specified"));
    return;
};
var add = $("#add").is(':checked');
var box = GetInputConstructorValue("box", loader);
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_SetFlags_code").html())({
        "uids": uids["updated"],
        "flags": flags["updated"],
		"add": add,
        "box": box["updated"]
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "InMail_DelFlags"){var uids = GetInputConstructorValue("uids", loader);
if(uids["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("Message id") + tr("\" is not specified"));
    return;
};
var flags = GetInputConstructorValue("flags", loader);
if(flags["original"].length == 0){
    Invalid(tr("The parameter \"") + tr("Flags") + tr("\" is not specified"));
    return;
};
var box = GetInputConstructorValue("box", loader);
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_DelFlags_code").html())({
        "uids": uids["updated"],
        "flags": flags["updated"],
        "box": box["updated"]
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "InMail_GetBoxes"){var format = GetInputConstructorValue("format", loader);
if(format["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Data format") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_GetBoxes_code").html())({
        "format": format["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "InMail_Status"){var name = GetInputConstructorValue("name", loader);
if(name["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Folder name") + tr("\" is not specified"));
    return;
};
var total = this.$el.find("#total").val().toUpperCase();
if(total.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Total messages") + tr("\" is not specified"));
    return;
};
var recent = this.$el.find("#recent").val().toUpperCase();
if(recent.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Recent messages") + tr("\" is not specified"));
    return;
};
var unseen = this.$el.find("#unseen").val().toUpperCase();
if(unseen.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Unseen messages") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_Status_code").html())({
        "name": name["updated"],
        "total": "VAR_" + total,
        "recent": "VAR_" + recent,
        "unseen": "VAR_" + unseen
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "InMail_AddBox"){var name = GetInputConstructorValue("name", loader);
if(name["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Folder name") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_AddBox_code").html())({
        "name": name["updated"]
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "InMail_RenameBox"){var oldName = GetInputConstructorValue("oldName", loader);
if(oldName["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Old folder name") + tr("\" is not specified"));
    return;
};
var newName = GetInputConstructorValue("newName", loader);
if(newName["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("New folder name") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_RenameBox_code").html())({
        "oldName": oldName["updated"],
        "newName": newName["updated"]
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "InMail_DelBox"){var name = GetInputConstructorValue("name", loader);
if(name["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Folder name") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_DelBox_code").html())({
        "name": name["updated"]
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "InMail_Close"){try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_Close_code").html())({});
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}
}else if(State == "InMail_SetDebug"){var enable = GetInputConstructorValue("enable",loader);
if(enable["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Enable debug") + tr("\" is not specified"));
	return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#InMail_SetDebug_code").html())({
        "enable": enable["updated"]
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "JsonCreateObject"){let Save = this.$el.find("#Save").val().toUpperCase();
let Key1 = GetInputConstructorValue("Key1", loader);
let Key2 = GetInputConstructorValue("Key2", loader);
let Key3 = GetInputConstructorValue("Key3", loader);
let Value1 = GetInputConstructorValue("Value1", loader);
let Value2 = GetInputConstructorValue("Value2", loader);
let Value3 = GetInputConstructorValue("Value3", loader);

if (Save.length === 0) {
    Invalid("Variable is empty");
    return;
}

try {
    let code = loader.GetAdditionalData() + _.template($("#json_create_object_code").html())(
        {
            variable: `VAR_${Save}`,
            value1: Value1["updated"],
            value2: Value2["updated"],
            value3: Value3["updated"],
            key1: Key1["original"].length ? Key1["updated"] : null,
            key2: Key2["original"].length ? Key2["updated"] : null,
            key3: Key3["original"].length ? Key3["updated"] : null,
        });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}
catch (e) {
    // pass error
}}else if(State == "JsonGetValue"){var Save = this.$el.find("#Save").val().toUpperCase();
var Data = GetInputConstructorValue("Data", loader);
var Path = GetInputConstructorValue("Path", loader);

if (Data["original"].length == 0) {
    Invalid("Data to parse is empty");
    return;
}

if (Path["original"].length == 0) {
    Invalid("Path to parse is empty");
    return;
}

if (Save.length == 0) {
    Invalid("Variable to save is empty");
    return;
}

try {
    var code = loader.GetAdditionalData() + _.template($("#json_parse_value_code").html())(
        {
            variable: "VAR_" + Save,
            data: Data["updated"],
            path: Path["updated"]
        });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}
catch (e) {
    // pass error
}}else if(State == "JsonGetAllValues"){var Save = this.$el.find("#Save").val().toUpperCase();
var Data = GetInputConstructorValue("Data", loader);
var Path = GetInputConstructorValue("Path", loader);

if (Data["original"].length == 0) {
    Invalid("Data to parse is empty");
    return;
}

if (Path["original"].length == 0) {
    Invalid("Path to parse is empty");
    return;
}

if (Save.length == 0) {
    Invalid("Variable to save is empty");
    return;
}

try {
    var code = loader.GetAdditionalData() + _.template($("#json_parse_values_code").html())(
        {
            variable: "VAR_" + Save,
            data: Data["updated"],
            path: Path["updated"]
        });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}
catch (e) {
    // pass error
}}else if(State == "JsonGetKey"){var Save = this.$el.find("#Save").val().toUpperCase();
var Data = GetInputConstructorValue("Data", loader);
var Path = GetInputConstructorValue("Path", loader);

if (Data["original"].length == 0) {
    Invalid("Data to parse is empty");
    return;
}

if (Path["original"].length == 0) {
    Invalid("Path to parse is empty");
    return;
}

if (Save.length == 0) {
    Invalid("Variable to save is empty");
    return;
}

try {
    var code = loader.GetAdditionalData() + _.template($("#json_parse_key_code").html())(
        {
            variable: "VAR_" + Save,
            data: Data["updated"],
            path: Path["updated"]
        });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}
catch (e) {
    // pass error
}}else if(State == "JsonGetAllKeys"){var Save = this.$el.find("#Save").val().toUpperCase();
var Data = GetInputConstructorValue("Data", loader);
var Path = GetInputConstructorValue("Path", loader);

if (Data["original"].length == 0) {
    Invalid("Data to parse is empty");
    return;
}

if (Path["original"].length == 0) {
    Invalid("Path to parse is empty");
    return;
}

if (Save.length == 0) {
    Invalid("Variable to save is empty");
    return;
}

try {
    var code = loader.GetAdditionalData() + _.template($("#json_parse_keys_code").html())(
        {
            variable: "VAR_" + Save,
            data: Data["updated"],
            path: Path["updated"]
        });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}
catch (e) {
    // pass error
}}else if(State == "JsonGetCount"){var Save = this.$el.find("#Save").val().toUpperCase();
var Data = GetInputConstructorValue("Data", loader);
var Path = GetInputConstructorValue("Path", loader);

if (Data["original"].length == 0) {
    Invalid("Data to count is empty");
    return;
}

if (Save.length == 0) {
    Invalid("Variable to save is empty");
    return;
}

try {
    var code = loader.GetAdditionalData() + _.template($("#json_get_count_code").html())(
        {
            variable: "VAR_" + Save,
            data: Data["updated"],
            path: Path["updated"]
        });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}
catch (e) {
    // pass error
}}else if(State == "JsonChangeValue"){var Save = this.$el.find("#Save").val().toUpperCase();
var Value = GetInputConstructorValue("Value", loader);
var Data = GetInputConstructorValue("Data", loader);
var Path = GetInputConstructorValue("Path", loader);

if (Data["original"].length == 0) {
    Invalid("Data to change value is empty");
    return;
}

if (Path["original"].length == 0) {
    Invalid("Path to change value is empty");
    return;
}

if (Save.length == 0) {
    Invalid("Variable to save is empty");
    return;
}

try {
    var code = loader.GetAdditionalData() + _.template($("#json_change_value_code").html())(
        {
            variable: "VAR_" + Save,
            value: Value["updated"],
            data: Data["updated"],
            path: Path["updated"]
        });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}
catch (e) {
    // pass error
}}else if(State == "JsonRemoveValue"){var Save = this.$el.find("#Save").val().toUpperCase();
var Data = GetInputConstructorValue("Data", loader);
var Path = GetInputConstructorValue("Path", loader);

if (Data["original"].length == 0) {
    Invalid("Data to remove value is empty");
    return;
}

if (Path["original"].length == 0) {
    Invalid("Path to remove value is empty");
    return;
}

if (Save.length == 0) {
    Invalid("Variable to save is empty");
    return;
}

try {
    var code = loader.GetAdditionalData() + _.template($("#json_remove_value_code").html())(
        {
            variable: "VAR_" + Save,
            data: Data["updated"],
            path: Path["updated"]
        });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}
catch (e) {
    // pass error
}}else if(State == "JsonCheckFormat"){var Save = this.$el.find("#Save").val().toUpperCase();
var Data = GetInputConstructorValue("Data", loader);

if (Data["original"].length == 0) {
    Invalid("Data is empty");
    return;
}

if (Save.length == 0) {
    Invalid("Variable is empty");
    return;
}

try {
    var code = loader.GetAdditionalData() + _.template($("#json_check_format_code").html())(
        {
            variable: "VAR_" + Save,
            data: Data["updated"],
        });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}
catch (e) {
    // pass error
}}else if(State == "JsonChangeFormat"){var Save = this.$el.find("#Save").val().toUpperCase();
var Data = GetInputConstructorValue("Data", loader);
var Type = GetInputConstructorValue("Type", loader);

if (Data["original"].length == 0) {
    Invalid("Data is empty");
    return;
}

if (Type["original"].length == 0) {
    Invalid("Format is empty");
    return;
}

if (Save.length == 0) {
    Invalid("Variable is empty");
    return;
}

try {
    var code = loader.GetAdditionalData() + _.template($("#json_change_format_code").html())(
        {
            variable: "VAR_" + Save,
            data: Data["updated"],
            type: Type["updated"],
        });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}
catch (e) {
    // pass error
}}else if(State == "JsonFromString"){let Save = this.$el.find("#Save").val().toUpperCase();
let Data = GetInputConstructorValue("Data", loader);

if (Data["original"].length === 0) {
    Invalid("Data is empty");
    return;
}

if (Save.length === 0) {
    Invalid("Variable is empty");
    return;
}

try {
    let code = loader.GetAdditionalData() + _.template($("#json_from_string_code").html())({
        variable: `VAR_${Save}`,
        data: Data["updated"],
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
} catch (e)
{
    // pass error
}}else if(State == "JsonToString"){let Save = this.$el.find("#Save").val().toUpperCase();
let Data = GetInputConstructorValue("Data", loader);

if (Data["original"].length === 0) {
    Invalid("Data is empty");
    return;
}

if (Save.length === 0) {
    Invalid("Variable is empty");
    return;
}

try {
    let code = loader.GetAdditionalData() + _.template($("#json_to_string_code").html())({
        variable: `VAR_${Save}`,
        data: Data["updated"],
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}
catch (e) {
    // pass error
}}else if(State == "CreateList"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var Value1 = GetInputConstructorValue("Value1", loader);
var Value2 = GetInputConstructorValue("Value2", loader);
var Value3 = GetInputConstructorValue("Value3", loader);


if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#create_list_code").html())({variable:"VAR_" + Variable,value1: Value1["updated"],value2: Value2["updated"],value3: Value3["updated"], value1empty: Value1["original"].length == 0, value2empty: Value2["original"].length == 0, value3empty: Value3["original"].length == 0})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "AddElement"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var Value = GetInputConstructorValue("Value", loader);

if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#add_element_to_list_code").html())({variable:"VAR_" + Variable,value: Value["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "GetElementByIndex"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var VariableResult = this.$el.find("#VariableResult").val().toUpperCase();
var Index = GetInputConstructorValue("Index", loader);
var RemoveAfterUse = $("#Check").is(':checked')


if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(VariableResult.length == 0)
{
  Invalid("VariableResult is empty");
  return;
}

if(Index["original"].length == 0)
{
  Invalid("Index is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#get_list_element_by_index_code").html())({variable:"VAR_" + Variable,variable_result:"VAR_" + VariableResult,index: Index["updated"],remove:RemoveAfterUse})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "FirstListElement"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var VariableResult = this.$el.find("#VariableResult").val().toUpperCase();
var RemoveAfterUse = $("#Check").is(':checked')


if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(VariableResult.length == 0)
{
  Invalid("VariableResult is empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#first_list_element_code").html())({variable:"VAR_" + Variable,variable_result:"VAR_" + VariableResult,remove:RemoveAfterUse})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "LastListElement"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var VariableResult = this.$el.find("#VariableResult").val().toUpperCase();
var RemoveAfterUse = $("#Check").is(':checked')


if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(VariableResult.length == 0)
{
  Invalid("VariableResult is empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#last_list_element_code").html())({variable:"VAR_" + Variable,variable_result:"VAR_" + VariableResult,remove:RemoveAfterUse})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "RandomListElement"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var VariableResult = this.$el.find("#VariableResult").val().toUpperCase();
var RemoveAfterUse = $("#Check").is(':checked')


if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(VariableResult.length == 0)
{
  Invalid("VariableResult is empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#random_list_element_code").html())({variable:"VAR_" + Variable,variable_result:"VAR_" + VariableResult,remove:RemoveAfterUse})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "InsertElement"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var Value = GetInputConstructorValue("Value", loader);
var Index = GetInputConstructorValue("Index", loader);

if(Index.length == 0)
{
  Invalid("Index is empty");
  return;
}

if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#insert_element_to_list_code").html())({variable:"VAR_" + Variable,value: Value["updated"], index: Index["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "ListSetElement"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var Index = GetInputConstructorValue("Index", loader);
var Value = GetInputConstructorValue("Value", loader);


if(Index["original"].length == 0)
{
  Invalid("Index is empty");
  return;
}

if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#list_set_element_code").html())({variable:"VAR_" + Variable,index:Index["updated"],value: Value["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{
  alert(e)
}}else if(State == "DeleteByIndex"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var Value = GetInputConstructorValue("Value", loader);

if(Value["original"].length == 0)
{
  Invalid("Index is empty");
  return;
}

if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#delete_by_index_code").html())({variable:"VAR_" + Variable,index: Value["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "DeleteByValue"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var Value = GetInputConstructorValue("Value", loader);


if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#delete_by_value_code").html())({variable:"VAR_" + Variable,value: Value["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "ListLength"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var VariableLength = this.$el.find("#VariableLength").val().toUpperCase();


if(VariableLength.length == 0)
{
  Invalid("VariableLength is empty");
  return;
}

if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() +  _.template($("#list_length_code").html())({variable:"VAR_" + Variable,variable_length:"VAR_" + VariableLength})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "ListContains"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var VariableSave = this.$el.find("#VariableSave").val().toUpperCase();
var Value = GetInputConstructorValue("Value", loader);



if(VariableSave.length == 0)
{
  Invalid("VariableSave is empty");
  return;
}

if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#list_contains_code").html())({variable:"VAR_" + Variable,variable_save:"VAR_" + VariableSave,value:Value["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "Sublist"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var IndexStart = GetInputConstructorValue("IndexStart", loader);
var IndexEnd = GetInputConstructorValue("IndexEnd", loader);
var VariableNewList = this.$el.find("#VariableNewList").val().toUpperCase();


if(IndexEnd["original"].length == 0)
{
  Invalid("IndexEnd is empty");
  return;
}

if(IndexStart["original"].length == 0)
{
  Invalid("IndexStart is empty");
  return;
}

if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(VariableNewList.length == 0)
{
  Invalid("VariableNewList is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#sublist_code").html())({variable:"VAR_" + Variable,variable_new:"VAR_" + VariableNewList,index_start: IndexStart["updated"],index_end: IndexEnd["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "RemoveListPart"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var IndexStart = GetInputConstructorValue("IndexStart", loader);
var IndexEnd = GetInputConstructorValue("IndexEnd", loader);


if(IndexEnd["original"].length == 0)
{
  Invalid("IndexEnd is empty");
  return;
}

if(IndexStart["original"].length == 0)
{
  Invalid("IndexStart is empty");
  return;
}

if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#remove_list_part_code").html())({variable:"VAR_" + Variable,index_start: IndexStart["updated"],index_end: IndexEnd["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "RemoveDuplicates"){var Variable = this.$el.find("#Variable").val().toUpperCase();

if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#remove_duplicates_code").html())({variable:"VAR_" + Variable})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "ListJoin"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var Separator = GetInputConstructorValue("Separator", loader);
var VariableResult = this.$el.find("#VariableResult").val().toUpperCase();



if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(VariableResult.length == 0)
{
  Invalid("VariableResult is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#join_list_code").html())({variable:"VAR_" + Variable,variable_result:"VAR_" + VariableResult,separator: Separator["updated"],})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "ParseStringToList"){var StringValue = GetInputConstructorValue("String", loader);
var Separator = GetInputConstructorValue("Separator", loader);
var VariableResult = this.$el.find("#VariableResult").val().toUpperCase();



if(StringValue["original"] == 0)
{
  Invalid("String is empty");
  return;
}

if(VariableResult.length == 0)
{
  Invalid("VariableResult is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#parse_string_to_list_code").html())({stirng:StringValue["updated"],variable_result:"VAR_" + VariableResult,separator: Separator["updated"],})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "GetElementIndex"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var VariableSave = this.$el.find("#VariableSave").val().toUpperCase();
var Value = GetInputConstructorValue("Value", loader);



if(VariableSave.length == 0)
{
  Invalid("VariableSave is empty");
  return;
}

if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#get_index_from_list_code").html())({variable:"VAR_" + Variable,variable_save:"VAR_" + VariableSave,value:Value["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "CopyList"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var VariableNewList = this.$el.find("#VariableNewList").val().toUpperCase();


if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(VariableNewList.length == 0)
{
  Invalid("VariableNewList is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#list_copy_code").html())({variable:"VAR_" + Variable,variable_new:"VAR_" + VariableNewList})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "ListSort"){var Variable = this.$el.find("#Variable").val().toUpperCase();

if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#list_sort_code").html())({variable:"VAR_" + Variable})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "ShuffleList"){var Variable = this.$el.find("#Variable").val().toUpperCase();

if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#list_shuffle_code").html())({variable:"VAR_" + Variable})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "ListMerge"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var VariableSecond = this.$el.find("#VariableSecond").val().toUpperCase();

if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(VariableSecond.length == 0)
{
  Invalid("VariableSecond is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#list_merge_code").html())({variable:"VAR_" + Variable,variable_second:"VAR_" + VariableSecond})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "ListCompare"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var VariableSecond = this.$el.find("#VariableSecond").val().toUpperCase();
var Result = this.$el.find("#VariableResult").val().toUpperCase();


if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(VariableSecond.length == 0)
{
  Invalid("VariableSecond is empty");
  return;
}

if(Result.length == 0)
{
  Invalid("Result is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#list_compare_code").html())({variable:"VAR_" + Variable,variable_second:"VAR_" + VariableSecond, result: "VAR_" + Result})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "path_base_name"){var path = GetInputConstructorValue("path", loader);
if(path["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Path") + tr("\" is not specified"));
    return;
};
var ext = GetInputConstructorValue("ext", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#path_base_name_code").html())({
        "path": path["updated"],
		"ext": ext["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "path_directory_name"){var path = GetInputConstructorValue("path", loader);
if(path["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Path") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#path_directory_name_code").html())({
        "path": path["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "path_extension_name"){var path = GetInputConstructorValue("path", loader);
if(path["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Path") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#path_extension_name_code").html())({
        "path": path["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "is_absolute_path"){var path = GetInputConstructorValue("path", loader);
if(path["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Path") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#is_absolute_path_code").html())({
        "path": path["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "join_paths"){var path1 = GetInputConstructorValue("path1", loader);
var path2 = GetInputConstructorValue("path2", loader);
var path3 = GetInputConstructorValue("path3", loader);
var paths_list = GetInputConstructorValue("paths_list", loader);
if(path1["original"].length==0 && path2["original"].length==0 && path3["original"].length==0 && paths_list["original"].length==0){
	Invalid(tr("The parameter \"") + tr("List of paths") + tr("\" is not specified"));
    Invalid(tr("List of paths") + " " + tr("is empty"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#join_paths_code").html())({
        "path1": path1["updated"],
        "path2": path2["updated"],
        "path3": path3["updated"],
        "paths_list": paths_list["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "normalize_path"){var path = GetInputConstructorValue("path", loader);
if(path["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Path") + tr("\" is not specified"));
    return;
};
var remove_trailing_slash = $("#Check").is(':checked');
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#normalize_path_code").html())({
        "path": path["updated"],
		"remove_trailing_slash": remove_trailing_slash,
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "parse_path"){var path = GetInputConstructorValue("path", loader);
if(path["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Path") + tr("\" is not specified"));
    return;
};
var root = this.$el.find("#root").val().toUpperCase();
if(root.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Root") + tr("\" is not specified"));
    return;
};
var dir = this.$el.find("#dir").val().toUpperCase();
if(dir.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Directory") + tr("\" is not specified"));
    return;
};
var base = this.$el.find("#base").val().toUpperCase();
if(base.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Last part") + tr("\" is not specified"));
    return;
};
var ext = this.$el.find("#ext").val().toUpperCase();
if(ext.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("File extension") + tr("\" is not specified"));
    return;
};
var name = this.$el.find("#name").val().toUpperCase();
if(name.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("File name") + tr("\" is not specified"));
    return;
};
var items = this.$el.find("#items").val().toUpperCase();
if(items.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("List of path items") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#parse_path_code").html())({
        "path": path["updated"],
        "root": "VAR_" + root,
        "dir": "VAR_" + dir,
        "base": "VAR_" + base,
        "ext": "VAR_" + ext,
        "name": "VAR_" + name,
        "items": "VAR_" + items
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "script_stats_project_path"){var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
	var code = loader.GetAdditionalData() + _.template($("#project_path_code").html())({
		variable: "VAR_" + Save
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "project_directory"){var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
	var code = loader.GetAdditionalData() + _.template($("#project_directory_code").html())({
		variable: "VAR_" + Save
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "installation_path"){var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
	var code = loader.GetAdditionalData() + _.template($("#installation_path_code").html())({
		variable: "VAR_" + Save
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "get_system_path"){var name = GetInputConstructorValue("name", loader);
if(name["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Path name") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#get_system_path_code").html())({
        "name": name["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "SMS_GetNumber"){var service = GetInputConstructorValue("service", loader);
if(service["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Service") + tr("\" is not specified"));
	return;
};
var apiKey = GetInputConstructorValue("apiKey", loader);
if(apiKey["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("API key") + tr("\" is not specified"));
	return;
};
var site = $("#site").val();
var country = GetInputConstructorValue("country", loader);
var operator = GetInputConstructorValue("operator", loader);
var maxPrice = GetInputConstructorValue("maxPrice", loader);
var customSite = GetInputConstructorValue("customSite", loader);
var customCountry = GetInputConstructorValue("customCountry", loader);
var serverUrl = GetInputConstructorValue("serverUrl", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
try{
	var code = loader.GetAdditionalData() + _.template($("#SMS_GetNumber_code").html())({
		"service": service["updated"],
		"apiKey": apiKey["updated"],
		"site": "\"" + site + "\"",
		"country": country["updated"],
		"operator": operator["updated"],
		"maxPrice": maxPrice["updated"],
		"customSite": customSite["updated"],
		"customCountry": customCountry["updated"],
		"serverUrl": serverUrl["updated"],
		"variable": "VAR_" + Save
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "SMS_GetCode"){var number = GetInputConstructorValue("number", loader);
if(number["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Number") + tr("\" is not specified"));
	return;
};
var interval = GetInputConstructorValue("interval", loader);
if(interval["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Interval") + tr("\" is not specified"));
	return;
};
var timeout = GetInputConstructorValue("timeout", loader);
if(timeout["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Timeout") + tr("\" is not specified"));
	return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
try{
	var code = loader.GetAdditionalData() + _.template($("#SMS_GetCode_code").html())({
		"number": number["updated"],
		"interval": interval["updated"],
		"timeout": timeout["updated"],
		"variable": "VAR_" + Save
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "SMS_SetStatus"){var number = GetInputConstructorValue("number", loader);
if(number["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Number") + tr("\" is not specified"));
	return;
};
var status = GetInputConstructorValue("status", loader);
if(status["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Stаtus") + tr("\" is not specified"));
	return;
};
var deleteInfo = $("#Check").is(':checked');
try{
	var code = loader.GetAdditionalData() + _.template($("#SMS_SetStatus_code").html())({
		"number": number["updated"],
		"status": status["updated"],
		"deleteInfo": deleteInfo
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "SMS_GetBalance"){var service = GetInputConstructorValue("service", loader);
if(service["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Service") + tr("\" is not specified"));
	return;
};
var apiKey = GetInputConstructorValue("apiKey", loader);
if(apiKey["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("API key") + tr("\" is not specified"));
	return;
};
var serverUrl = GetInputConstructorValue("serverUrl", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
try{
	var code = loader.GetAdditionalData() + _.template($("#SMS_GetBalance_code").html())({
		"service": service["updated"],
		"apiKey": apiKey["updated"],
		"serverUrl": serverUrl["updated"],
		"variable": "VAR_" + Save
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "SMS_GetNumbersCount"){var service = GetInputConstructorValue("service", loader);
if(service["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Service") + tr("\" is not specified"));
	return;
};
var apiKey = GetInputConstructorValue("apiKey", loader);
if(apiKey["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("API key") + tr("\" is not specified"));
	return;
};
var site = $("#site").val();
var country = GetInputConstructorValue("country", loader);
var customSite = GetInputConstructorValue("customSite", loader);
var customCountry = GetInputConstructorValue("customCountry", loader);
var serverUrl = GetInputConstructorValue("serverUrl", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
try{
	var code = loader.GetAdditionalData() + _.template($("#SMS_GetNumbersCount_code").html())({
		"service": service["updated"],
		"apiKey": apiKey["updated"],
		"site": "\"" + site + "\"",
		"country": country["updated"],
		"customSite": customSite["updated"],
		"customCountry": customCountry["updated"],
		"serverUrl": serverUrl["updated"],
		"variable": "VAR_" + Save
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "SMS_GetSites"){var service = GetInputConstructorValue("service", loader);
if(service["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Service") + tr("\" is not specified"));
	return;
};
var apiKey = GetInputConstructorValue("apiKey", loader);
if(apiKey["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("API key") + tr("\" is not specified"));
	return;
};
var serverUrl = GetInputConstructorValue("serverUrl", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
try{
	var code = loader.GetAdditionalData() + _.template($("#SMS_GetSites_code").html())({
		"service": service["updated"],
		"apiKey": apiKey["updated"],
		"serverUrl": serverUrl["updated"],
		"variable": "VAR_" + Save
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "SMS_GetCountries"){var service = GetInputConstructorValue("service", loader);
if(service["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Service") + tr("\" is not specified"));
	return;
};
var apiKey = GetInputConstructorValue("apiKey", loader);
if(apiKey["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("API key") + tr("\" is not specified"));
	return;
};
var serverUrl = GetInputConstructorValue("serverUrl", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
try{
	var code = loader.GetAdditionalData() + _.template($("#SMS_GetCountries_code").html())({
		"service": service["updated"],
		"apiKey": apiKey["updated"],
		"serverUrl": serverUrl["updated"],
		"variable": "VAR_" + Save
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "SMS_Debug"){var enable = GetInputConstructorValue("enable",loader);
if(enable["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Enable debug") + tr("\" is not specified"));
	return;
};
try{
	var code = loader.GetAdditionalData() + _.template($("#SMS_Debug_code").html())({
		"enable": enable["updated"]
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "ExecuteProcess"){var Save = this.$el.find("#Save").val().toUpperCase();
var SaveError = this.$el.find("#SaveError").val().toUpperCase();
var Command = GetInputConstructorValue("Command", loader);
var waitfinish = $("#Check").is(':checked')
var WorkingFolder = GetInputConstructorValue("WorkingFolder", loader);

if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}
if(Command["original"].length == 0)
{
  Invalid("Command is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($('#execute_process_code').html())(
  	{
  		variable:"VAR_" + Save,
  		command: Command["updated"], 
  		waitfinish:waitfinish,
  		working_folder: WorkingFolder["updated"],
  		variable_fail:"VAR_" + SaveError,
  	}
  )
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "UseProfile"){var Path = GetInputConstructorValue("Path", loader);
var LoadFPFromFolder = GetInputConstructorValue("LoadFPFromFolder", loader);
var LoadProxyFromFolder = GetInputConstructorValue("LoadProxyFromFolder", loader);
var Key = GetInputConstructorValue("Key", loader);


if(Path["original"].length == 0)
{
  Invalid("Path is empty");
  return;
}

if(LoadFPFromFolder["original"].length == 0)
{
  Invalid("LoadFPFromFolder is empty");
  return;
}

if(LoadProxyFromFolder["original"].length == 0)
{
  Invalid("LoadProxyFromFolder is empty");
  return;
}



try{
  var code = loader.GetAdditionalData() + _.template($("#use_profile_code").html())({profile:Path["updated"], load_fp: LoadFPFromFolder["updated"], load_proxy: LoadProxyFromFolder["updated"], key: Key["updated"]});
  code = Normalize(code,0);
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd, "", true);
}catch(e)
{}}else if(State == "StopUsingProfile"){try{
  var code = loader.GetAdditionalData() + _.template($("#stop_using_profile_code").html())({});
  code = Normalize(code,0);
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd, "", true);
}catch(e)
{}}else if(State == "SaveProfile"){var Path = GetInputConstructorValue("Path", loader);

if(Path["original"].length == 0)
{
  Invalid("Path is empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#save_profile_code").html())({profile:Path["updated"]});
  code = Normalize(code,0);
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd, "", true);
}catch(e)
{}}else if(State == "RemoveLocalProfile"){var Path = GetInputConstructorValue("Path", loader);


try{
  var code = loader.GetAdditionalData() + _.template($("#remove_local_profile_code").html())({profile:Path["updated"]});
  code = Normalize(code,0);
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd, "", true);
}catch(e)
{}}else if(State == "GetCurrentProfile"){var Save = this.$el.find("#Save").val().toUpperCase();
var Save2 = this.$el.find("#Save2").val().toUpperCase();
var Save3 = this.$el.find("#Save3").val().toUpperCase();


if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(Save2.length == 0)
{
  Invalid("Variable2 is empty");
  return;
}

if(Save3.length == 0)
{
  Invalid("Variable3 is empty");
  return;
}


 try{
  var code = loader.GetAdditionalData() + _.template($('#get_current_profile_code').html())(
      {
        variable:"VAR_" + Save,
        variable2:"VAR_" + Save2,
        variable3:"VAR_" + Save3
      }
    )
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{
}}else if(State == "RegexpFirst"){var Value = GetInputConstructorValue("Value",loader)
var Regexp = GetInputConstructorValue("Regexp",loader)
var Result = this.$el.find("#Result").val().toUpperCase();
var ResultAll = this.$el.find("#ResultAll").val().toUpperCase();
var Groups = this.$el.find("#GroupsAsList").val().toUpperCase();


if(Value["original"] == 0)
{
  Invalid("String is empty");
  return;
}

if(Regexp["original"] == 0)
{
  Invalid("Regexp is empty");
  return;
}

if(Result.length == 0)
{
  Invalid("Result is empty");
  return;
}

if(ResultAll.length == 0)
{
  Invalid("Entire match is empty");
  return;
}

if(Groups.length == 0)
{
  Invalid("Groups list is empty");
  return;
}




try{
  var code = loader.GetAdditionalData() + _.template($("#regexp_first_code").html())({variable:Result,resultall:"VAR_" + ResultAll,groups:"VAR_" + Groups,string:Value["updated"],regexp:Regexp["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "RegexpScan"){var Value = GetInputConstructorValue("Value",loader)
var Regexp = GetInputConstructorValue("Regexp",loader)
var Result = this.$el.find("#Result").val().toUpperCase();


if(Value["original"] == 0)
{
  Invalid("String is empty");
  return;
}

if(Regexp["original"] == 0)
{
  Invalid("Regexp is empty");
  return;
}

if(Result.length == 0)
{
  Invalid("Result is empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#regexp_scan_code").html())({variable:"VAR_" + Result,string:Value["updated"],regexp:Regexp["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "RegexpMatch"){var Value = GetInputConstructorValue("Value",loader)
var Regexp = GetInputConstructorValue("Regexp",loader)
var Result = this.$el.find("#Result").val().toUpperCase();


if(Value["original"] == 0)
{
  Invalid("String is empty");
  return;
}

if(Regexp["original"] == 0)
{
  Invalid("Regexp is empty");
  return;
}

if(Result.length == 0)
{
  Invalid("Result is empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#regexp_match_code").html())({variable:"VAR_" + Result,string:Value["updated"],regexp:Regexp["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "RegexpSplit"){var Value = GetInputConstructorValue("Value",loader)
var Regexp = GetInputConstructorValue("Regexp",loader)
var Result = this.$el.find("#Result").val().toUpperCase();


if(Value["original"] == 0)
{
  Invalid("String is empty");
  return;
}

if(Regexp["original"] == 0)
{
  Invalid("Regexp is empty");
  return;
}

if(Result.length == 0)
{
  Invalid("Result is empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#regexp_split_code").html())({variable:"VAR_" + Result,string:Value["updated"],regexp:Regexp["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "RegexpReplace"){var Value = GetInputConstructorValue("Value",loader)
var Regexp = GetInputConstructorValue("Regexp",loader)
var Result = this.$el.find("#Result").val().toUpperCase();
var ReplaceWith = GetInputConstructorValue("ReplaceWith",loader)

if(Value["original"] == 0)
{
  Invalid("String is empty");
  return;
}

if(Regexp["original"] == 0)
{
  Invalid("Regexp is empty");
  return;
}

if(Regexp["original"] == 0)
{
  Invalid("Regexp is empty");
  return;
}


if(Result.length == 0)
{
  Invalid("Result is empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#regexp_replace_code").html())({variable:"VAR_" + Result,string:Value["updated"],regexp:Regexp["updated"],replace:ReplaceWith["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "CreateResource"){var Name = GetInputConstructorValue("Name",loader)
var SuccessNumber = GetInputConstructorValue("SuccessNumber",loader)
var FailNumber = GetInputConstructorValue("FailNumber",loader)
var SimultaneousUsage = GetInputConstructorValue("SimultaneousUsage",loader)
var Interval = GetInputConstructorValue("Interval",loader)
var Greedy = $("#Check").is(':checked')
var DontGiveUp = $("#Check2").is(':checked')


if(Name["original"].length == 0)
{
  Invalid("Resource is empty");
  return;
}

if(SuccessNumber["original"].length == 0)
{
  Invalid("SuccessNumber is empty");
  return;
}

if(FailNumber["original"].length == 0)
{
  Invalid("FailNumber is empty");
  return;
}

if(SimultaneousUsage["original"].length == 0)
{
  Invalid("SimultaneousUsage is empty");
  return;
}

if(Interval["original"].length == 0)
{
  Invalid("Interval is empty");
  return;
}


try{
  var code = loader.GetAdditionalData() + _.template($("#create_resource_code").html())({name: Name["updated"],success: SuccessNumber["updated"],fail: FailNumber["updated"],simultaneous: SimultaneousUsage["updated"],interval: Interval["updated"],greedy: Greedy,dontgiveup: DontGiveUp})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "DeleteCurrentElement"){var ResourceName = $("#ResourceName").val();
var Sync = $("#Check").is(':checked')

if(ResourceName.length == 0)
{
  Invalid("Resource name is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#delete_current_element_code").html())({key: "\"" + je(ResourceName) + "\"",sync:Sync})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "ResourceAddElement"){var ResourceName = $("#ResourceName").val();
var Sync = $("#Check").is(':checked')
var OnlyWrite = $("#Check2").is(':checked')
var Data = GetInputConstructorValue("Data",loader)


if(ResourceName.length == 0)
{
  Invalid("Resource name is empty");
  return;
}

if(Data["original"].length <= 0)
{
  Invalid("Data is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#resource_add_element_code").html())({key: "\"" + je(ResourceName) + "\"",sync:Sync,data:Data["updated"],onlywrite:OnlyWrite})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "GetResouceLocation"){var ResourceName = $("#ResourceName").val();
var Save = $("#Save").val().toUpperCase();

if(ResourceName.length == 0)
{
  Invalid("Resource name is empty");
  return;
}

if(Save.length <= 0)
{
  Invalid("Save variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#get_resource_location_code").html())({key: "\"" + je(ResourceName) + "\"",save: "VAR_" + Save})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "ResourceToArray"){var ResourceName = $("#ResourceName").val();
var Save = $("#Save").val().toUpperCase();;

if(ResourceName.length == 0)
{
  Invalid("Resource name is empty");
  return;
}

if(Save.length <= 0)
{
  Invalid("List variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#resource_to_array_code").html())({key: "\"" + je(ResourceName) + "\"",save: "VAR_" + Save})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "ArrayToResource"){var ResourceName = $("#ResourceName").val();
var Variable = this.$el.find("#Variable").val().toUpperCase();


if(ResourceName.length <= 0)
{
  Invalid("Resource name is empty");
  return;
}

if(Variable.length <= 0)
{
  Invalid("Variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#array_to_resource_code").html())({key: "\"" + je(ResourceName) + "\"",variable:"VAR_" + Variable})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "ResourceReload"){var ResourceName = $("#ResourceName").val();

if(ResourceName.length == 0)
{
  Invalid("Resource name is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#resource_reload_code").html())({key: "\"" + je(ResourceName) + "\""})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "ResourceLength"){var ResourceName = $("#ResourceName").val();
var Save = $("#Save").val().toUpperCase();

if(ResourceName.length == 0)
{
  Invalid("Resource name is empty");
  return;
}

if(Save.length <= 0)
{
  Invalid("Save variable is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#resource_length_code").html())({key: "\"" + je(ResourceName) + "\"",save: "VAR_" + Save})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "getthreadnumber"){var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0)
{
	Invalid("Variable is empty");
	return;
}
try{
	var code = loader.GetAdditionalData() + _.template($("#script_stats_thread_number_code").html())({variable:"VAR_" + Save})
	code = Normalize(code,0)
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "script_stats_success_number"){var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0)
{
	Invalid("Variable is empty");
	return;
}
try{
	var code = loader.GetAdditionalData() + _.template($("#script_stats_success_number_code").html())({variable:"VAR_" + Save})
	code = Normalize(code,0)
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "script_stats_fail_number"){var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0)
{
	Invalid("Variable is empty");
	return;
}
try{
	var code = loader.GetAdditionalData() + _.template($("#script_stats_fail_number_code").html())({variable:"VAR_" + Save})
	code = Normalize(code,0)
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "script_stats_is_record"){var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0)
{
	Invalid("Variable is empty");
	return;
}
try{
	var code = loader.GetAdditionalData() + _.template($("#script_stats_is_record_code").html())({variable:"VAR_" + Save})
	code = Normalize(code,0)
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "smtp_set_settings"){var Host = GetInputConstructorValue("Host",loader)
var Port = GetInputConstructorValue("Port",loader)
var Username = GetInputConstructorValue("Username",loader)
var Password = GetInputConstructorValue("Password",loader)
var Secure = $("#Select").val()

if(Host["original"].length <= 0)
{
    Invalid("Host is empty");
    return;
}
if(Port["original"].length <= 0)
{
    Invalid("Port is empty");
    return;
}

try{
    var code = loader.GetAdditionalData() + _.template($("#smtp_settings_code").html())({host:Host["updated"], username:Username["updated"], password: Password["updated"], port:Port["updated"], encryption:"\"" + je(Secure) + "\""})
    code = Normalize(code,0)
    BrowserAutomationStudio_Append("" , BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}
}else if(State == "smtp_set_proxy"){var ProxyText = GetInputConstructorValue("ProxyText",loader)
var ProxyType = GetInputConstructorValue("ProxyType", loader)
var ProxyLogin = GetInputConstructorValue("ProxyLogin",loader)
var ProxyPassword = GetInputConstructorValue("ProxyPassword",loader)

try{
    var code = loader.GetAdditionalData() + _.template($("#smtp_proxy_code").html())({ProxyText:ProxyText["updated"], ProxyType:ProxyType["updated"],ProxyLogin:ProxyLogin["updated"],ProxyPassword:ProxyPassword["updated"]})
    code = Normalize(code,0)
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
    }catch(e){}	}else if(State == "smtp_send_mail"){var MailFrom = GetInputConstructorValue("MailFrom",loader)
var MailTo = GetInputConstructorValue("MailTo",loader)
var MailCC = GetInputConstructorValue("CC",loader)
var MailSubject = GetInputConstructorValue("Subject",loader)
var MailBody = GetInputConstructorValue("MailBody", loader)
var IsHtml = $("#Check").is(':checked');
var Attachments = GetInputConstructorValue("Attachments",loader)

if(MailTo["original"].length <= 0)
{
    Invalid("Mail To is empty");
    return;
}



try{
	var code = loader.GetAdditionalData() + _.template($("#smtp_send_mail_code").html())({mailfrom:MailFrom["updated"], mailto:MailTo["updated"], mailcc:MailCC["updated"], mailsubject:MailSubject["updated"], mailbody:MailBody["updated"], attachments:Attachments["updated"], is_html:IsHtml})
    code = Normalize(code,0)
    BrowserAutomationStudio_Append("" , BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "smtp_enable_debug"){var EnableDebug = GetInputConstructorValue("EnableDebug", loader);

if(EnableDebug["original"].length == 0)
{
  Invalid("EnableDebug is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#smtp_enable_debug_code").html())({enable: EnableDebug["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "is_string"){var data = GetInputConstructorValue("data", loader);
if(data["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Data") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#is_string_code").html())({
        "data": data["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "is_not_empty_string"){var data = GetInputConstructorValue("data", loader);
if(data["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Data") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#is_not_empty_string_code").html())({
        "data": data["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "to_string"){var data = GetInputConstructorValue("data", loader);
if(data["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Data") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#to_string_code").html())({
        "data": data["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "to_number"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var decimals = GetInputConstructorValue("decimals", loader);
var dec_point = GetInputConstructorValue("dec_point", loader);
var thousands_sep = GetInputConstructorValue("thousands_sep", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#to_number_code").html())({
        "string": string["updated"],
		"decimals": decimals["updated"],
		"dec_point": dec_point["updated"],
		"thousands_sep": thousands_sep["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "number_format"){var number = GetInputConstructorValue("number", loader);
if(number["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Numbеr") + tr("\" is not specified"));
    return;
};
var decimals = GetInputConstructorValue("decimals", loader);
var digits = GetInputConstructorValue("digits", loader);
var dec_point = GetInputConstructorValue("dec_point", loader);
var thousands_sep = GetInputConstructorValue("thousands_sep", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#number_format_code").html())({
        "number": number["updated"],
		"decimals": decimals["updated"],
		"digits": digits["updated"],
		"dec_point": dec_point["updated"],
		"thousands_sep": thousands_sep["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "count_substrings"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var substring = GetInputConstructorValue("substring", loader);
if(substring["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Substring") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#count_substrings_code").html())({
        "string": string["updated"],
        "substring": substring["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "get_substring"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var from = GetInputConstructorValue("from", loader);
var to = GetInputConstructorValue("to", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#get_substring_code").html())({
        "string": string["updated"],
        "from": from["updated"],
        "to": to["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "get_substring_between"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var left = GetInputConstructorValue("left", loader);
var right = GetInputConstructorValue("right", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#get_substring_between_code").html())({
        "string": string["updated"],
        "left": left["updated"],
        "right": right["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "remove_string_part"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var from = GetInputConstructorValue("from", loader);
var count = GetInputConstructorValue("count", loader);
if(count["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Count") + tr("\" is not specified"));
    return;
};
var substring = GetInputConstructorValue("substring", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#remove_string_part_code").html())({
        "string": string["updated"],
        "from": from["updated"],
        "count": count["updated"],
        "substring": substring["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "to_lower_case"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#to_lower_case_code").html())({
        "string": string["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "to_upper_case"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#to_upper_case_code").html())({
        "string": string["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "string_contains"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var substring = GetInputConstructorValue("substring", loader);
if(substring["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Substring") + tr("\" is not specified"));
    return;
};
var from = GetInputConstructorValue("from", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#string_contains_code").html())({
        "string": string["updated"],
        "substring": substring["updated"],
        "from": from["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "string_length"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#string_length_code").html())({
        "string": string["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "capitalize_words"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var all = $("#Check").is(':checked');
var lower = $("#Check2").is(':checked');
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#capitalize_words_code").html())({
        "string": string["updated"],
        "all": all,
        "lower": lower,
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "count_words"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#count_words_code").html())({
        "string": string["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "split_to_words"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#split_to_words_code").html())({
        "string": string["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "split_to_sentences"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#split_to_sentences_code").html())({
        "string": string["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "split_to_lines"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var separator = GetInputConstructorValue("separator", loader);
var remove = $("#Check").is(':checked');
var limit = GetInputConstructorValue("limit", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#split_to_lines_code").html())({
        "string": string["updated"],
		"separator": separator["updated"],
        "remove": remove,
		"limit": limit["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "find_substring"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var substring = GetInputConstructorValue("substring", loader);
if(substring["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Substring") + tr("\" is not specified"));
    return;
};
var from = GetInputConstructorValue("from", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#find_substring_code").html())({
        "string": string["updated"],
        "substring": substring["updated"],
        "from": from["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "starts_with"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var substring = GetInputConstructorValue("substring", loader);
if(substring["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Substring") + tr("\" is not specified"));
    return;
};
var from = GetInputConstructorValue("from", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#starts_with_code").html())({
        "string": string["updated"],
        "substring": substring["updated"],
        "from": from["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "ends_with"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var substring = GetInputConstructorValue("substring", loader);
if(substring["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Substring") + tr("\" is not specified"));
    return;
};
var lenght = GetInputConstructorValue("lenght", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#ends_with_code").html())({
        "string": string["updated"],
        "substring": substring["updated"],
        "lenght": lenght["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "insert_substring"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var index = GetInputConstructorValue("index", loader);
var substring = GetInputConstructorValue("substring", loader);
if(substring["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Substring") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#insert_substring_code").html())({
        "string": string["updated"],
        "index": index["updated"],
        "substring": substring["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "base64"){var Save = this.$el.find("#Save").val().toUpperCase();
var Value = GetInputConstructorValue("Value", loader);
var encode = $("#Select").val()=="encode"
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
	return;
};
if(Value["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Data") + tr("\" is not specified"));
	return;
};
try{
	var code = loader.GetAdditionalData() + _.template($("#base64_code").html())({
		"variable": "VAR_" + Save,
		"value": Value["updated"],
		"encode": encode
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "template"){var template = '';
var isspintax = $("#Check2").is(':checked');
var istemplate = $("#Check3").is(':checked');
if($("#Check").is(':checked')){
    template = GetInputConstructorValue("Template", loader)["updated"];
}else{
	template = "\"" + je($("#Template").val()) + "\"";
};
if(istemplate){
	template = template.replace("\\)\\!", "BASASYNC")
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length==0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
	return;
};
if($("#Template").val().length==0){
	Invalid(tr("The parameter \"") + tr("Template") + tr("\" is not specified"));
	return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#template_code").html())({
        "variable": "VAR_" + Save,
        "template": template,
        "isspintax": isspintax,
        "istemplate": istemplate
    });
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "replacestring"){var Value = GetInputConstructorValue("Value", loader);
var ReplaceFrom = GetInputConstructorValue("ReplaceFrom", loader);
var ReplaceTo = GetInputConstructorValue("ReplaceTo", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
if(Value["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
if(ReplaceFrom["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Replace From") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#replacestring_code").html())({
        "variable": "VAR_" + Save,
        "value": Value["updated"],
        "from": ReplaceFrom["updated"],
        "to": ReplaceTo["updated"]
    });
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch (e){}}else if(State == "randomstring"){var AllowedChars = GetInputConstructorValue("AllowedChars", loader);
var Length = GetInputConstructorValue("Length", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
if(AllowedChars["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Allowed Chars") + tr("\" is not specified"));
    return;
};
if(Length["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Result String Length") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({
        "variable": "VAR_" + Save,
        "chars": AllowedChars["updated"],
        "length": Length["updated"]
    });
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "new_line"){var carriage_return = $("#Select").val()=="CarriageReturn"

var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#new_line_code").html())({
		"carriage_return": carriage_return,
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "join_strings"){var string1 = GetInputConstructorValue("string1", loader);
var string2 = GetInputConstructorValue("string2", loader);
var string3 = GetInputConstructorValue("string3", loader);
var strings_list = GetInputConstructorValue("strings_list", loader);
if(string1["original"].length==0 && string2["original"].length==0 && string3["original"].length==0 && strings_list["original"].length==0){
	Invalid(tr("The parameter \"") + tr("List of strings") + tr("\" is not specified"));
    return;
};
var separator = GetInputConstructorValue("separator", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#join_strings_code").html())({
        "string1": string1["updated"],
        "string2": string2["updated"],
        "string3": string3["updated"],
        "strings_list": strings_list["updated"],
        "separator": separator["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "latinize"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var cyrillic = $("#Check").is(':checked');
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#latinize_code").html())({
        "string": string["updated"],
        "cyrillic": cyrillic,
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "declination"){var number = GetInputConstructorValue("number", loader);
if(number["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Number") + tr("\" is not specified"));
    return;
};
var word1 = GetInputConstructorValue("word1", loader);
if(word1["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Word at") + " 1" + tr("\" is not specified"));
    return;
};
var word2 = GetInputConstructorValue("word2", loader);
if(word2["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Word at") + " 2" + tr("\" is not specified"));
    return;
};
var word5 = GetInputConstructorValue("word5", loader);
if(word5["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("Word at") + " 5" + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#declination_code").html())({
        "number": number["updated"],
		"word1": word1["updated"],
		"word2": word2["updated"],
		"word5": word5["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "parse_csv_string"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var separators = GetInputConstructorValue("separators", loader);
var convert_types = $("#Check").is(':checked');
var list = $("#VariablesList").val().toUpperCase();
if(list.length <= 0){
	Invalid(tr("The parameter \"") + tr("Variables list") + tr("\" is not specified"));
	return;
};
list = list.replace(/\s/g,"");
list = list.split(",");
list = _.compact(list);
if(list.length <= 0){
	Invalid(tr("The parameter \"") + tr("Variables list") + tr("\" is not specified"));
	return;
};

var all = $("#ResultAsList").val().toUpperCase();
if(all.length <= 0){
	Invalid(tr("The parameter \"") + tr("Results as a list of items") + tr("\" is not specified"));
	return;
};

try{
    var code = loader.GetAdditionalData() + _.template($("#parse_csv_string_code").html())({
        "string": string["updated"],
		"separators": separators["updated"],
        "convert_types": convert_types,
        "list":list,
        "all":all,
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "create_csv_string"){var item1 = GetInputConstructorValue("item1", loader);
var item2 = GetInputConstructorValue("item2", loader);
var item3 = GetInputConstructorValue("item3", loader);
var items_list = GetInputConstructorValue("items_list", loader);
if(item1["original"].length==0 && item2["original"].length==0 && item3["original"].length==0 && items_list["original"].length==0){
	Invalid(tr("The parameter \"") + tr("List of items") + tr("\" is not specified"));
    return;
};
var separator = GetInputConstructorValue("separator", loader);
if(separator["original"].length==0){
	Invalid(tr("The parameter \"") + tr("Separator") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#create_csv_string_code").html())({
        "item1": item1["updated"],
        "item2": item2["updated"],
        "item3": item3["updated"],
        "items_list": items_list["updated"],
        "separator": separator["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "trim"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var spaces = $("#Check").is(':checked');
var breaks = $("#Check2").is(':checked');
var tabs = $("#Check3").is(':checked');
var characters = GetInputConstructorValue("characters", loader);
var all = $("#Check4").is(':checked');
var left = $("#Check5").is(':checked');
var right = $("#Check6").is(':checked');
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#trim_code").html())({
        "string": string["updated"],
		"spaces": spaces,
		"breaks": breaks,
		"tabs": tabs,
		"characters": characters["updated"],
		"all": all,
		"left": left,
		"right": right,
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}
}else if(State == "clean"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var spaces = $("#Check").is(':checked');
var breaks = $("#Check2").is(':checked');
var tabs = $("#Check3").is(':checked');
var characters_to_delete = GetInputConstructorValue("characters_to_delete", loader);
var characters_to_space = GetInputConstructorValue("characters_to_space", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#clean_code").html())({
        "string": string["updated"],
		"spaces": spaces,
		"breaks": breaks,
		"tabs": tabs,
		"characters_to_delete": characters_to_delete["updated"],
		"characters_to_space": characters_to_space["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "extract_emails"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#extract_emails_code").html())({
        "string": string["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "extract_urls"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#extract_urls_code").html())({
        "string": string["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "extract_phone_numbers"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#extract_phone_numbers_code").html())({
        "string": string["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "html_special_characters"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var encode = $("#Select").val()=="encode";
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
	var code = loader.GetAdditionalData() + _.template($("#html_special_characters_code").html())({
		"string": string["updated"],
		"encode": encode,
		"variable": "VAR_" + Save
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "SendMessage"){var Token = GetInputConstructorValue("Token", loader);
var IdChat = GetInputConstructorValue("IdChat", loader);
var Message = GetInputConstructorValue("Message", loader);
var IsNumberThread = $("#Check").is(':checked');
var IsTime = $("#Check1").is(':checked');

if(Token["original"].length == 0)
{
  Invalid("Token is empty");
  return;
}

if(IdChat["original"].length == 0)
{
  Invalid("IdChat is empty");
  return;
}

if(Message["original"].length == 0)
{
  Invalid("Message is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#send_message_code").html())({token:Token["updated"], chat_id:IdChat["updated"], message:Message["updated"], is_num_thread:IsNumberThread, is_time:IsTime});
  code = Normalize(code,0);
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "timezones_set_timezone_and_geolocation_by_ip"){var Value = GetInputConstructorValue("Value", loader);

var IpInfoMethod = GetInputConstructorValue("IpInfoMethod", loader);
var IpApiKey = GetInputConstructorValue("IpApiKey", loader);
var FunctionName = this.$el.find("#FunctionName").val();
var ChangeTimezone = GetInputConstructorValue("ChangeTimezone",loader)
var ChangeGeolocation = GetInputConstructorValue("ChangeGeolocation",loader)
var ChangeWebrtcIp = GetInputConstructorValue("ChangeWebrtcIp",loader)
var ChangeBrowserLanguage = GetInputConstructorValue("ChangeBrowserLanguage",loader)
var CallsFunctionCode = ""

if(FunctionName.length == 0)
{
  FunctionName = "null"
}else
{
  CallsFunctionCode = "\/*CallsFunction:" + FunctionName + "*\/\n"
}

if(Value["original"].length == 0)
{
  Invalid("Ip is empty");
  return;
}
 try{
  var code = loader.GetAdditionalData() + _.template($("#timezones_set_timezone_and_geolocation_by_ip_code").html())(
    {
      value: Value["updated"],
      ip_info_method: IpInfoMethod["updated"],
      ip_api_key: IpApiKey["updated"],
      function_name: FunctionName,
      change_timezone: ChangeTimezone["updated"], 
      change_geolocation: ChangeGeolocation["updated"], 
      change_webrtc: ChangeWebrtcIp["updated"],
      change_browserlanguage: ChangeBrowserLanguage["updated"]
    })
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + CallsFunctionCode + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "timezones_set_timezone"){var Value = GetInputConstructorValue("Value", loader);
var TimezoneName = GetInputConstructorValue("TimezoneName", loader);

 try{
  var code = loader.GetAdditionalData() + _.template($("#timezones_set_timezone_code").html())({
    value: Value["updated"], 
    timezonename: TimezoneName["updated"],
  })
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "timezones_set_geolocation"){var Latitude = GetInputConstructorValue("Latitude", loader);
var Longitude = GetInputConstructorValue("Longitude", loader);
var Geolocation = GetInputConstructorValue("GeolocationObject", loader);


 try{
  var code = loader.GetAdditionalData() + _.template($("#timezones_set_geolocation_code").html())({latitude: Latitude["updated"],longitude: Longitude["updated"],geolocation: Geolocation["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "timezones_ip_info"){var SaveValid = this.$el.find("#SaveValid").val().toUpperCase();
var SaveCountry = this.$el.find("#SaveCountry").val().toUpperCase();
var SaveCity = this.$el.find("#SaveCity").val().toUpperCase();
var SaveLatitude = this.$el.find("#SaveLatitude").val().toUpperCase();
var SaveLongitude = this.$el.find("#SaveLongitude").val().toUpperCase();
var SaveTimezone = this.$el.find("#SaveTimezone").val().toUpperCase();
var SaveOffset = this.$el.find("#SaveOffset").val().toUpperCase();
var SaveDstOffset = this.$el.find("#SaveDstOffset").val().toUpperCase();

var IpInfoMethod = GetInputConstructorValue("IpInfoMethod", loader);
var IpApiKey = GetInputConstructorValue("IpApiKey", loader);
var FunctionName = this.$el.find("#FunctionName").val();
var CallsFunctionCode = ""

if(FunctionName.length == 0)
{
  FunctionName = "null"
}else
{
  CallsFunctionCode = "\/*CallsFunction:" + FunctionName + "*\/\n"
}



var Value = GetInputConstructorValue("Value", loader);


if(SaveValid.length == 0 || SaveCountry.length == 0 || SaveCity.length == 0 || SaveLatitude.length == 0 || SaveLongitude.length == 0 || SaveTimezone.length == 0 || SaveOffset.length == 0 || SaveDstOffset.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(Value["original"].length == 0)
{
  Invalid("Ip is empty");
  return;
}

if(IpInfoMethod["original"].length == 0)
{
  Invalid("IpInfoMethod is empty");
  return;
}

 try{
  var code = loader.GetAdditionalData() + _.template($("#timezones_ip_info_code").html())({
  	variable_valid:"VAR_" + SaveValid,
  	variable_country:"VAR_" + SaveCountry,
  	variable_city:"VAR_" + SaveCity,
  	variable_latitude:"VAR_" + SaveLatitude,
  	variable_longitude:"VAR_" + SaveLongitude,
  	variable_timezone:"VAR_" + SaveTimezone,
  	variable_offset:"VAR_" + SaveOffset,
    variable_dst_offset:"VAR_" + SaveDstOffset,
    value: Value["updated"],
    ip_info_method: IpInfoMethod["updated"],
    ip_api_key: IpApiKey["updated"],
    function_name: FunctionName
  })
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + CallsFunctionCode + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "normalize_url"){var url = GetInputConstructorValue("url", loader);
if(url["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("URL") + tr("\" is not specified"));
    return;
};
var base_url = GetInputConstructorValue("base_url", loader);
var default_protocol = GetInputConstructorValue("default_protocol", loader);
var remove_query_parameters = GetInputConstructorValue("remove_query_parameters", loader);
var remove_directory_index = GetInputConstructorValue("remove_directory_index", loader);
var normalize_protocol = $("#Check").is(':checked');
var force_http = $("#Check2").is(':checked');
var force_https = $("#Check3").is(':checked');
var strip_authentication = $("#Check4").is(':checked');
var strip_query = $("#Check5").is(':checked');
var strip_hash = $("#Check6").is(':checked');
var strip_protocol = $("#Check7").is(':checked');
var strip_www = $("#Check8").is(':checked');
var remove_trailing_slash = $("#Check9").is(':checked');
var sort_query_parameters = $("#Check10").is(':checked');
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#normalize_url_code").html())({
        "url": url["updated"],
		"base_url": base_url["updated"],
		"default_protocol": default_protocol["updated"],
		"remove_query_parameters": remove_query_parameters["updated"],
		"remove_directory_index": remove_directory_index["updated"],
		"normalize_protocol": normalize_protocol,
		"force_http": force_http,
		"force_https": force_https,
		"strip_authentication": strip_authentication,
		"strip_query": strip_query,
		"strip_hash": strip_hash,
		"strip_protocol": strip_protocol,
		"strip_www": strip_www,
		"remove_trailing_slash": remove_trailing_slash,
		"sort_query_parameters": sort_query_parameters,
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "parse_url"){var url = GetInputConstructorValue("url", loader);
if(url["original"].length == 0){
	Invalid("URL" + " " + tr("is empty"));
    return;
};
var protocol = this.$el.find("#protocol").val().toUpperCase();
if(protocol.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Protocol/Scheme") + tr("\" is not specified"));
    return;
};
var username = this.$el.find("#username").val().toUpperCase();
if(username.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Username") + tr("\" is not specified"));
    return;
};
var password = this.$el.find("#password").val().toUpperCase();
if(password.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Password") + tr("\" is not specified"));
    return;
};
var host = this.$el.find("#host").val().toUpperCase();
if(host.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Host") + tr("\" is not specified"));
    return;
};
var port = this.$el.find("#port").val().toUpperCase();
if(port.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Port") + tr("\" is not specified"));
    return;
};
var path = this.$el.find("#path").val().toUpperCase();
if(path.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Path") + tr("\" is not specified"));
    return;
};
var query = this.$el.find("#query").val().toUpperCase();
if(query.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Query") + tr("\" is not specified"));
    return;
};
var hash = this.$el.find("#hash").val().toUpperCase();
if(hash.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Fragment") + tr("\" is not specified"));
    return;
};
var normalize = $("#Check").is(':checked');
var rfail = $("#Check2").is(':checked');
var base_url = GetInputConstructorValue("base_url", loader);
try{
    var code = loader.GetAdditionalData() + _.template($("#parse_url_code").html())({
        "url": url["updated"],
        "protocol": "VAR_" + protocol,
        "username": "VAR_" + username,
        "password": "VAR_" + password,
        "host": "VAR_" + host,
        "port": "VAR_" + port,
        "path": "VAR_" + path,
        "query": "VAR_" + query,
        "hash": "VAR_" + hash,
		"normalize": normalize,
		"rfail": rfail,		
        "base_url": base_url["updated"],
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "generate_url"){var protocol = GetInputConstructorValue("protocol", loader);
var username = GetInputConstructorValue("username", loader);
var password = GetInputConstructorValue("password", loader);
var host = GetInputConstructorValue("host", loader);
var port = GetInputConstructorValue("port", loader);
var path = GetInputConstructorValue("path", loader);
var query = GetInputConstructorValue("query", loader);
var hash = GetInputConstructorValue("hash", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#generate_url_code").html())({
        "protocol": protocol["updated"],
        "username": username["updated"],
        "password": password["updated"],
        "host": host["updated"],
        "port": port["updated"],
        "path": path["updated"],
        "query": query["updated"],
        "hash": hash["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "change_url"){var url = GetInputConstructorValue("url", loader);
if(url["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("URL") + tr("\" is not specified"));
    return;
};
var protocol = GetInputConstructorValue("protocol", loader);
var username = GetInputConstructorValue("username", loader);
var password = GetInputConstructorValue("password", loader);
var host = GetInputConstructorValue("host", loader);
var port = GetInputConstructorValue("port", loader);
var path = GetInputConstructorValue("path", loader);
var query = GetInputConstructorValue("query", loader);
var hash = GetInputConstructorValue("hash", loader);
var clear_query = $("#Check3").is(':checked');
var normalize = $("#Check").is(':checked');
var rfail = $("#Check2").is(':checked');
var base_url = GetInputConstructorValue("base_url", loader);
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#change_url_code").html())({
		"url": url["updated"],
        "protocol": protocol["updated"],
        "username": username["updated"],
        "password": password["updated"],
        "host": host["updated"],
        "port": port["updated"],
        "path": path["updated"],
        "query": query["updated"],
        "hash": hash["updated"],
		"clear_query": clear_query,
		"normalize": normalize,
		"rfail": rfail,		
        "base_url": base_url["updated"],
        "variable": "VAR_" + Save
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "parse_ua"){var ua = GetInputConstructorValue("ua", loader);
if(ua["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("User-Agent") + tr("\" is not specified"));
    return;
};
var platform_type = this.$el.find("#platform_type").val().toUpperCase();
if(platform_type.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Platform type") + tr("\" is not specified"));
    return;
};
var browser_name = this.$el.find("#browser_name").val().toUpperCase();
if(browser_name.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Browser name") + tr("\" is not specified"));
    return;
};
var browser_version = this.$el.find("#browser_version").val().toUpperCase();
if(browser_version.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Browser version") + tr("\" is not specified"));
    return;
};
var browser_major_version = this.$el.find("#browser_major_version").val().toUpperCase();
if(browser_major_version.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Browser major version") + tr("\" is not specified"));
    return;
};
var engine_name = this.$el.find("#engine_name").val().toUpperCase();
if(engine_name.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Engine name") + tr("\" is not specified"));
    return;
};
var engine_version = this.$el.find("#engine_version").val().toUpperCase();
if(engine_version.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Engine version") + tr("\" is not specified"));
    return;
};
var os_name = this.$el.find("#os_name").val().toUpperCase();
if(os_name.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("OS name") + tr("\" is not specified"));
    return;
};
var os_version = this.$el.find("#os_version").val().toUpperCase();
if(os_version.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("OS version") + tr("\" is not specified"));
    return;
};
var device_vendor = this.$el.find("#device_vendor").val().toUpperCase();
if(device_vendor.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Device vendor") + tr("\" is not specified"));
    return;
};
var device_model = this.$el.find("#device_model").val().toUpperCase();
if(device_model.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Device model") + tr("\" is not specified"));
    return;
};
var device_type = this.$el.find("#device_type").val().toUpperCase();
if(device_type.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Device type") + tr("\" is not specified"));
    return;
};
var cpu_architecture = this.$el.find("#cpu_architecture").val().toUpperCase();
if(cpu_architecture.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + " -> " + tr("Processor architecture") + tr("\" is not specified"));
    return;
};
try{
    var code = loader.GetAdditionalData() + _.template($("#parse_ua_code").html())({
        "ua": ua["updated"],
        "platform_type": "VAR_" + platform_type,
        "browser_name": "VAR_" + browser_name,
        "browser_version": "VAR_" + browser_version,
        "browser_major_version": "VAR_" + browser_major_version,
        "engine_name": "VAR_" + engine_name,
        "engine_version": "VAR_" + engine_version,
        "os_name": "VAR_" + os_name,
        "os_version": "VAR_" + os_version,
        "device_vendor": "VAR_" + device_vendor,
        "device_model": "VAR_" + device_model,
        "device_type": "VAR_" + device_type,
        "cpu_architecture": "VAR_" + cpu_architecture
    });
    code = Normalize(code, 0);
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "punycode"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var encode = $("#Select").val()=="encode";
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
	var code = loader.GetAdditionalData() + _.template($("#punycode_code").html())({
		"string": string["updated"],
		"encode": encode,
		"variable": "VAR_" + Save
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "url_component"){var string = GetInputConstructorValue("string", loader);
if(string["original"].length == 0){
	Invalid(tr("The parameter \"") + tr("String") + tr("\" is not specified"));
    return;
};
var encode = $("#Select").val()=="encode";
var Save = this.$el.find("#Save").val().toUpperCase();
if(Save.length == 0){
	Invalid(tr("The parameter \"") + tr("Variable") + tr("\" is not specified"));
    return;
};
try{
	var code = loader.GetAdditionalData() + _.template($("#url_component_code").html())({
		"string": string["updated"],
		"encode": encode,
		"variable": "VAR_" + Save
	});
	code = Normalize(code, 0);
	BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e){}}else if(State == "user_notification_play_sound"){ try{
  var code = loader.GetAdditionalData() + _.template($('#user_notification_play_sound_code').html())({})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{
}}else if(State == "user_notification_user_input"){var Variable = this.$el.find("#Variable").val().toUpperCase();
var Label = GetInputConstructorValue("Label", loader);


if(Variable.length == 0)
{
  Invalid("Variable is empty");
  return;
}

if(Label["original"].length == 0)
{
  Invalid("Label is empty");
  return;
}

try{
  var code = loader.GetAdditionalData() + _.template($("#user_notification_user_input_code").html())({variable:"VAR_" + Variable,label: Label["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "user_notification_web_interface_eval"){var val = GetInputConstructorValue("Code",loader)
if(val["original"].length > 0)
{
   try{
    var code = loader.GetAdditionalData() + _.template($("#user_notification_web_interface_eval_code").html())({code:val["updated"]})
    code = Normalize(code,0)
    BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
  }catch(e)
  {}
}else
{
  Invalid("Code is empty");
  return;
}}else if(State == "user_notification_manual_browser_control"){var Label = GetInputConstructorValue("Label", loader);


try{
  var code = loader.GetAdditionalData() + _.template($('#user_notification_manual_browser_control_code').html())({label: Label["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{
}}else if(State == "XpathXml"){var Save = this.$el.find("#Save").val().toUpperCase();
var Value = GetInputConstructorValue("Value", loader);
var TextValue = GetInputConstructorValue("Text", loader);
var fail = $("#Check").is(':checked')

if(TextValue["original"].length == 0)
{
  Invalid("Text is empty");
  return;
}
if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}
if(Value["original"].length == 0)
{
  Invalid("Query is empty");
  return;
}
 try{
  var code = loader.GetAdditionalData() + _.template($('#xpath_xml_code').html())({variable:"VAR_" + Save,value: Value["updated"], fail:fail, text: TextValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "XpathXmlList"){var Save = this.$el.find("#Save").val().toUpperCase();
var Value = GetInputConstructorValue("Value", loader);
var TextValue = GetInputConstructorValue("Text", loader);

if(TextValue["original"].length == 0)
{
  Invalid("Text is empty");
  return;
}
if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}
if(Value["original"].length == 0)
{
  Invalid("Query is empty");
  return;
}
 try{
  var code = loader.GetAdditionalData() + _.template($('#xpath_xml_list_code').html())({variable:"VAR_" + Save,value: Value["updated"], text: TextValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "XpathText"){var Save = this.$el.find("#Save").val().toUpperCase();
var Value = GetInputConstructorValue("Value", loader);
var TextValue = GetInputConstructorValue("Text", loader);
var fail = $("#Check").is(':checked')

if(TextValue["original"].length == 0)
{
  Invalid("Text is empty");
  return;
}
if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}
if(Value["original"].length == 0)
{
  Invalid("Query is empty");
  return;
}
 try{
  var code = loader.GetAdditionalData() + _.template($('#xpath_text_code').html())({variable:"VAR_" + Save,value: Value["updated"], fail:fail, text: TextValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "XpathTextList"){var Save = this.$el.find("#Save").val().toUpperCase();
var Value = GetInputConstructorValue("Value", loader);
var TextValue = GetInputConstructorValue("Text", loader);

if(TextValue["original"].length == 0)
{
  Invalid("Text is empty");
  return;
}
if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}
if(Value["original"].length == 0)
{
  Invalid("Query is empty");
  return;
}
 try{
  var code = loader.GetAdditionalData() + _.template($('#xpath_text_list_code').html())({variable:"VAR_" + Save,value: Value["updated"], text: TextValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}}else if(State == "XpathCount"){var Save = this.$el.find("#Save").val().toUpperCase();
var Value = GetInputConstructorValue("Value", loader);
var TextValue = GetInputConstructorValue("Text", loader);


if(TextValue["original"].length == 0)
{
  Invalid("Text is empty");
  return;
}

if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}
if(Value["original"].length == 0)
{
  Invalid("Query is empty");
  return;
}
 try{
  var code = loader.GetAdditionalData() + _.template($('#xpath_count_code').html())({variable:"VAR_" + Save,value: Value["updated"], text: TextValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}
}else if(State == "XpathExists"){var Save = this.$el.find("#Save").val().toUpperCase();
var Value = GetInputConstructorValue("Value", loader);
var TextValue = GetInputConstructorValue("Text", loader);


if(TextValue["original"].length == 0)
{
  Invalid("Text is empty");
  return;
}

if(Save.length == 0)
{
  Invalid("Variable is empty");
  return;
}
if(Value["original"].length == 0)
{
  Invalid("Query is empty");
  return;
}
 try{
  var code = loader.GetAdditionalData() + _.template($('#xpath_exists_code').html())({variable:"VAR_" + Save,value: Value["updated"], text: TextValue["updated"]})
  code = Normalize(code,0)
  BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
}catch(e)
{}
}else if(State == "BACKPACK_Approve"){try{
          var code = loader.GetAdditionalData() + _.template($("#BACKPACK_Approve_code").html())({});
          code = Normalize(code,0);
          BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
        }catch(e)
        {}
}else if(State == "BACKPACK_UnlockPassword"){var tevsburp = GetInputConstructorValue("tevsburp", loader);
                 if(tevsburp["original"].length == 0)
                 {
                   Invalid("Вставить пароль" + " is empty");
                   return;
                 }
try{
          var code = loader.GetAdditionalData() + _.template($("#BACKPACK_UnlockPassword_code").html())({"tevsburp": tevsburp["updated"]});
          code = Normalize(code,0);
          BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
        }catch(e)
        {}
}else if(State == "BACKPACK_AddNetworks"){try{
          var code = loader.GetAdditionalData() + _.template($("#BACKPACK_AddNetworks_code").html())({});
          code = Normalize(code,0);
          BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
        }catch(e)
        {}
}else if(State == "BACKPACK_ImportWalletToBACKPACK"){var rwpeahqp = GetInputConstructorValue("rwpeahqp", loader);
                 if(rwpeahqp["original"].length == 0)
                 {
                   Invalid("Вставить пароль" + " is empty");
                   return;
                 }
var fudtlhip = GetInputConstructorValue("fudtlhip", loader);
                 if(fudtlhip["original"].length == 0)
                 {
                   Invalid("Вставить сид фразу" + " is empty");
                   return;
                 }
try{
          var code = loader.GetAdditionalData() + _.template($("#BACKPACK_ImportWalletToBACKPACK_code").html())({"rwpeahqp": rwpeahqp["updated"],"fudtlhip": fudtlhip["updated"]});
          code = Normalize(code,0);
          BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
        }catch(e)
        {}
}else if(State == "RABBY_RABBY_conect"){var jayggiax = GetInputConstructorValue("jayggiax", loader);
                 if(jayggiax["original"].length == 0)
                 {
                   Invalid("NETWORK_NAME" + " is empty");
                   return;
                 }
try{
          var code = loader.GetAdditionalData() + _.template($("#RABBY_RABBY_conect_code").html())({"jayggiax": jayggiax["updated"]});
          code = Normalize(code,0);
          BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
        }catch(e)
        {}
}else if(State == "RABBY_RABBY_get_wallet_adress"){var Save = this.$el.find("#Save").val().toUpperCase();
try{
          var code = loader.GetAdditionalData() + _.template($("#RABBY_RABBY_get_wallet_adress_code").html())({"variable": "VAR_" + Save});
          code = Normalize(code,0);
          BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
        }catch(e)
        {}
}else if(State == "RABBY_RABBY_login"){var ndttjwhy = GetInputConstructorValue("ndttjwhy", loader);
                 if(ndttjwhy["original"].length == 0)
                 {
                   Invalid("PASSWORD" + " is empty");
                   return;
                 }
var aqufuxdq = GetInputConstructorValue("aqufuxdq", loader);
                 if(aqufuxdq["original"].length == 0)
                 {
                   Invalid("SEED" + " is empty");
                   return;
                 }
try{
          var code = loader.GetAdditionalData() + _.template($("#RABBY_RABBY_login_code").html())({"ndttjwhy": ndttjwhy["updated"],"aqufuxdq": aqufuxdq["updated"]});
          code = Normalize(code,0);
          BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
        }catch(e)
        {}
}else if(State == "START_GOOGLEstart"){var labghzdm = GetInputConstructorValue("labghzdm", loader);
                 if(labghzdm["original"].length == 0)
                 {
                   Invalid("Логин GOOGLE" + " is empty");
                   return;
                 }
var uvkjqfyw = GetInputConstructorValue("uvkjqfyw", loader);
                 if(uvkjqfyw["original"].length == 0)
                 {
                   Invalid("Пароль GOOGLE" + " is empty");
                   return;
                 }
var wurjeqny = GetInputConstructorValue("wurjeqny", loader);
                 if(wurjeqny["original"].length == 0)
                 {
                   Invalid("Путь к папке профиля" + " is empty");
                   return;
                 }
var gyduixmh = GetInputConstructorValue("gyduixmh", loader);
                 if(gyduixmh["original"].length == 0)
                 {
                   Invalid("Путь к файлу Отпечатка браузера" + " is empty");
                   return;
                 }
var gcuomkvy = GetInputConstructorValue("gcuomkvy", loader);
                 if(gcuomkvy["original"].length == 0)
                 {
                   Invalid("Путь к файлу с Расширениями браузера" + " is empty");
                   return;
                 }
try{
          var code = loader.GetAdditionalData() + _.template($("#START_GOOGLEstart_code").html())({"labghzdm": labghzdm["updated"],"uvkjqfyw": uvkjqfyw["updated"],"wurjeqny": wurjeqny["updated"],"gyduixmh": gyduixmh["updated"],"gcuomkvy": gcuomkvy["updated"]});
          code = Normalize(code,0);
          BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
        }catch(e)
        {}
}
          else if(State == "log")
          {
            var val = GetInputConstructorValue("LogText", loader)

            if(val["original"].length > 0)
            {
               try{
                var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({text:val["updated"]})
                code = Normalize(code,0)
                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
              }catch(e)
              {}
            }else
            {
              Invalid("Log data is empty");
              return;
            }
          }else if(State == "clearlog")
          {

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "timeout")
          {
            var val = GetInputConstructorValue("Value", loader)
            var type = this.$el.find("#Type").val();

            if(val["original"].length > 0)
            {
               try{
                var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({timeout:val["updated"], type: type})
                code = Normalize(code,0)
                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
              }catch(e)
              {}
            }else
            {
              Invalid("Value empty");
              return;
            }
          }else if(State == "url")
          {
            var Variable = this.$el.find("#SaveUrl").val().toUpperCase();

            if(Variable.length > 0)
            {
               try{
                var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Variable})
                code = Normalize(code,0)
                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
              }catch(e)
              {}
            }else
            {
              Invalid("Variable is empty");
              return;
            }
          }else if(State == "screen")
          {
            var CursorX = this.$el.find("#CursorX").val().toUpperCase();
            var CursorY = this.$el.find("#CursorY").val().toUpperCase();
            var CursorAbsoluteX = this.$el.find("#CursorAbsoluteX").val().toUpperCase();
            var CursorAbsoluteY = this.$el.find("#CursorAbsoluteY").val().toUpperCase();
            var ScrollX = this.$el.find("#ScrollX").val().toUpperCase();
            var ScrollY = this.$el.find("#ScrollY").val().toUpperCase();
            var Width = this.$el.find("#Width").val().toUpperCase();
            var Height = this.$el.find("#Height").val().toUpperCase();

            if(CursorX.length <= 0)
            {
              Invalid("CursorX is empty");
              return;
            }

            if(CursorY.length <= 0)
            {
              Invalid("CursorY is empty");
              return;
            }

            if(CursorAbsoluteX.length <= 0)
            {
              Invalid("CursorAbsoluteX is empty");
              return;
            }

            if(CursorAbsoluteY.length <= 0)
            {
              Invalid("CursorAbsoluteY is empty");
              return;
            }

            if(ScrollX.length <= 0)
            {
              Invalid("ScrollX is empty");
              return;
            }

            if(ScrollY.length <= 0)
            {
              Invalid("ScrollY is empty");
              return;
            }

            if(Width.length <= 0)
            {
              Invalid("Width is empty");
              return;
            }

            if(Height.length <= 0)
            {
              Invalid("Height is empty");
              return;
            }

            try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())(
                {
                  cursor_x:"VAR_" + CursorX,
                  cursor_y:"VAR_" + CursorY,
                  cursor_absolute_x:"VAR_" + CursorAbsoluteX,
                  cursor_absolute_y:"VAR_" + CursorAbsoluteY,
                  scroll_x:"VAR_" + ScrollX,
                  scroll_y:"VAR_" + ScrollY,
                  width:"VAR_" + Width,
                  height:"VAR_" + Height
                })
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          
          }else if(State == "touch")
          {
            var Enable = GetInputConstructorValue("Enable",loader);


            if(Enable["original"].length == 0)
            {
              Invalid("Enable field is empty");
              return;
            }

            try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())(
                {
                  enable:Enable["updated"]
                })
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          
          }else if(State == "executefunction")
          {
            var FunctionName = $("#FunctionName").val();

            var Arguments = {}

            _.each(this.$el.find("#FunctionParameters").find("[data-preserve-type=constr]"), function(Element) {
              var IdHex = $(Element).attr("data-preserve-id")
              var Id = fromhex(IdHex.replace("ParamId_",""))
              Arguments[Id] = GetInputConstructorValue(IdHex, loader)["updated"]
            })

            var HasReturnValue = this.$el.find("#Save").length > 0 
            var ReturnVariableName = ""
            if(HasReturnValue)
              ReturnVariableName = this.$el.find("#Save").val().toUpperCase();

            if(FunctionName.length > 0)
            {
               try{
                var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({name:FunctionName, args: Arguments,variable:"VAR_" + ReturnVariableName, has_return: HasReturnValue})
                code = Normalize(code,0)
                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 1, false);
              }catch(e)
              {}
            }else
            {
              Invalid("Function is empty");
              return;
            }
          }else if(State == "executefunctioninseveralthreads")
          {
            var FunctionName = $("#FunctionName").val();
            var ThreadNumber = GetInputConstructorValue("ThreadNumber", loader)
            var SuccessNumber = GetInputConstructorValue("SuccessNumber", loader)
            var FailNumber = GetInputConstructorValue("FailNumber", loader)


            if(FunctionName.length <= 0)
            {
              Invalid("Function is empty");
              return;
            }

             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({name:FunctionName, thread: ThreadNumber["updated"], success: SuccessNumber["updated"], fail: FailNumber["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 1, false);
            }catch(e)
            {}
          
          }else if(State == "recaptchav3")
          {
            var Method = GetInputConstructorValue("Method", loader);
            var Rucaptcha = GetInputConstructorValue("Rucaptcha", loader);
            var Server = GetInputConstructorValue("Server", loader);
            var Action = GetInputConstructorValue("Action", loader);
            var Score = GetInputConstructorValue("Score", loader);
            var SendProxy = GetInputConstructorValue("SendProxy", loader);

            if(Method["original"].length == 0)
            {
              Invalid("Method is empty");
              return;
            }
            
            if(Action["original"].length == 0)
            {
              Invalid("Action is empty");
              return;
            }

            if(Action["original"].length == 0)
            {
              Invalid("SendProxy is empty");
              return;
            }
            
            try{
              var code = loader.GetAdditionalData() + _.template($("#recaptchav3_code").html())({proxy: SendProxy["updated"], score: Score["updated"], action: Action["updated"], method: Method["updated"], rucaptcha: Rucaptcha["updated"], serverurl: Server["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          
          }else if(State == "setvariable")
          {
            var VariableName = this.$el.find("#SetVariableName").val().toUpperCase();
            var VariableValue = GetInputConstructorValue("SetVariableValue", loader)


            if(VariableName.length == 0)
            {
              Invalid("Variable name is empty");
              return;
            }

            if(!VariableValue["isString"] && VariableValue["original"].length == 0)
            {
              Invalid("Variable value is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable_name:"VAR_" + VariableName,variable_value:VariableValue["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "incvariable")
          {
            var VariableName = this.$el.find("#SetVariableName").val().toUpperCase();
            var VariableValue = GetInputConstructorValue("IncVariableValue", loader)


            if(VariableName.length == 0)
            {
              Invalid("Variable name is empty");
              return;
            }

            if(VariableValue["original"].length == 0)
            {
              Invalid("Variable value is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable_name:"VAR_" + VariableName,variable_value:VariableValue["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "getfunctionparameter")
          {
            var Save = this.$el.find("#Save").val().toUpperCase();
            var ParameterName = GetInputConstructorValue("ParameterName", loader)


            if(Save.length == 0)
            {
              Invalid("Result variable is empty");
              return;
            }

            if(ParameterName["original"].length == 0)
            {
              Invalid("Parameter name is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,param_name:ParameterName["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "return")
          {
            var ReturnValue = GetInputConstructorValue("ReturnValue", loader)
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({val:ReturnValue["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "incglobalvariable")
          {
            var VariableName = this.$el.find("#SetVariableName").val().toUpperCase();
            var VariableValue = GetInputConstructorValue("IncVariableValue", loader)


            if(VariableName.length == 0)
            {
              Invalid("Variable name is empty");
              return;
            }

            if(VariableValue["original"].length == 0)
            {
              Invalid("Variable value is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable_name:JSON.stringify(VariableName),variable_value:VariableValue["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "xml")
          {
            var Variable = this.$el.find("#SaveXml").val().toUpperCase();

            if(Variable.length > 0)
            {
               try{
                var path = GetPath(loader)
                var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Variable,path: path["path"],waiter: path["waiter"]})
                code = Normalize(code,0)
                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
              }catch(e)
              {}
            }else
            {
              Invalid("Variable is empty");
              return;
            }
          }else if(State == "linkurl")
          {
            var Variable = this.$el.find("#LinkURL").val().toUpperCase();

            if(Variable.length > 0)
            {
               try{
                var path = GetPath(loader)
                var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Variable,path: path["path"],waiter: path["waiter"]})
                code = Normalize(code,0)
                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
              }catch(e)
              {}
            }else
            {
              Invalid("Variable is empty");
              return;
            }
          }else if(State == "coordinates")
          {
            var X = this.$el.find("#X").val().toUpperCase();
            var Y = this.$el.find("#Y").val().toUpperCase();
            var AbsoluteX = this.$el.find("#AbsoluteX").val().toUpperCase();
            var AbsoluteY = this.$el.find("#AbsoluteY").val().toUpperCase();
            var Width = this.$el.find("#Width").val().toUpperCase();
            var Height = this.$el.find("#Height").val().toUpperCase();


            if(X.length == 0)
            {
              Invalid("X is empty");
              return;
            }

            if(Y.length == 0)
            {
              Invalid("Y is empty");
              return;
            }

            if(Width.length == 0)
            {
              Invalid("Width is empty");
              return;
            }

            if(Height.length == 0)
            {
              Invalid("Height is empty");
              return;
            }

            try{
              var path = GetPath(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({
                x:"VAR_" + X,
                y:"VAR_" + Y,
                absolute_x:"VAR_" + AbsoluteX,
                absolute_y:"VAR_" + AbsoluteY,
                width:"VAR_" + Width,
                height:"VAR_" + Height,
                path: path["path"],
                waiter: path["waiter"],
              })
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
            
          }else if(State == "exist")
          {
            var Variable = this.$el.find("#Save").val().toUpperCase();
            var CheckIsvisible = $("#Check").is(':checked')

            if(Variable.length > 0)
            {
               try{
                var path = GetPath(loader)
                var imagesearch = false 
                if(typeof(path["imagesearch"]) != "undefined")
                {
                  imagesearch = path["imagesearch"]
                }
                var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Variable,path: path["path"],waiter: path["waiter"], imagesearch: imagesearch, isvisible: CheckIsvisible, query: path["query"]})
                code = Normalize(code,0)
                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
              }catch(e)
              {}
            }else
            {
              Invalid("Variable is empty");
              return;
            }
          }else if(State == "clickelement")
          {
             var Check = $("#Check").is(':checked')

             try{
              var path = GetPath(loader,false,true)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({path: path["path"],waiter: path["waiter"], disableemulation: Check}) + BrowserAutomationStudio_GetWaitCode()
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "check")
          {
             try{
              var path = GetPath(loader,false,true)
              var MoveSettings = BrowserAutomationStudio_GetMoveJson(loader)
              var EmulationTime = GetInputConstructorValue("time",loader)
              var EmulationSettings = BrowserAutomationStudio_GetEmulationData(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({move_settings: MoveSettings, emulation_time: EmulationTime["updated"], emulation_settings: EmulationSettings,path: path["path"],waiter: path["waiter"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "focus")
          {
             try{
              var path = GetPath(loader)
              var NativeEmulation = $("#Check").is(':checked')
              var ScrollParams = BrowserAutomationStudio_GetScrollParams(loader)
              var EmulationTime = GetInputConstructorValue("time",loader)
              var EmulationSettings = BrowserAutomationStudio_GetEmulationData(loader)

              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({path: path["path"], emulation_time: EmulationTime["updated"], emulation_settings: EmulationSettings,waiter: path["waiter"],native_emulation:NativeEmulation,scroll_params:ScrollParams})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "moveelement")
          {
             try{
              var path = GetPath(loader,false,true)
              var MoveSettings = BrowserAutomationStudio_GetMoveJson(loader)
              var EmulationTime = GetInputConstructorValue("time",loader)
              var EmulationSettings = BrowserAutomationStudio_GetEmulationData(loader)

              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({move_settings: MoveSettings, emulation_time: EmulationTime["updated"], emulation_settings: EmulationSettings,path: path["path"],waiter: path["waiter"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }
          else if(State == "dragelement")
          {
             try{
              var path = GetPath(loader,false,true)
              var MoveSettings = BrowserAutomationStudio_GetMoveJson(loader)
              var EmulationTime = GetInputConstructorValue("time",loader)
              var EmulationSettings = BrowserAutomationStudio_GetEmulationData(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({move_settings: MoveSettings, emulation_time: EmulationTime["updated"], emulation_settings: EmulationSettings,path: path["path"],waiter: path["waiter"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }
          else if(State == "dropelement")
          {
             try{
              var path = GetPath(loader,false,true)
              var MoveSettings = BrowserAutomationStudio_GetMoveJson(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({move_settings: MoveSettings,path: path["path"],waiter: path["waiter"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "moveandclickelement")
          {
            var Check = $("#Check").is(':checked')
            var Check2 = $("#Check2").is(':checked')
            var ClickType = $("#Select").val()

             try{
              var path = GetPath(loader,false,true)
              var MoveSettings = BrowserAutomationStudio_GetMoveJson(loader)
              var EmulationTime = GetInputConstructorValue("time",loader)
              var EmulationSettings = BrowserAutomationStudio_GetEmulationData(loader)
              var AdditionalEmulation = GetInputConstructorValue("additionalEmulation",loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({path: path["path"],waiter: path["waiter"], holdctrl: Check2, click_type: "\"" + ClickType + "\"", wait: BrowserAutomationStudio_UsesWaitCode(), disableemulation: Check, move_settings: MoveSettings, emulation_time: EmulationTime["updated"], emulation_settings: EmulationSettings, additional_emulation: AdditionalEmulation["updated"]}) + BrowserAutomationStudio_GetWaitCode()
              code = Normalize(code,0)

              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "clear")
          {
             try{
              var path = GetPath(loader,false,true)
              var MoveSettings = BrowserAutomationStudio_GetMoveJson(loader)
              var EmulationTime = GetInputConstructorValue("time",loader)
              var EmulationSettings = BrowserAutomationStudio_GetEmulationData(loader)
              var AdditionalEmulation = GetInputConstructorValue("additionalEmulation",loader)

              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({move_settings: MoveSettings, emulation_time: EmulationTime["updated"], emulation_settings: EmulationSettings, additional_emulation: AdditionalEmulation["updated"],path: path["path"],waiter: path["waiter"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "script")
          {
            var Variable = this.$el.find("#SaveScript").val().toUpperCase();
            var Script = GetInputConstructorValue("ScriptValue", loader);
            if(Variable.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Script["original"].length == 0)
            {
              Invalid("Script is empty");
              return;
            }

             try{
              var path = GetPath(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Variable,path: path["path"],waiter: path["waiter"],script: Script["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "browserscript")
          {
            var source = window.Code.Editor.getValue();

            if(source.length === 0) {
              Invalid("Code is empty");
              return;
            }

            if(source.indexOf("GLOBAL:") >= 0) {
              Invalid("Global variables are not allowed");
              return;
            }

            var prepared = ExtractVariables(source);

            try {
              var path = GetPath(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({
                variables: JSON.stringify(prepared),
                source: source,
                path: path["path"],
                waiter: path["waiter"]
              });
              code = Normalize(code,0);
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            } catch(e) { }
          }else if(State == "captcha")
          {
            var Variable = this.$el.find("#Save").val().toUpperCase();
            var Method = GetInputConstructorValue("Method", loader);
            var Antigate = GetInputConstructorValue("Antigate", loader);
            var Server = GetInputConstructorValue("Server", loader);
            if(Variable.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Method["original"].length == 0)
            {
              Invalid("Method is empty");
              return;
            }

             try{

              var path = GetPath(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Variable,path: path["path"],waiter: path["waiter"],method: Method["updated"], antigate: Antigate["updated"], serverurl: Server["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "screenshot")
          {
            var Variable = this.$el.find("#Save").val().toUpperCase();
            if(Variable.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            
             try{

              var path = GetPath(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Variable,path: path["path"],waiter: path["waiter"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "attr")
          {

            var Save = this.$el.find("#Save").val().toUpperCase();
            var Value = GetInputConstructorValue("Value", loader);
            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Value["original"].length == 0)
            {
              Invalid("Attr is empty");
              return;
            }
             try{
              var path = GetPath(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,path: path["path"],waiter: path["waiter"],attr: Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "length")
          {
            var Save = this.$el.find("#Save").val().toUpperCase();

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
             try{
              var path = GetPath(loader,true)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save,path: path["path"],waiter: path["waiter"], query: path["query"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "waitfiledownload")
          {
            var Save = this.$el.find("#Save").val().toUpperCase();

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Save})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "loopelement")
          {
             try{
              var path = GetPath(loader, true)

              if(path.query.length == 0)
              {
                Invalid("Query is empty");
                return;
              }

              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({path: path["path"],waiter: path["waiter"], query: path["query"], querycss: path["querycss"], querymatch: path["querymatch"], queryxpath: path["queryxpath"]})

              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, 2, false);


              if(!_GobalModel.get("isedit"))
              {
                
                var LogText = tr("Current loop repetition") + " : [[CYCLE_INDEX]]"
                var ControlsAdditional = {"s":"log","v":1,"f":[],"uw":"0","ut":"0","uto":"0","um":"0","d":[{"id":"LogText","type":"constr","data":LogText,"class":"string"}]}
                var CodeAdditional = _.template($("#log_code").html())({text:"\"" + tr("Current loop repetition") + " : \" + VAR_CYCLE_INDEX"})
                ControlsAdditional = "/*Dat:" + utf8_to_b64(JSON.stringify(ControlsAdditional)) + "*/"
                BrowserAutomationStudio_Append("", ControlsAdditional + CodeAdditional, 1);

                var Used = false;
                if($("#selector").html() == "css")
                {
                  ControlsAdditional = {"s":"xml","v":1,"f":[],"uw":"0","ut":"0","uto":"0","um":"0","d":[{"id":"SaveXml","type":"var","data":"CURRENT_ELEMENT_XML"}],"p":{"is_image":false,"css":"[[FOR_EACH_CSS]]>AT>[[CYCLE_INDEX]]","version":"1.0","css1":"[[FOR_EACH_CSS]]>AT>[[CYCLE_INDEX]]","css2":"","css3":"","current":"css","match":"[[FOR_EACH_MATCH]]>AT>[[CYCLE_INDEX]]","xpath":"[[FOR_EACH_XPATH]]>AT>[[CYCLE_INDEX]]","at":"0, 0","we":true,"fa":true}}

                  CodeAdditional = `/*Browser*/
                    _SELECTOR = VAR_FOR_EACH_CSS + "\\u003eAT\\u003e" + VAR_CYCLE_INDEX;
                    wait_element(_SELECTOR)!
                    get_element_selector(_SELECTOR, false).xml()!
                    VAR_CURRENT_ELEMENT_XML = _result()`
                  Used = true
                }else if($("#selector").html() == "xpath")
                {
                  ControlsAdditional = {"s":"xml","v":1,"f":[],"uw":"0","ut":"0","uto":"0","um":"0","d":[{"id":"SaveXml","type":"var","data":"CURRENT_ELEMENT_XML"}],"p":{"is_image":false,"css":"[[FOR_EACH_CSS]]>AT>[[CYCLE_INDEX]]","version":"1.0","css1":"[[FOR_EACH_CSS]]>AT>[[CYCLE_INDEX]]","css2":"","css3":"","current":"xpath","match":"[[FOR_EACH_MATCH]]>AT>[[CYCLE_INDEX]]","xpath":"[[FOR_EACH_XPATH]]>AT>[[CYCLE_INDEX]]","at":"0, 0","we":true,"fa":true}}

                  CodeAdditional = `/*Browser*/
                    _SELECTOR = VAR_FOR_EACH_XPATH + "\\u003eAT\\u003e" + VAR_CYCLE_INDEX;
                    wait_element(_SELECTOR)!
                    get_element_selector(_SELECTOR, false).xml()!
                    VAR_CURRENT_ELEMENT_XML = _result()`
                  Used = true
                }else if($("#selector").html() == "match")
                {
                  ControlsAdditional = {"s":"xml","v":1,"f":[],"uw":"0","ut":"0","uto":"0","um":"0","d":[{"id":"SaveXml","type":"var","data":"CURRENT_ELEMENT_XML"}],"p":{"is_image":false,"css":"[[FOR_EACH_CSS]]>AT>[[CYCLE_INDEX]]","version":"1.0","css1":"[[FOR_EACH_CSS]]>AT>[[CYCLE_INDEX]]","css2":"","css3":"","current":"match","match":"[[FOR_EACH_MATCH]]>AT>[[CYCLE_INDEX]]","xpath":"[[FOR_EACH_XPATH]]>AT>[[CYCLE_INDEX]]","at":"0, 0","we":true,"fa":true}}

                  CodeAdditional = `/*Browser*/
                    _SELECTOR = VAR_FOR_EACH_MATCH + "\\u003eAT\\u003e" + VAR_CYCLE_INDEX;
                    wait_element(_SELECTOR)!
                    get_element_selector(_SELECTOR, false).xml()!
                    VAR_CURRENT_ELEMENT_XML = _result()`
                  Used = true
                }
                if(Used)
                {
                  ControlsAdditional = "/*Dat:" + utf8_to_b64(JSON.stringify(ControlsAdditional)) + "*/"
                  BrowserAutomationStudio_Append("", ControlsAdditional + CodeAdditional, 1);

                  LogText = tr("Current element xml") + " : [[CURRENT_ELEMENT_XML]]"
                  ControlsAdditional = {"s":"log","v":1,"f":[],"uw":"0","ut":"0","uto":"0","um":"0","d":[{"id":"LogText","type":"constr","data":LogText,"class":"string"}]}
                  CodeAdditional = _.template($("#log_code").html())({text:"\"" + tr("Current element xml") + " : \" + VAR_CURRENT_ELEMENT_XML"})
                  ControlsAdditional = "/*Dat:" + utf8_to_b64(JSON.stringify(ControlsAdditional)) + "*/"
                  BrowserAutomationStudio_Append("", ControlsAdditional + CodeAdditional, 1);
                }
              }
            }catch(e)
            {}

          }else if(State == "set_attr")
          {
            var Name = GetInputConstructorValue("Name", loader);
            var Value = GetInputConstructorValue("Value", loader);

            if(Name["original"].length == 0)
            {
              Invalid("Name is empty");
              return;
            }
            if(Value["original"].length == 0)
            {
              Invalid("Value is empty");
              return;
            }
             try{
              var path = GetPath(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({path: path["path"],waiter: path["waiter"],value: Value["updated"],name: Name["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "clickextensionbutton")
          {
            var ExtensionId = GetInputConstructorValue("ExtensionId", loader);

            if(ExtensionId["original"].length == 0)
            {
              Invalid("ExtensionId is empty");
              return;
            }
             try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({extension_id: ExtensionId["updated"]}) + BrowserAutomationStudio_GetWaitCode()
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "style")
          {
            var Variable = this.$el.find("#Save").val().toUpperCase();
            var Value = GetInputConstructorValue("Value", loader);
            if(Variable.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }
            if(Value["original"].length == 0)
            {
              Invalid("Style is empty");
              return;
            }

             try{
              var path = GetPath(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Variable,path: path["path"],waiter: path["waiter"],style: Value["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "text")
          {
            var Variable = this.$el.find("#SaveText").val().toUpperCase();

            if(Variable.length > 0)
            {
               try{
                var path = GetPath(loader)
                var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({variable:"VAR_" + Variable,path: path["path"],waiter: path["waiter"]})
                code = Normalize(code,0)
                BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
              }catch(e)
              {}
            }else
            {
              Invalid("Variable is empty");
              return;
            }
          }else if(State == "restrictpopups")
          {
             try{
              var path = GetPath(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "allowpopups")
          {
            try{
              var path = GetPath(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "restrictdownloads")
          {
             try{
              var path = GetPath(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "allowdownloads")
          {
            try{
              var path = GetPath(loader)
              var code = loader.GetAdditionalData() + _.template($('#' + State + "_code").html())({})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "click")
          {
            var MoveX = GetInputConstructorValue("ClickX", loader);
            var MoveY = GetInputConstructorValue("ClickY", loader);

            try{
              var code = loader.GetAdditionalData() +  _.template($('#' + State + "_code").html())({x:MoveX["updated"],y:MoveY["updated"]}) + BrowserAutomationStudio_GetWaitCode()
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "move")
          {
            var MoveX = GetInputConstructorValue("MoveX", loader);
            var MoveY = GetInputConstructorValue("MoveY", loader);

            try{
              var MoveSettings = BrowserAutomationStudio_GetMoveJson(loader)
              var EmulationTime = GetInputConstructorValue("time",loader)
              var EmulationSettings = BrowserAutomationStudio_GetEmulationData(loader, MoveX["updated"], MoveY["updated"])
              var code = loader.GetAdditionalData() +  _.template($('#' + State + "_code").html())({move_settings: MoveSettings, emulation_time: EmulationTime["updated"], emulation_settings: EmulationSettings,x:MoveX["updated"],y:MoveY["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "drag")
          {
            var MoveX = GetInputConstructorValue("X", loader);
            var MoveY = GetInputConstructorValue("Y", loader);

            try{
              var MoveSettings = BrowserAutomationStudio_GetMoveJson(loader)
              var EmulationTime = GetInputConstructorValue("time",loader)
              var EmulationSettings = BrowserAutomationStudio_GetEmulationData(loader, MoveX["updated"], MoveY["updated"])
              var code = loader.GetAdditionalData() +  _.template($('#' + State + "_code").html())({move_settings: MoveSettings, emulation_time: EmulationTime["updated"], emulation_settings: EmulationSettings,x:MoveX["updated"],y:MoveY["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "drop")
          {
            var MoveX = GetInputConstructorValue("X", loader);
            var MoveY = GetInputConstructorValue("Y", loader);

            try{
              var MoveSettings = BrowserAutomationStudio_GetMoveJson(loader)
              var code = loader.GetAdditionalData() +  _.template($('#' + State + "_code").html())({move_settings: MoveSettings,x:MoveX["updated"],y:MoveY["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }
          else if(State == "mousesettings")
          {
            var Speed = GetInputConstructorValue("Speed", loader);
            var Gravity = GetInputConstructorValue("Gravity", loader);
            var Deviation = GetInputConstructorValue("Deviation", loader);

            try{
              var code = loader.GetAdditionalData() +  _.template($('#' + State + "_code").html())({speed:Speed["updated"],gravity:Gravity["updated"],deviation:Deviation["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "notification")
          {
            var Enable = GetInputConstructorValue("AllowNotifications", loader);

            try{
              var code = loader.GetAdditionalData() +  _.template($('#' + State + "_code").html())({enable:Enable["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }
          else if(State == "browsersettings")
          {
            
            var Widevine = GetInputConstructorValue("Widevine", loader);
            var SafeBrowsing = GetInputConstructorValue("SafeBrowsing", loader);
            var Components = GetInputConstructorValue("Components", loader);
            var Webrtc = GetInputConstructorValue("Webrtc", loader);
            var Canvas = GetInputConstructorValue("Canvas", loader);
            var CanvasNoise = GetInputConstructorValue("CanvasNoise", loader);
            var WebrtcIps = GetInputConstructorValue("WebrtcIps", loader);
            var Webgl = GetInputConstructorValue("Webgl", loader);
            var WebglNoise = GetInputConstructorValue("WebglNoise", loader);
            var Audio = GetInputConstructorValue("Audio", loader);
            var AudioNoise = GetInputConstructorValue("AudioNoise", loader);
            var QUIC = GetInputConstructorValue("QUIC", loader);
            var MaxFPS = GetInputConstructorValue("MaxFPS", loader);
            var WebglVendor = GetInputConstructorValue("WebglVendor", loader);
            var WebglRenderer = GetInputConstructorValue("WebglRenderer", loader);
            var ProxyTunneling = GetInputConstructorValue("ProxyTunneling", loader);
            var SkipFrames = GetInputConstructorValue("SkipFrames", loader);
            var Extensions = GetInputConstructorValue("Extensions", loader);
            var CommandLine = GetInputConstructorValue("CommandLine", loader);
            var Tunneling = GetInputConstructorValue("Tunneling", loader);
            var BrowserVersion = GetInputConstructorValue("BrowserVersion", loader);
            var Path = GetInputConstructorValue("Path", loader);
            var LoadFPFromFolder = GetInputConstructorValue("LoadFPFromFolder", loader);
            var LoadProxyFromFolder = GetInputConstructorValue("LoadProxyFromFolder", loader);
            var Key = GetInputConstructorValue("Key", loader);
            

            try{
              var code = loader.GetAdditionalData() +  _.template($('#' + State + "_code").html())(
                {
                  Widevine:Widevine["updated"],
                  SafeBrowsing:SafeBrowsing["updated"],
                  Components:Components["updated"],
                  ProxyTunneling:ProxyTunneling["updated"],
                  SkipFrames:SkipFrames["updated"],
                  Extensions:Extensions["updated"],
                  CommandLine:CommandLine["updated"],
                  Tunneling:Tunneling["updated"],
                  BrowserVersion:BrowserVersion["updated"],
                  profile:Path["updated"], 
                  load_fp: LoadFPFromFolder["updated"], 
                  load_proxy: LoadProxyFromFolder["updated"],
                  Webrtc:Webrtc["updated"],
                  WebrtcIps:WebrtcIps["updated"],
                  Canvas:Canvas["updated"],
                  CanvasNoise:CanvasNoise["updated"],
                  Audio:Audio["updated"],
                  AudioNoise:AudioNoise["updated"],
                  QUIC:QUIC["updated"],
                  MaxFPS:MaxFPS["updated"],
                  Webgl:Webgl["updated"],
                  WebglNoise:WebglNoise["updated"],
                  WebglVendor:WebglVendor["updated"],
                  WebglRenderer:WebglRenderer["updated"],
                  Key:Key["updated"],
                })
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd, "", true);
            }catch(e)
            {}
          }else if(State == "getbrowserversionlist")
          {
            
            var Format = GetInputConstructorValue("Format", loader);
            var Save = this.$el.find("#Save").val().toUpperCase();

            if(Format["original"].length == 0)
            {
              Invalid("Format is empty");
              return;
            }

            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }


            try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + '_code').html())({format:Format["updated"], variable:"VAR_" + Save});
              code = Normalize(code,0);
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd, "", true);
            }catch(e)
            {}
          }else if(State == "getcurrentbrowserversion")
          {
            var Save = this.$el.find("#Save").val().toUpperCase();
            var Save2 = this.$el.find("#Save2").val().toUpperCase();
            var Save3 = this.$el.find("#Save3").val().toUpperCase();


            if(Save.length == 0)
            {
              Invalid("Variable is empty");
              return;
            }

            if(Save2.length == 0)
            {
              Invalid("Variable2 is empty");
              return;
            }


            if(Save3.length == 0)
            {
              Invalid("Variable3 is empty");
              return;
            }



            try{
              var code = loader.GetAdditionalData() + _.template($('#' + State + '_code').html())({variable:"VAR_" + Save, variable2:"VAR_" + Save2, variable3:"VAR_" + Save3});
              code = Normalize(code,0);
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd, "", true);
            }catch(e)
            {}
            
          }
          else if(State == "scroll")
          {
            var X = GetInputConstructorValue("X", loader);
            var Y = GetInputConstructorValue("Y", loader);
            var NativeEmulation = $("#Check").is(':checked');


            try{
              var code = loader.GetAdditionalData() +  _.template($('#' + State + "_code").html())({x:X["updated"],y:Y["updated"],native_emulation:NativeEmulation}) + BrowserAutomationStudio_GetWaitCode()
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "renderscreen")
          {
            var X = GetInputConstructorValue("X", loader);
            var Y = GetInputConstructorValue("Y", loader);
            var Width = GetInputConstructorValue("Width", loader);
            var Height = GetInputConstructorValue("Height", loader);
            var Variable = this.$el.find("#Save").val().toUpperCase();
            try{
              var code = loader.GetAdditionalData() +  _.template($('#' + State + "_code").html())({variable:"VAR_" + Variable, x:X["updated"],y:Y["updated"],width:Width["updated"],height:Height["updated"]})

              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "moveandclick")
          {
            var MoveX = GetInputConstructorValue("X", loader);
            var MoveY = GetInputConstructorValue("Y", loader);
            var Check2 = $("#Check2").is(':checked')
            var ClickType = $("#Select").val()

            try{
              var MoveSettings = BrowserAutomationStudio_GetMoveJson(loader)
              var EmulationTime = GetInputConstructorValue("time",loader)
              var EmulationSettings = BrowserAutomationStudio_GetEmulationData(loader, MoveX["updated"], MoveY["updated"])
              var AdditionalEmulation = GetInputConstructorValue("additionalEmulation",loader)
              var code = loader.GetAdditionalData() +  _.template($('#' + State + "_code").html())({holdctrl: Check2, click_type: "\"" + ClickType + "\"", wait: BrowserAutomationStudio_UsesWaitCode(), move_settings: MoveSettings, emulation_time: EmulationTime["updated"], emulation_settings: EmulationSettings, additional_emulation: AdditionalEmulation["updated"],x:MoveX["updated"],y:MoveY["updated"]}) + BrowserAutomationStudio_GetWaitCode()
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "addtab")
          {
            var Url = GetInputConstructorValue("Url", loader);
            var IsSilent = GetInputConstructorValue("IsSilent", loader);
            var Referrer = GetInputConstructorValue("Referrer",loader)
            
            if(Url["original"].length == 0)
            {
              Invalid("Url is empty");
              return;
            }
            if(IsSilent["original"].length == 0)
            {
              Invalid("IsSilent is empty");
              return;
            }
            
            try{
              var code = loader.GetAdditionalData() +  _.template($('#' + State + "_code").html())({referrer:Referrer["updated"], url:Url["updated"], notinstant: BrowserAutomationStudio_UsesWaitCode(), is_silent: IsSilent["updated"]}) /*+ BrowserAutomationStudio_GetWaitCode()*/
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "selecttab")
          {
            var Index = GetInputConstructorValue("Index", loader);
            if(Index["original"].length == 0)
            {
              Invalid("Index is empty");
              return;
            }
            try{
              var code = loader.GetAdditionalData() +  _.template($('#' + State + "_code").html())({index:Index["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "tabinfo")
          {
            var UrlList = this.$el.find("#UrlList").val().toUpperCase();
            var TotalTabs = this.$el.find("#TotalTabs").val().toUpperCase();
            var CurrentIndex = this.$el.find("#CurrentIndex").val().toUpperCase();
            try{
              var code = loader.GetAdditionalData() +  _.template($('#' + State + "_code").html())({urls:"VAR_" + UrlList, index:"VAR_" + CurrentIndex, total: "VAR_" + TotalTabs})

              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}

          }else if(State == "closetab")
          {
            var Index = GetInputConstructorValue("Index", loader);
            if(Index["original"].length == 0)
            {
              Invalid("Index is empty");
              return;
            }
            try{
              var code = loader.GetAdditionalData() +  _.template($('#' + State + "_code").html())({index:Index["updated"]})
              code = Normalize(code,0)
              BrowserAutomationStudio_Append("", BrowserAutomationStudio_SaveControls() + code, action, DisableIfAdd);
            }catch(e)
            {}
          }else if(State == "threadnumber")
          {
            var ThreadNumber = GetInputConstructorValue("ThreadNumber", loader)["original"];
            if(ThreadNumber.toString().length == 0)
              ThreadNumber = "1"
            try{BrowserAutomationStudio_Append("_threadnumber_", ThreadNumber, action);}catch(e){}
          }else if(State == "successnumber")
          {
            var SuccessNumber = GetInputConstructorValue("SuccessNumber", loader)["original"];
            if(SuccessNumber.toString().length == 0)
              SuccessNumber = "1"
            try{BrowserAutomationStudio_Append("_successnumber_", SuccessNumber.toString(), action);}catch(e){}
          }else if(State == "failnumber")
          {
            var FailNumber = GetInputConstructorValue("FailNumber", loader)["original"];
            if(FailNumber.toString().length == 0)
              FailNumber = "1"
            try{BrowserAutomationStudio_Append("_failnumber_", FailNumber.toString(), action);}catch(e){}
          }

          _Router.navigate("", true);
          
      },

      initialize: function(){
        this.templates =
        {
          "main" : _.template($('#main').html()),
          "___none" : _.template($('#___none').html()),
          "load" : _.template($('#load').html()),
          "navigateback" : _.template($('#navigateback').html()),
          "type" : _.template($('#type').html()),
          "waitload" : _.template($('#waitload').html()),
          "waiturl" : _.template($('#waiturl').html()),
          "waitfullload" : _.template($('#waitfullload').html()),
          "waitcontent" : _.template($('#waitcontent').html()),
          "waitcss" : _.template($('#waitcss').html()),
          "sleep" : _.template($('#sleep').html()),
          "resize" : _.template($('#resize').html()),
          "proxy" : _.template($('#proxy').html()),
          "click" : _.template($('#click').html()),
          "move" : _.template($('#move').html()),
          "moveandclick" : _.template($('#moveandclick').html()),
          "threadnumber" : _.template($('#threadnumber').html()),
          "failnumber" : _.template($('#failnumber').html()),
          "successnumber" : _.template($('#successnumber').html()),
          "log" : _.template($('#log').html()),
          "clearlog" : _.template($('#clearlog').html()),
          "url" : _.template($('#url').html()),
          "screen" : _.template($('#screen').html()),
          "touch" : _.template($('#touch').html()),
          "xml" : _.template($('#xml').html()),
          "linkurl" : _.template($('#linkurl').html()),
          "coordinates" : _.template($('#coordinates').html()),
          "text" : _.template($('#text').html()),
          "setvariable": _.template($('#setvariable').html()),
          "if": _.template($('#if').html()),
          "while": _.template($('#while').html()),
          "for": _.template($('#for').html()),
          "foreach": _.template($('#foreach').html()),
          "executefunction": _.template($('#executefunction').html()),
          "getfunctionparameter": _.template($('#getfunctionparameter').html()),
          "recaptchav3": _.template($('#recaptchav3').html()),
          "return": _.template($('#return').html()),
          "break": _.template($('#break').html()),
          "continue": _.template($('#continue').html()),
          "fail": _.template($('#fail').html()),
          "success": _.template($('#success').html()),
          "custom": _.template($('#custom').html()),
          "script": _.template($('#script').html()),
          "clickelement": _.template($('#clickelement').html()),
          "moveelement": _.template($('#moveelement').html()),
          "moveandclickelement": _.template($('#moveandclickelement').html()),
          "clear": _.template($('#clear').html()),
          "typeelement": _.template($('#typeelement').html()),
          "exist": _.template($('#exist').html()),
          "style": _.template($('#style').html()),
          "check": _.template($('#check').html()),
          "focus": _.template($('#focus').html()),
          "set": _.template($('#set').html()),
          "set_integer": _.template($('#set_integer').html()),
          "set_random": _.template($('#set_random').html()),
          "attr": _.template($('#attr').html()),
          "set_attr": _.template($('#set_attr').html()),
          "clickextensionbutton": _.template($('#clickextensionbutton').html()),
          "captcha": _.template($('#captcha').html()),
          "screenshot": _.template($('#screenshot').html()),
          "length": _.template($('#length').html()),
          "loopelement": _.template($('#loopelement').html()),
          "clickCaptchaBrowser": _.template($('#clickCaptchaBrowser').html()),
          "solvecaptcha": _.template($('#solvecaptcha').html()),
          "javascript": _.template($('#javascript').html()),
          "reset": _.template($('#reset').html()),
          "openfile": _.template($('#openfile').html()),
          "dragfile": _.template($('#dragfile').html()),
          //"getcookiesforurl": _.template($('#getcookiesforurl').html()),
          "savecookies": _.template($('#savecookies').html()),
          "restorecookies": _.template($('#restorecookies').html()),
          "scroll": _.template($('#scroll').html()),
          "html": _.template($('#html').html()),
          "renderscreen": _.template($('#renderscreen').html()),
          "cachemaskallow": _.template($('#cachemaskallow').html()),
          "cachemaskdeny": _.template($('#cachemaskdeny').html()),
          "cachemaskclear": _.template($('#cachemaskclear').html()),
          "requestmaskallow": _.template($('#requestmaskallow').html()),
          "requestmaskdeny": _.template($('#requestmaskdeny').html()),
          "requestmaskclear": _.template($('#requestmaskclear').html()),
          "cleardata": _.template($('#cleardata').html()),
          "clearmasks": _.template($('#clearmasks').html()),
          "getstatus": _.template($('#getstatus').html()),
          "isloaded": _.template($('#isloaded').html()),
          "getfromcache": _.template($('#getfromcache').html()),
          "getallcache": _.template($('#getallcache').html()),
          "redirectrequests": _.template($('#redirectrequests').html()),
          "replacerequestcontent": _.template($('#replacerequestcontent').html()),
          "replaceresponsecontent": _.template($('#replaceresponsecontent').html()),
          "disablerules": _.template($('#disablerules').html()),
          "getrulestats": _.template($('#getrulestats').html()),
          "result": _.template($('#result').html()),
          "globalset": _.template($('#globalset').html()),
          "globalget": _.template($('#globalget').html()),
          "httpclientproxy": _.template($('#httpclientproxy').html()),
          "httpclientreset": _.template($('#httpclientreset').html()),
          "httpclientdownload": _.template($('#httpclientdownload').html()),
          "httpclientget": _.template($('#httpclientget').html()),
          "httpclientpost": _.template($('#httpclientpost').html()),
          "httpclienturl": _.template($('#httpclienturl').html()),
          "httpclientcontent": _.template($('#httpclientcontent').html()),
          "httpclientstatus": _.template($('#httpclientstatus').html()),
          "httpclientgetheader": _.template($('#httpclientgetheader').html()),
          "httpclientsetheader": _.template($('#httpclientsetheader').html()),
          "httpclientclearheader": _.template($('#httpclientclearheader').html()),
          //"httpclientgetcookiesforurl": _.template($('#httpclientgetcookiesforurl').html()),
          "httpclientsavecookies": _.template($('#httpclientsavecookies').html()),
          "httpclientrestorecookies": _.template($('#httpclientrestorecookies').html()),
          "httpclientfailonerror": _.template($('#httpclientfailonerror').html()),
          "httpclientiserror": _.template($('#httpclientiserror').html()),
          "httpclientgeterrorstring": _.template($('#httpclientgeterrorstring').html()),
          "httpclientxpathxml": _.template($('#httpclientxpathxml').html()),
          "httpclientxpathxmllist": _.template($('#httpclientxpathxmllist').html()),
          "httpclientxpathtext": _.template($('#httpclientxpathtext').html()),
          "httpclientxpathtextlist": _.template($('#httpclientxpathtextlist').html()),
          "httpclientxpathcount": _.template($('#httpclientxpathcount').html()),
          "httpclientxpathexists": _.template($('#httpclientxpathexists').html()),
          "parseline": _.template($('#parseline').html()),
          "waitelement": _.template($('#waitelement').html()),
          "timeout": _.template($('#timeout').html()),
          "promptresult": _.template($('#promptresult').html()),
          "httpauth": _.template($('#httpauth').html()),
          "solverfailed": _.template($('#solverfailed').html()),
          "browserjavascript": _.template($('#browserjavascript').html()),
          "browserscript": _.template($('#browserscript').html()),
          "onloadjavascript": _.template($('#onloadjavascript').html()),
          "incvariable": _.template($('#incvariable').html()),
          "incglobalvariable": _.template($('#incglobalvariable').html()),
          "ignoreerrors": _.template($('#ignoreerrors').html()),
          "die": _.template($('#die').html()),
          "randomint": _.template($('#randomint').html()),
          "addtab": _.template($('#addtab').html()),
          "selecttab": _.template($('#selecttab').html()),
          "tabinfo": _.template($('#tabinfo').html()),
          "closetab": _.template($('#closetab').html()),
          "drag": _.template($('#drag').html()),
          "drop": _.template($('#drop').html()),
          "dragelement": _.template($('#dragelement').html()),
          "dropelement": _.template($('#dropelement').html()),
          "waitfiledownload": _.template($('#waitfiledownload').html()),
          "loadcookiesfrombrowser": _.template($('#loadcookiesfrombrowser').html()),
          "loadcookiesfromhttpclient": _.template($('#loadcookiesfromhttpclient').html()),
          "closebrowser": _.template($('#closebrowser').html()),
          "openbrowser": _.template($('#openbrowser').html()),
          "goto": _.template($('#goto').html()),
          "label": _.template($('#label').html()),
          "restrictpopups": _.template($('#restrictpopups').html()),
          "allowpopups": _.template($('#allowpopups').html()),
          "restrictdownloads": _.template($('#restrictdownloads').html()),
          "allowdownloads": _.template($('#allowdownloads').html()),
          "setheader": _.template($('#setheader').html()),
          "mousesettings": _.template($('#mousesettings').html()),
          "notification": _.template($('#notification').html()),

          "browsersettings": _.template($('#browsersettings').html()),
          "getbrowserversionlist": _.template($('#getbrowserversionlist').html()),
          "getcurrentbrowserversion": _.template($('#getcurrentbrowserversion').html()),
          "executefunctioninseveralthreads": _.template($('#executefunctioninseveralthreads').html())
          ,"Checksum_String": _.template($('#Checksum_String').html()),"Checksum_File": _.template($('#Checksum_File').html()),"Checksum_GetAlgorithmsList": _.template($('#Checksum_GetAlgorithmsList').html()),"clickCaptchaElement": _.template($('#clickCaptchaElement').html()),"clipboard_getclipboard": _.template($('#clipboard_getclipboard').html()),"clipboard_setclipboard": _.template($('#clipboard_setclipboard').html()),"Database_GetGroupList": _.template($('#Database_GetGroupList').html()),"Database_CreateGroup": _.template($('#Database_CreateGroup').html()),"Database_DeleteGroup": _.template($('#Database_DeleteGroup').html()),"Database_ChangeGroup": _.template($('#Database_ChangeGroup').html()),"Database_CopyGroup": _.template($('#Database_CopyGroup').html()),"Database_MoveRecordToGroup": _.template($('#Database_MoveRecordToGroup').html()),"Database_InsertRecord": _.template($('#Database_InsertRecord').html()),"Database_UpdateRecord": _.template($('#Database_UpdateRecord').html()),"Database_UpdateRecordsByCriteria": _.template($('#Database_UpdateRecordsByCriteria').html()),"Database_SelectOne": _.template($('#Database_SelectOne').html()),"Database_SelectRecords": _.template($('#Database_SelectRecords').html()),"Database_DeleteOneRecord": _.template($('#Database_DeleteOneRecord').html()),"Database_DeleteRecords": _.template($('#Database_DeleteRecords').html()),"Database_CountRecords": _.template($('#Database_CountRecords').html()),"datetime_stringtodate": _.template($('#datetime_stringtodate').html()),"datetime_datetostring": _.template($('#datetime_datetostring').html()),"datetime_msecondstodate": _.template($('#datetime_msecondstodate').html()),"datetime_datetomseconds": _.template($('#datetime_datetomseconds').html()),"datetime_createdate": _.template($('#datetime_createdate').html()),"datetime_changedate": _.template($('#datetime_changedate').html()),"datetime_addsecondstodate": _.template($('#datetime_addsecondstodate').html()),"datetime_substractdates": _.template($('#datetime_substractdates').html()),"datetime_datenow": _.template($('#datetime_datenow').html()),"datetime_changetimezone": _.template($('#datetime_changetimezone').html()),"datetime_gettimezone": _.template($('#datetime_gettimezone').html()),"datetime_dayofmonth": _.template($('#datetime_dayofmonth').html()),"datetime_dayofweek": _.template($('#datetime_dayofweek').html()),"datetime_dayofyear": _.template($('#datetime_dayofyear').html()),"datetime_year": _.template($('#datetime_year').html()),"datetime_month": _.template($('#datetime_month').html()),"datetime_hour": _.template($('#datetime_hour').html()),"datetime_minute": _.template($('#datetime_minute').html()),"datetime_second": _.template($('#datetime_second').html()),"datetime_millisecond": _.template($('#datetime_millisecond').html()),"EmbeddedLanguagesNodeJs": _.template($('#EmbeddedLanguagesNodeJs').html()),"filesystem_readfile": _.template($('#filesystem_readfile').html()),"filesystem_writefile": _.template($('#filesystem_writefile').html()),"filesystem_fileinfo": _.template($('#filesystem_fileinfo').html()),"filesystem_createdir": _.template($('#filesystem_createdir').html()),"filesystem_removefile": _.template($('#filesystem_removefile').html()),"filesystem_movefile": _.template($('#filesystem_movefile').html()),"filesystem_copyfile": _.template($('#filesystem_copyfile').html()),"filesystem_search": _.template($('#filesystem_search').html()),"filesystem_file_to_list": _.template($('#filesystem_file_to_list').html()),"filesystem_list_to_file": _.template($('#filesystem_list_to_file').html()),"FingerprintSwitcher_Get": _.template($('#FingerprintSwitcher_Get').html()),"FingerprintSwitcher_Apply": _.template($('#FingerprintSwitcher_Apply').html()),"FingerprintSwitcher_Performance": _.template($('#FingerprintSwitcher_Performance').html()),"FingerprintSwitcher_Override": _.template($('#FingerprintSwitcher_Override').html()),"FingerprintSwitcher_DisableOverride": _.template($('#FingerprintSwitcher_DisableOverride').html()),"asyncfunction_call": _.template($('#asyncfunction_call').html()),"asyncfunction_wait": _.template($('#asyncfunction_wait').html()),"asyncfunction_result": _.template($('#asyncfunction_result').html()),"asyncfunction_stop": _.template($('#asyncfunction_stop').html()),"IdleEmulationNew": _.template($('#IdleEmulationNew').html()),"IdleEmulationSetGeneralSettings": _.template($('#IdleEmulationSetGeneralSettings').html()),"IdleEmulationResetGeneralSettings": _.template($('#IdleEmulationResetGeneralSettings').html()),"IdleEmulation": _.template($('#IdleEmulation').html()),"IdleEmulationSetDebug": _.template($('#IdleEmulationSetDebug').html()),"imageprocessingload": _.template($('#imageprocessingload').html()),"imageprocessingdelete": _.template($('#imageprocessingdelete').html()),"imageprocessingcreate": _.template($('#imageprocessingcreate').html()),"imageprocessingconvert": _.template($('#imageprocessingconvert').html()),"imageprocessinggetdata": _.template($('#imageprocessinggetdata').html()),"imageprocessinggetpixel": _.template($('#imageprocessinggetpixel').html()),"imageprocessingsetpixel": _.template($('#imageprocessingsetpixel').html()),"imageprocessinggetsize": _.template($('#imageprocessinggetsize').html()),"imageprocessingresize": _.template($('#imageprocessingresize').html()),"imageprocessinginsert": _.template($('#imageprocessinginsert').html()),"imageprocessingfind": _.template($('#imageprocessingfind').html()),"imageprocessingfill": _.template($('#imageprocessingfill').html()),"imageprocessingsub": _.template($('#imageprocessingsub').html()),"imageprocessingtext": _.template($('#imageprocessingtext').html()),"InMail_Configure": _.template($('#InMail_Configure').html()),"InMail_Proxy": _.template($('#InMail_Proxy').html()),"InMail_GetLastMessage": _.template($('#InMail_GetLastMessage').html()),"InMail_SearchLast": _.template($('#InMail_SearchLast').html()),"InMail_FindMessage": _.template($('#InMail_FindMessage').html()),"InMail_SearchOne": _.template($('#InMail_SearchOne').html()),"InMail_Search": _.template($('#InMail_Search').html()),"InMail_GetMessage": _.template($('#InMail_GetMessage').html()),"InMail_Count": _.template($('#InMail_Count').html()),"InMail_DelMessages": _.template($('#InMail_DelMessages').html()),"InMail_CopyMessages": _.template($('#InMail_CopyMessages').html()),"InMail_MoveMessages": _.template($('#InMail_MoveMessages').html()),"InMail_GetFlags": _.template($('#InMail_GetFlags').html()),"InMail_SetFlags": _.template($('#InMail_SetFlags').html()),"InMail_DelFlags": _.template($('#InMail_DelFlags').html()),"InMail_GetBoxes": _.template($('#InMail_GetBoxes').html()),"InMail_Status": _.template($('#InMail_Status').html()),"InMail_AddBox": _.template($('#InMail_AddBox').html()),"InMail_RenameBox": _.template($('#InMail_RenameBox').html()),"InMail_DelBox": _.template($('#InMail_DelBox').html()),"InMail_Close": _.template($('#InMail_Close').html()),"InMail_SetDebug": _.template($('#InMail_SetDebug').html()),"JsonCreateObject": _.template($('#JsonCreateObject').html()),"JsonGetValue": _.template($('#JsonGetValue').html()),"JsonGetAllValues": _.template($('#JsonGetAllValues').html()),"JsonGetKey": _.template($('#JsonGetKey').html()),"JsonGetAllKeys": _.template($('#JsonGetAllKeys').html()),"JsonGetCount": _.template($('#JsonGetCount').html()),"JsonChangeValue": _.template($('#JsonChangeValue').html()),"JsonRemoveValue": _.template($('#JsonRemoveValue').html()),"JsonCheckFormat": _.template($('#JsonCheckFormat').html()),"JsonChangeFormat": _.template($('#JsonChangeFormat').html()),"JsonFromString": _.template($('#JsonFromString').html()),"JsonToString": _.template($('#JsonToString').html()),"CreateList": _.template($('#CreateList').html()),"AddElement": _.template($('#AddElement').html()),"GetElementByIndex": _.template($('#GetElementByIndex').html()),"FirstListElement": _.template($('#FirstListElement').html()),"LastListElement": _.template($('#LastListElement').html()),"RandomListElement": _.template($('#RandomListElement').html()),"InsertElement": _.template($('#InsertElement').html()),"ListSetElement": _.template($('#ListSetElement').html()),"DeleteByIndex": _.template($('#DeleteByIndex').html()),"DeleteByValue": _.template($('#DeleteByValue').html()),"ListLength": _.template($('#ListLength').html()),"ListContains": _.template($('#ListContains').html()),"Sublist": _.template($('#Sublist').html()),"RemoveListPart": _.template($('#RemoveListPart').html()),"RemoveDuplicates": _.template($('#RemoveDuplicates').html()),"ListJoin": _.template($('#ListJoin').html()),"ParseStringToList": _.template($('#ParseStringToList').html()),"GetElementIndex": _.template($('#GetElementIndex').html()),"CopyList": _.template($('#CopyList').html()),"ListSort": _.template($('#ListSort').html()),"ShuffleList": _.template($('#ShuffleList').html()),"ListMerge": _.template($('#ListMerge').html()),"ListCompare": _.template($('#ListCompare').html()),"path_base_name": _.template($('#path_base_name').html()),"path_directory_name": _.template($('#path_directory_name').html()),"path_extension_name": _.template($('#path_extension_name').html()),"is_absolute_path": _.template($('#is_absolute_path').html()),"join_paths": _.template($('#join_paths').html()),"normalize_path": _.template($('#normalize_path').html()),"parse_path": _.template($('#parse_path').html()),"script_stats_project_path": _.template($('#script_stats_project_path').html()),"project_directory": _.template($('#project_directory').html()),"installation_path": _.template($('#installation_path').html()),"get_system_path": _.template($('#get_system_path').html()),"SMS_GetNumber": _.template($('#SMS_GetNumber').html()),"SMS_GetCode": _.template($('#SMS_GetCode').html()),"SMS_SetStatus": _.template($('#SMS_SetStatus').html()),"SMS_GetBalance": _.template($('#SMS_GetBalance').html()),"SMS_GetNumbersCount": _.template($('#SMS_GetNumbersCount').html()),"SMS_GetSites": _.template($('#SMS_GetSites').html()),"SMS_GetCountries": _.template($('#SMS_GetCountries').html()),"SMS_Debug": _.template($('#SMS_Debug').html()),"ExecuteProcess": _.template($('#ExecuteProcess').html()),"UseProfile": _.template($('#UseProfile').html()),"StopUsingProfile": _.template($('#StopUsingProfile').html()),"SaveProfile": _.template($('#SaveProfile').html()),"RemoveLocalProfile": _.template($('#RemoveLocalProfile').html()),"GetCurrentProfile": _.template($('#GetCurrentProfile').html()),"RegexpFirst": _.template($('#RegexpFirst').html()),"RegexpScan": _.template($('#RegexpScan').html()),"RegexpMatch": _.template($('#RegexpMatch').html()),"RegexpSplit": _.template($('#RegexpSplit').html()),"RegexpReplace": _.template($('#RegexpReplace').html()),"CreateResource": _.template($('#CreateResource').html()),"DeleteCurrentElement": _.template($('#DeleteCurrentElement').html()),"ResourceAddElement": _.template($('#ResourceAddElement').html()),"GetResouceLocation": _.template($('#GetResouceLocation').html()),"ResourceToArray": _.template($('#ResourceToArray').html()),"ArrayToResource": _.template($('#ArrayToResource').html()),"ResourceReload": _.template($('#ResourceReload').html()),"ResourceLength": _.template($('#ResourceLength').html()),"getthreadnumber": _.template($('#getthreadnumber').html()),"script_stats_success_number": _.template($('#script_stats_success_number').html()),"script_stats_fail_number": _.template($('#script_stats_fail_number').html()),"script_stats_is_record": _.template($('#script_stats_is_record').html()),"smtp_set_settings": _.template($('#smtp_set_settings').html()),"smtp_set_proxy": _.template($('#smtp_set_proxy').html()),"smtp_send_mail": _.template($('#smtp_send_mail').html()),"smtp_enable_debug": _.template($('#smtp_enable_debug').html()),"is_string": _.template($('#is_string').html()),"is_not_empty_string": _.template($('#is_not_empty_string').html()),"to_string": _.template($('#to_string').html()),"to_number": _.template($('#to_number').html()),"number_format": _.template($('#number_format').html()),"count_substrings": _.template($('#count_substrings').html()),"get_substring": _.template($('#get_substring').html()),"get_substring_between": _.template($('#get_substring_between').html()),"remove_string_part": _.template($('#remove_string_part').html()),"to_lower_case": _.template($('#to_lower_case').html()),"to_upper_case": _.template($('#to_upper_case').html()),"string_contains": _.template($('#string_contains').html()),"string_length": _.template($('#string_length').html()),"capitalize_words": _.template($('#capitalize_words').html()),"count_words": _.template($('#count_words').html()),"split_to_words": _.template($('#split_to_words').html()),"split_to_sentences": _.template($('#split_to_sentences').html()),"split_to_lines": _.template($('#split_to_lines').html()),"find_substring": _.template($('#find_substring').html()),"starts_with": _.template($('#starts_with').html()),"ends_with": _.template($('#ends_with').html()),"insert_substring": _.template($('#insert_substring').html()),"base64": _.template($('#base64').html()),"template": _.template($('#template').html()),"replacestring": _.template($('#replacestring').html()),"randomstring": _.template($('#randomstring').html()),"new_line": _.template($('#new_line').html()),"join_strings": _.template($('#join_strings').html()),"latinize": _.template($('#latinize').html()),"declination": _.template($('#declination').html()),"parse_csv_string": _.template($('#parse_csv_string').html()),"create_csv_string": _.template($('#create_csv_string').html()),"trim": _.template($('#trim').html()),"clean": _.template($('#clean').html()),"extract_emails": _.template($('#extract_emails').html()),"extract_urls": _.template($('#extract_urls').html()),"extract_phone_numbers": _.template($('#extract_phone_numbers').html()),"html_special_characters": _.template($('#html_special_characters').html()),"SendMessage": _.template($('#SendMessage').html()),"timezones_set_timezone_and_geolocation_by_ip": _.template($('#timezones_set_timezone_and_geolocation_by_ip').html()),"timezones_set_timezone": _.template($('#timezones_set_timezone').html()),"timezones_set_geolocation": _.template($('#timezones_set_geolocation').html()),"timezones_ip_info": _.template($('#timezones_ip_info').html()),"normalize_url": _.template($('#normalize_url').html()),"parse_url": _.template($('#parse_url').html()),"generate_url": _.template($('#generate_url').html()),"change_url": _.template($('#change_url').html()),"parse_ua": _.template($('#parse_ua').html()),"punycode": _.template($('#punycode').html()),"url_component": _.template($('#url_component').html()),"user_notification_play_sound": _.template($('#user_notification_play_sound').html()),"user_notification_user_input": _.template($('#user_notification_user_input').html()),"user_notification_web_interface_eval": _.template($('#user_notification_web_interface_eval').html()),"user_notification_manual_browser_control": _.template($('#user_notification_manual_browser_control').html()),"XpathXml": _.template($('#XpathXml').html()),"XpathXmlList": _.template($('#XpathXmlList').html()),"XpathText": _.template($('#XpathText').html()),"XpathTextList": _.template($('#XpathTextList').html()),"XpathCount": _.template($('#XpathCount').html()),"XpathExists": _.template($('#XpathExists').html()),"BACKPACK_Approve": _.template($('#BACKPACK_Approve').html()),"BACKPACK_UnlockPassword": _.template($('#BACKPACK_UnlockPassword').html()),"BACKPACK_AddNetworks": _.template($('#BACKPACK_AddNetworks').html()),"BACKPACK_ImportWalletToBACKPACK": _.template($('#BACKPACK_ImportWalletToBACKPACK').html()),"RABBY_RABBY_conect": _.template($('#RABBY_RABBY_conect').html()),"RABBY_RABBY_get_wallet_adress": _.template($('#RABBY_RABBY_get_wallet_adress').html()),"RABBY_RABBY_login": _.template($('#RABBY_RABBY_login').html()),"START_GOOGLEstart": _.template($('#START_GOOGLEstart').html())
        }
        this.model.bind('change:state', (_, state) => {
          if (state === 'main') _Router.navigate('');
          state !== '___none' && BrowserAutomationStudio_TriggerEvent('toolbox.stateChanged', state);
        });
        this.model.bind('change', this.render, this);

        try{
          BrowserAutomationStudio_Initialized();
        }catch(e)
        {}
        this.render();
      },

      render: function(){
        SelectCloseAll();
        _PreserveMainPosition.BeforUrlChanged(this.model.get("state"))
        _MultiSelectManager.BeforUrlChanged(this.model.get("state"))
        var d = this.collection.toJSON();
        if(_Schema && _Schema.length == 0)
        {
          d = d.filter(function(el){
            return !el["show_only_with_database"]
          });
        }
        d = d.filter(function(el) {
          return !["javascript"].includes(el["ref"]);
        });

        var interfacedata = ""
        try
        {
          interfacedata = this.templates[this.model.get("state")]({data:d,unused:_U,model:this.model.toJSON(),selector:_SelectorModel.toJSON(),function_params:CurrentParameters});
        }catch(e)
        {

        }
        if(interfacedata==="")
        {
          interfacedata = '<div style="padding-right:15px;padding-left:15px;">' + tr("Action interface \"") + (_GobalModel.GetPageInfo() || this.model.get("state")) + tr("\" is missing or damaged.") + '<hr style="margin-top:5px;margin-bottom:5px"/><a tabindex="-1" class="btn btn-danger standartbutton tr" href="#!/" id="backtomain">Back</a></div>';
        }

        //Reserve place for action header
        if(this.model.get("state") !== "main")
        {
          interfacedata = "<div id=\"breadcrumbcontainer\" style='height: 36px;'>&nbsp;</div>" + interfacedata
        }

        $("#containerdata").html(interfacedata)
        _Filter.InstallEvents()
        $(".variable-input, .function-input").keypress(OnInputKeyPress)
        tr()
        InitUnfoldTooltip()
        this.updatepath()
        
        $(".search").css("height", window.innerHeight * (100.0 / _Z) - 40 + "px");
        $(".actions").css("height", window.innerHeight * (100.0 / _Z) - 40 + "px");
        $(".leftactionpanel").css("height", window.innerHeight * (100.0 / _Z) - 45 + "px")
        $(".leftactionpaneltitlebody").css("min-height", window.innerHeight * (100.0 / _Z) - 95 + "px")
        $(".actions").css("overflow-y","auto")
        $(".leftactionpanel").css("overflow-y","auto")
        $(".leftactionpanel").css("overflow-x","hidden")
        

        Toolbox.setupTooltips();

        _PreserveMainPosition.AfterUrlChanged(this.model.get("state"))
        _MultiSelectManager.AfterUrlChanged(this.model.get("state"))

        if(CurrentTab == "history")
        {
          BrowserAutomationStudio_RenderHistory();
        }else if (CurrentTab == "bookmarks")
        {
          BrowserAutomationStudio_RenderBookmarks();
        }

        BrowserAutomationStudio_InstallBookmarks();

        BrowserAutomationStudio_TestPathInternal();

        BrowserAutomationStudio_SetExecuteType();

        BasDialogsLib.dropdowns.initialize();

        _SearchManager.initialize();

        SetupConditionalVisibility();

        SelectInitialize();

        $("body").show();
      },

      /*showtooltip: function(e)
      {
        var name = $(e.target).attr("data-name")
        var description = $(e.target).attr("data-description")
        if(typeof(name) != "undefined" && typeof(description) != "undefined")
        {
          $("#tooltip").html("<strong>" + name + "</strong> : " + description)
        }
      },*/
    });

    var Router = Backbone.Router.extend({
        routes: {
            "": "main",
            "!/": "main",
            "!/ok": "ok",
            "!/___none": "___none",
            "!/load": "load",
            "!/navigateback": "navigateback",
            "!/timeout": "timeout",
            "!/type": "type",
            "!/waitload": "waitload",
            "!/waitfullload": "waitfullload",
            "!/waiturl": "waiturl",
            "!/waitcontent": "waitcontent",
            "!/waitcss": "waitcss",
            "!/sleep": "sleep",
            "!/resize": "resize",
            "!/proxy": "proxy",
            "!/move": "move",
            "!/click": "click",
            "!/moveandclick": "moveandclick",
            "!/threadnumber": "threadnumber",
            "!/successnumber": "successnumber",
            "!/failnumber": "failnumber",
            "!/log": "log",
            "!/clearlog": "clearlog",
            "!/url": "url",
            "!/screen": "screen",
            "!/touch": "touch",
            "!/xml": "xml",
            "!/linkurl": "linkurl",
            "!/coordinates": "coordinates",
            "!/text": "text",
            "!/setvariable": "setvariable",
            "!/if": "if",
            "!/while": "while",
            "!/for": "for",
            "!/foreach": "foreach",
            "!/executefunction": "executefunction",
            "!/getfunctionparameter": "getfunctionparameter",
            "!/recaptchav3": "recaptchav3",
            "!/return": "return",
            "!/break": "break",
            "!/continue": "continue",
            "!/fail": "fail",
            "!/success": "success",
            "!/custom": "custom",
            "!/script": "script",
            "!/clickelement": "clickelement",
            "!/moveelement": "moveelement",
            "!/moveandclickelement": "moveandclickelement",
            "!/clear": "clear",
            "!/typeelement": "typeelement",
            "!/exist": "exist",
            "!/style": "style",
            "!/check": "check",
            "!/focus": "focus",
            "!/set": "set",
            "!/set_integer": "set_integer",
            "!/set_random": "set_random",
            "!/attr": "attr",
            "!/set_attr": "set_attr",
            "!/clickextensionbutton": "clickextensionbutton",
            "!/captcha": "captcha",
            "!/screenshot": "screenshot",
            "!/length": "length",
            "!/loopelement": "loopelement",
            "!/clickCaptchaBrowser": "clickCaptchaBrowser",
            "!/solvecaptcha": "solvecaptcha",
            "!/javascript": "javascript",
            "!/reset": "reset",
            "!/openfile": "openfile",
            "!/dragfile": "dragfile",
            //"!/getcookiesforurl": "getcookiesforurl",
            "!/savecookies": "savecookies",
            "!/restorecookies": "restorecookies",
            "!/scroll": "scroll",
            "!/html": "html",
            "!/renderscreen": "renderscreen",
            "!/cachemaskallow": "cachemaskallow",
            "!/cachemaskdeny": "cachemaskdeny",
            "!/cachemaskclear": "cachemaskclear",
            "!/requestmaskallow": "requestmaskallow",
            "!/requestmaskdeny": "requestmaskdeny",
            "!/requestmaskclear": "requestmaskclear",
            "!/cleardata": "cleardata",
            "!/clearmasks": "clearmasks",
            "!/getstatus": "getstatus",
            "!/isloaded": "isloaded",
            "!/getfromcache": "getfromcache",
            "!/getallcache": "getallcache",
            "!/redirectrequests": "redirectrequests",
            "!/replacerequestcontent": "replacerequestcontent",
            "!/replaceresponsecontent": "replaceresponsecontent",
            "!/disablerules": "disablerules",
            "!/getrulestats": "getrulestats",
            "!/result": "result",
            "!/globalset": "globalset",
            "!/globalget": "globalget",
            "!/httpclientproxy": "httpclientproxy",
            "!/httpclientreset": "httpclientreset",
            "!/httpclientdownload": "httpclientdownload",
            "!/httpclientget": "httpclientget",
            "!/httpclientpost": "httpclientpost",
            "!/httpclienturl": "httpclienturl",
            "!/httpclientcontent": "httpclientcontent",
            "!/httpclientstatus": "httpclientstatus",
            "!/httpclientgetheader": "httpclientgetheader",
            "!/httpclientsetheader": "httpclientsetheader",
            "!/httpclientclearheader": "httpclientclearheader",
            //"!/httpclientgetcookiesforurl": "httpclientgetcookiesforurl",
            "!/httpclientsavecookies": "httpclientsavecookies",
            "!/httpclientrestorecookies": "httpclientrestorecookies",
            "!/httpclientfailonerror": "httpclientfailonerror",
            "!/httpclientiserror": "httpclientiserror",
            "!/httpclientgeterrorstring": "httpclientgeterrorstring",
            "!/httpclientxpathxml": "httpclientxpathxml",
            "!/httpclientxpathxmllist": "httpclientxpathxmllist",
            "!/httpclientxpathtext": "httpclientxpathtext",
            "!/httpclientxpathtextlist": "httpclientxpathtextlist",
            "!/httpclientxpathcount": "httpclientxpathcount",
            "!/httpclientxpathexists": "httpclientxpathexists",
            "!/parseline": "parseline",
            "!/waitelement": "waitelement",
            "!/promptresult": "promptresult",
            "!/httpauth": "httpauth",
            "!/solverfailed": "solverfailed",
            "!/browserjavascript": "browserjavascript",
            "!/browserscript": "browserscript",
            "!/onloadjavascript": "onloadjavascript",
            "!/incvariable": "incvariable",
            "!/incglobalvariable": "incglobalvariable",
            "!/ignoreerrors": "ignoreerrors",
            "!/die": "die",
            "!/addtab": "addtab",
            "!/selecttab": "selecttab",
            "!/tabinfo": "tabinfo",
            "!/closetab": "closetab",
            "!/randomint": "randomint",
            "!/drag": "drag",
            "!/drop": "drop",
            "!/dragelement": "dragelement",
            "!/dropelement": "dropelement",
            "!/waitfiledownload": "waitfiledownload",
            "!/loadcookiesfrombrowser": "loadcookiesfrombrowser",
            "!/loadcookiesfromhttpclient": "loadcookiesfromhttpclient",
            "!/closebrowser": "closebrowser",
            "!/openbrowser": "openbrowser",
            "!/label": "label",
            "!/goto": "goto",
            "!/restrictpopups": "restrictpopups",
            "!/allowpopups": "allowpopups",
            "!/restrictdownloads": "restrictdownloads",
            "!/allowdownloads": "allowdownloads",
            "!/setheader": "setheader",
            "!/mousesettings": "mousesettings",
            "!/notification": "notification",

            "!/browsersettings": "browsersettings",
            "!/getbrowserversionlist": "getbrowserversionlist",
            "!/getcurrentbrowserversion": "getcurrentbrowserversion",
            "!/executefunctioninseveralthreads": "executefunctioninseveralthreads"
            ,"!/Checksum_String": "Checksum_String","!/Checksum_File": "Checksum_File","!/Checksum_GetAlgorithmsList": "Checksum_GetAlgorithmsList","!/clickCaptchaElement": "clickCaptchaElement","!/clipboard_getclipboard": "clipboard_getclipboard","!/clipboard_setclipboard": "clipboard_setclipboard","!/Database_GetGroupList": "Database_GetGroupList","!/Database_CreateGroup": "Database_CreateGroup","!/Database_DeleteGroup": "Database_DeleteGroup","!/Database_ChangeGroup": "Database_ChangeGroup","!/Database_CopyGroup": "Database_CopyGroup","!/Database_MoveRecordToGroup": "Database_MoveRecordToGroup","!/Database_InsertRecord": "Database_InsertRecord","!/Database_UpdateRecord": "Database_UpdateRecord","!/Database_UpdateRecordsByCriteria": "Database_UpdateRecordsByCriteria","!/Database_SelectOne": "Database_SelectOne","!/Database_SelectRecords": "Database_SelectRecords","!/Database_DeleteOneRecord": "Database_DeleteOneRecord","!/Database_DeleteRecords": "Database_DeleteRecords","!/Database_CountRecords": "Database_CountRecords","!/datetime_stringtodate": "datetime_stringtodate","!/datetime_datetostring": "datetime_datetostring","!/datetime_msecondstodate": "datetime_msecondstodate","!/datetime_datetomseconds": "datetime_datetomseconds","!/datetime_createdate": "datetime_createdate","!/datetime_changedate": "datetime_changedate","!/datetime_addsecondstodate": "datetime_addsecondstodate","!/datetime_substractdates": "datetime_substractdates","!/datetime_datenow": "datetime_datenow","!/datetime_changetimezone": "datetime_changetimezone","!/datetime_gettimezone": "datetime_gettimezone","!/datetime_dayofmonth": "datetime_dayofmonth","!/datetime_dayofweek": "datetime_dayofweek","!/datetime_dayofyear": "datetime_dayofyear","!/datetime_year": "datetime_year","!/datetime_month": "datetime_month","!/datetime_hour": "datetime_hour","!/datetime_minute": "datetime_minute","!/datetime_second": "datetime_second","!/datetime_millisecond": "datetime_millisecond","!/EmbeddedLanguagesNodeJs": "EmbeddedLanguagesNodeJs","!/filesystem_readfile": "filesystem_readfile","!/filesystem_writefile": "filesystem_writefile","!/filesystem_fileinfo": "filesystem_fileinfo","!/filesystem_createdir": "filesystem_createdir","!/filesystem_removefile": "filesystem_removefile","!/filesystem_movefile": "filesystem_movefile","!/filesystem_copyfile": "filesystem_copyfile","!/filesystem_search": "filesystem_search","!/filesystem_file_to_list": "filesystem_file_to_list","!/filesystem_list_to_file": "filesystem_list_to_file","!/FingerprintSwitcher_Get": "FingerprintSwitcher_Get","!/FingerprintSwitcher_Apply": "FingerprintSwitcher_Apply","!/FingerprintSwitcher_Performance": "FingerprintSwitcher_Performance","!/FingerprintSwitcher_Override": "FingerprintSwitcher_Override","!/FingerprintSwitcher_DisableOverride": "FingerprintSwitcher_DisableOverride","!/asyncfunction_call": "asyncfunction_call","!/asyncfunction_wait": "asyncfunction_wait","!/asyncfunction_result": "asyncfunction_result","!/asyncfunction_stop": "asyncfunction_stop","!/IdleEmulationNew": "IdleEmulationNew","!/IdleEmulationSetGeneralSettings": "IdleEmulationSetGeneralSettings","!/IdleEmulationResetGeneralSettings": "IdleEmulationResetGeneralSettings","!/IdleEmulation": "IdleEmulation","!/IdleEmulationSetDebug": "IdleEmulationSetDebug","!/imageprocessingload": "imageprocessingload","!/imageprocessingdelete": "imageprocessingdelete","!/imageprocessingcreate": "imageprocessingcreate","!/imageprocessingconvert": "imageprocessingconvert","!/imageprocessinggetdata": "imageprocessinggetdata","!/imageprocessinggetpixel": "imageprocessinggetpixel","!/imageprocessingsetpixel": "imageprocessingsetpixel","!/imageprocessinggetsize": "imageprocessinggetsize","!/imageprocessingresize": "imageprocessingresize","!/imageprocessinginsert": "imageprocessinginsert","!/imageprocessingfind": "imageprocessingfind","!/imageprocessingfill": "imageprocessingfill","!/imageprocessingsub": "imageprocessingsub","!/imageprocessingtext": "imageprocessingtext","!/InMail_Configure": "InMail_Configure","!/InMail_Proxy": "InMail_Proxy","!/InMail_GetLastMessage": "InMail_GetLastMessage","!/InMail_SearchLast": "InMail_SearchLast","!/InMail_FindMessage": "InMail_FindMessage","!/InMail_SearchOne": "InMail_SearchOne","!/InMail_Search": "InMail_Search","!/InMail_GetMessage": "InMail_GetMessage","!/InMail_Count": "InMail_Count","!/InMail_DelMessages": "InMail_DelMessages","!/InMail_CopyMessages": "InMail_CopyMessages","!/InMail_MoveMessages": "InMail_MoveMessages","!/InMail_GetFlags": "InMail_GetFlags","!/InMail_SetFlags": "InMail_SetFlags","!/InMail_DelFlags": "InMail_DelFlags","!/InMail_GetBoxes": "InMail_GetBoxes","!/InMail_Status": "InMail_Status","!/InMail_AddBox": "InMail_AddBox","!/InMail_RenameBox": "InMail_RenameBox","!/InMail_DelBox": "InMail_DelBox","!/InMail_Close": "InMail_Close","!/InMail_SetDebug": "InMail_SetDebug","!/JsonCreateObject": "JsonCreateObject","!/JsonGetValue": "JsonGetValue","!/JsonGetAllValues": "JsonGetAllValues","!/JsonGetKey": "JsonGetKey","!/JsonGetAllKeys": "JsonGetAllKeys","!/JsonGetCount": "JsonGetCount","!/JsonChangeValue": "JsonChangeValue","!/JsonRemoveValue": "JsonRemoveValue","!/JsonCheckFormat": "JsonCheckFormat","!/JsonChangeFormat": "JsonChangeFormat","!/JsonFromString": "JsonFromString","!/JsonToString": "JsonToString","!/CreateList": "CreateList","!/AddElement": "AddElement","!/GetElementByIndex": "GetElementByIndex","!/FirstListElement": "FirstListElement","!/LastListElement": "LastListElement","!/RandomListElement": "RandomListElement","!/InsertElement": "InsertElement","!/ListSetElement": "ListSetElement","!/DeleteByIndex": "DeleteByIndex","!/DeleteByValue": "DeleteByValue","!/ListLength": "ListLength","!/ListContains": "ListContains","!/Sublist": "Sublist","!/RemoveListPart": "RemoveListPart","!/RemoveDuplicates": "RemoveDuplicates","!/ListJoin": "ListJoin","!/ParseStringToList": "ParseStringToList","!/GetElementIndex": "GetElementIndex","!/CopyList": "CopyList","!/ListSort": "ListSort","!/ShuffleList": "ShuffleList","!/ListMerge": "ListMerge","!/ListCompare": "ListCompare","!/path_base_name": "path_base_name","!/path_directory_name": "path_directory_name","!/path_extension_name": "path_extension_name","!/is_absolute_path": "is_absolute_path","!/join_paths": "join_paths","!/normalize_path": "normalize_path","!/parse_path": "parse_path","!/script_stats_project_path": "script_stats_project_path","!/project_directory": "project_directory","!/installation_path": "installation_path","!/get_system_path": "get_system_path","!/SMS_GetNumber": "SMS_GetNumber","!/SMS_GetCode": "SMS_GetCode","!/SMS_SetStatus": "SMS_SetStatus","!/SMS_GetBalance": "SMS_GetBalance","!/SMS_GetNumbersCount": "SMS_GetNumbersCount","!/SMS_GetSites": "SMS_GetSites","!/SMS_GetCountries": "SMS_GetCountries","!/SMS_Debug": "SMS_Debug","!/ExecuteProcess": "ExecuteProcess","!/UseProfile": "UseProfile","!/StopUsingProfile": "StopUsingProfile","!/SaveProfile": "SaveProfile","!/RemoveLocalProfile": "RemoveLocalProfile","!/GetCurrentProfile": "GetCurrentProfile","!/RegexpFirst": "RegexpFirst","!/RegexpScan": "RegexpScan","!/RegexpMatch": "RegexpMatch","!/RegexpSplit": "RegexpSplit","!/RegexpReplace": "RegexpReplace","!/CreateResource": "CreateResource","!/DeleteCurrentElement": "DeleteCurrentElement","!/ResourceAddElement": "ResourceAddElement","!/GetResouceLocation": "GetResouceLocation","!/ResourceToArray": "ResourceToArray","!/ArrayToResource": "ArrayToResource","!/ResourceReload": "ResourceReload","!/ResourceLength": "ResourceLength","!/getthreadnumber": "getthreadnumber","!/script_stats_success_number": "script_stats_success_number","!/script_stats_fail_number": "script_stats_fail_number","!/script_stats_is_record": "script_stats_is_record","!/smtp_set_settings": "smtp_set_settings","!/smtp_set_proxy": "smtp_set_proxy","!/smtp_send_mail": "smtp_send_mail","!/smtp_enable_debug": "smtp_enable_debug","!/is_string": "is_string","!/is_not_empty_string": "is_not_empty_string","!/to_string": "to_string","!/to_number": "to_number","!/number_format": "number_format","!/count_substrings": "count_substrings","!/get_substring": "get_substring","!/get_substring_between": "get_substring_between","!/remove_string_part": "remove_string_part","!/to_lower_case": "to_lower_case","!/to_upper_case": "to_upper_case","!/string_contains": "string_contains","!/string_length": "string_length","!/capitalize_words": "capitalize_words","!/count_words": "count_words","!/split_to_words": "split_to_words","!/split_to_sentences": "split_to_sentences","!/split_to_lines": "split_to_lines","!/find_substring": "find_substring","!/starts_with": "starts_with","!/ends_with": "ends_with","!/insert_substring": "insert_substring","!/base64": "base64","!/template": "template","!/replacestring": "replacestring","!/randomstring": "randomstring","!/new_line": "new_line","!/join_strings": "join_strings","!/latinize": "latinize","!/declination": "declination","!/parse_csv_string": "parse_csv_string","!/create_csv_string": "create_csv_string","!/trim": "trim","!/clean": "clean","!/extract_emails": "extract_emails","!/extract_urls": "extract_urls","!/extract_phone_numbers": "extract_phone_numbers","!/html_special_characters": "html_special_characters","!/SendMessage": "SendMessage","!/timezones_set_timezone_and_geolocation_by_ip": "timezones_set_timezone_and_geolocation_by_ip","!/timezones_set_timezone": "timezones_set_timezone","!/timezones_set_geolocation": "timezones_set_geolocation","!/timezones_ip_info": "timezones_ip_info","!/normalize_url": "normalize_url","!/parse_url": "parse_url","!/generate_url": "generate_url","!/change_url": "change_url","!/parse_ua": "parse_ua","!/punycode": "punycode","!/url_component": "url_component","!/user_notification_play_sound": "user_notification_play_sound","!/user_notification_user_input": "user_notification_user_input","!/user_notification_web_interface_eval": "user_notification_web_interface_eval","!/user_notification_manual_browser_control": "user_notification_manual_browser_control","!/XpathXml": "XpathXml","!/XpathXmlList": "XpathXmlList","!/XpathText": "XpathText","!/XpathTextList": "XpathTextList","!/XpathCount": "XpathCount","!/XpathExists": "XpathExists","!/BACKPACK_Approve": "BACKPACK_Approve","!/BACKPACK_UnlockPassword": "BACKPACK_UnlockPassword","!/BACKPACK_AddNetworks": "BACKPACK_AddNetworks","!/BACKPACK_ImportWalletToBACKPACK": "BACKPACK_ImportWalletToBACKPACK","!/RABBY_RABBY_conect": "RABBY_RABBY_conect","!/RABBY_RABBY_get_wallet_adress": "RABBY_RABBY_get_wallet_adress","!/RABBY_RABBY_login": "RABBY_RABBY_login","!/START_GOOGLEstart": "START_GOOGLEstart"
        },

        main: function () {
          CurrentGroup = ""
          _GobalModel.set({ state: "main" });
          
        },
        timeout: function () {
          _GobalModel.set({ state: "timeout" });
        },
        ___none: function () {
          _GobalModel.set({ state: "___none" });
        },
        load: function () {
          _GobalModel.set({ state: "load" });
        },
        navigateback: function () {
          _GobalModel.set({ state: "navigateback" });
        },
        type: function () {
          _GobalModel.set({ state: "type" });
        },
        waitload: function () {
          _GobalModel.set({ state: "waitload" });
        },
        waitfullload: function () {
          _GobalModel.set({ state: "waitfullload" });
        },
        waiturl: function () {
          _GobalModel.set({ state: "waiturl" });
        },
        waitcontent: function () {
          _GobalModel.set({ state: "waitcontent" });
        },
        waitcss: function () {
          _GobalModel.set({ state: "waitcss" });
        },
        sleep: function () {
          _GobalModel.set({ state: "sleep" });
        },
        resize: function () {
          _GobalModel.set({ state: "resize" });
        },
        proxy: function () {
          _GobalModel.set({ state: "proxy" });
        },
        move: function () {
          _GobalModel.set({ state: "move" });
        },
        click: function () {
          _GobalModel.set({ state: "click" });
        },
        moveandclick: function () {
          _GobalModel.set({ state: "moveandclick" });
        },
        threadnumber: function () {
          _GobalModel.set({ state: "threadnumber" });
        },
        successnumber: function () {
          _GobalModel.set({ state: "successnumber" });
        },
        failnumber: function () {
          _GobalModel.set({ state: "failnumber" });
        },
        log: function () {
          _GobalModel.set({ state: "log" });
        },
        clearlog: function () {
          _GobalModel.set({ state: "clearlog" });
        },
        url: function () {
          _GobalModel.set({ state: "url" });
        },
        screen: function () {
          _GobalModel.set({ state: "screen" });
        },
        touch: function () {
          _GobalModel.set({ state: "touch" });
        },
        xml: function () {
          _GobalModel.set({ state: "xml" });
        },
        linkurl: function () {
          _GobalModel.set({ state: "linkurl" });
        },
        coordinates: function () {
          _GobalModel.set({ state: "coordinates" });
        },
        text: function () {
          _GobalModel.set({ state: "text" });
        },
        setvariable: function () {
          _GobalModel.set({ state: "setvariable" });
        },
        if: function () {
          _GobalModel.set({ state: "if" });
        },
        while: function () {
          _GobalModel.set({ state: "while" });
        },
        for: function () {
          _GobalModel.set({ state: "for" });
        },
        foreach: function () {
          _GobalModel.set({ state: "foreach" });
        },
        executefunction: function(){
          _GobalModel.set({ state: "executefunction" });
        },
        return: function(){
          _GobalModel.set({ state: "return" });
        },
        getfunctionparameter: function(){
          _GobalModel.set({ state: "getfunctionparameter" });
        },
        recaptchav3: function(){
          _GobalModel.set({ state: "recaptchav3" });
        },
        break: function(){
          _GobalModel.set({ state: "break" });
        },
        continue: function(){
          _GobalModel.set({ state: "continue" });
        },
        success: function(){
          _GobalModel.set({ state: "success" });
        },
        fail: function(){
          _GobalModel.set({ state: "fail" });
        },
        custom: function(){
          _GobalModel.set({ state: "custom" });
        },
        script: function(){
          _GobalModel.set({ state: "script" });
        },
        clickelement: function(){
          _GobalModel.set({ state: "clickelement" });
        },
        moveelement: function(){
          _GobalModel.set({ state: "moveelement" });
        },
        moveandclickelement: function(){
          _GobalModel.set({ state: "moveandclickelement" });
        },
        clear: function(){
          _GobalModel.set({ state: "clear" });
        },
        typeelement: function(){
          _GobalModel.set({ state: "typeelement" });
        },
        exist: function(){
          _GobalModel.set({ state: "exist" });
        },
        style: function(){
          _GobalModel.set({ state: "style" });
        },
        check: function(){
          _GobalModel.set({ state: "check" });
        },
        focus: function(){
          _GobalModel.set({ state: "focus" });
        },
        set: function(){
          _GobalModel.set({ state: "set" });
        },
        set_integer: function(){
          _GobalModel.set({ state: "set_integer" });
        },
        set_random: function(){
          _GobalModel.set({ state: "set_random" });
        },
        attr: function(){
          _GobalModel.set({ state: "attr" });
        },
        set_attr: function(){
          _GobalModel.set({ state: "set_attr" });
        },
        clickextensionbutton: function(){
          _GobalModel.set({ state: "clickextensionbutton" });
        },
        captcha: function(){
          _GobalModel.set({ state: "captcha" });
        },
        screenshot: function(){
          _GobalModel.set({ state: "screenshot" });
        },
        length: function(){
          _GobalModel.set({ state: "length" });
        },
        loopelement: function(){
          _GobalModel.set({ state: "loopelement" });
        },
        clickCaptchaBrowser: function () {
          _GobalModel.set({ state: "clickCaptchaBrowser" });
        },
        solvecaptcha: function(){
                  _GobalModel.set({ state: "solvecaptcha" });
                },
        javascript: function(){
                  _GobalModel.set({ state: "javascript" });
                },
        reset: function(){
                  _GobalModel.set({ state: "reset" });
                },
        openfile: function(){
                  _GobalModel.set({ state: "openfile" });
                },
        dragfile: function(){
                  _GobalModel.set({ state: "dragfile" });
                },
        /*getcookiesforurl: function(){
                  _GobalModel.set({ state: "getcookiesforurl" });
                },*/
        savecookies: function(){
                  _GobalModel.set({ state: "savecookies" });
                },
        restorecookies: function(){
                  _GobalModel.set({ state: "restorecookies" });
                },
        scroll: function(){
                  _GobalModel.set({ state: "scroll" });
                },
        html: function(){
                  _GobalModel.set({ state: "html" });
                },
        renderscreen: function(){
                  _GobalModel.set({ state: "renderscreen" });
                },
        cachemaskallow: function(){
                  _GobalModel.set({ state: "cachemaskallow" });
                },
        cachemaskdeny: function(){
                  _GobalModel.set({ state: "cachemaskdeny" });
                },
        cachemaskclear: function(){
                  _GobalModel.set({ state: "cachemaskclear" });
                },
        requestmaskallow: function(){
                  _GobalModel.set({ state: "requestmaskallow" });
                },
        requestmaskdeny: function(){
                  _GobalModel.set({ state: "requestmaskdeny" });
                },
        requestmaskclear: function(){
                  _GobalModel.set({ state: "requestmaskclear" });
                },
        cleardata: function(){
                  _GobalModel.set({ state: "cleardata" });
                },
        clearmasks: function(){
                  _GobalModel.set({ state: "clearmasks" });
                },
        getstatus: function(){
                  _GobalModel.set({ state: "getstatus" });
                },
        isloaded: function(){
                  _GobalModel.set({ state: "isloaded" });
                },
        getfromcache: function(){
                  _GobalModel.set({ state: "getfromcache" });
                },
        getallcache: function(){
                  _GobalModel.set({ state: "getallcache" });
                },
        redirectrequests: function(){
                  _GobalModel.set({ state: "redirectrequests" });
                },
        replacerequestcontent: function(){
                  _GobalModel.set({ state: "replacerequestcontent" });
                },
        replaceresponsecontent: function(){
                  _GobalModel.set({ state: "replaceresponsecontent" });
                },
        disablerules: function(){
                  _GobalModel.set({ state: "disablerules" });
                },
        getrulestats: function(){
                  _GobalModel.set({ state: "getrulestats" });
                },
        result: function(){
                  _GobalModel.set({ state: "result" });
                },
        globalset: function(){
                  _GobalModel.set({ state: "globalset" });
                },
        globalget: function(){
                  _GobalModel.set({ state: "globalget" });
                },
        httpclientproxy: function(){
                  _GobalModel.set({ state: "httpclientproxy" });
                },
        httpclientreset: function(){
                  _GobalModel.set({ state: "httpclientreset" });
                },
        httpclientdownload: function(){
                  _GobalModel.set({ state: "httpclientdownload" });
                },
        httpclientget: function(){
                  _GobalModel.set({ state: "httpclientget" });
                },
        httpclientpost: function(){
                  _GobalModel.set({ state: "httpclientpost" });
                },
        httpclienturl: function(){
                  _GobalModel.set({ state: "httpclienturl" });
                },
        httpclientcontent: function(){
                  _GobalModel.set({ state: "httpclientcontent" });
                },
        httpclientstatus: function(){
                  _GobalModel.set({ state: "httpclientstatus" });
                },
        httpclientgetheader: function(){
                  _GobalModel.set({ state: "httpclientgetheader" });
                },
        httpclientsetheader: function(){
                  _GobalModel.set({ state: "httpclientsetheader" });
                },
        httpclientclearheader: function(){
                  _GobalModel.set({ state: "httpclientclearheader" });
                },
        /*httpclientgetcookiesforurl: function(){
                  _GobalModel.set({ state: "httpclientgetcookiesforurl" });
                },*/
        httpclientsavecookies: function(){
                  _GobalModel.set({ state: "httpclientsavecookies" });
                },
        httpclientrestorecookies: function(){
                  _GobalModel.set({ state: "httpclientrestorecookies" });
                },
        httpclientfailonerror: function(){
                  _GobalModel.set({ state: "httpclientfailonerror" });
                },
        httpclientiserror: function(){
                  _GobalModel.set({ state: "httpclientiserror" });
                },
        httpclientgeterrorstring: function(){
                  _GobalModel.set({ state: "httpclientgeterrorstring" });
                },
        httpclientxpathxml: function(){
                  _GobalModel.set({ state: "httpclientxpathxml" });
                },
        httpclientxpathxmllist: function(){
                  _GobalModel.set({ state: "httpclientxpathxmllist" });
                },
        httpclientxpathtext: function(){
                  _GobalModel.set({ state: "httpclientxpathtext" });
                },
        httpclientxpathtextlist: function(){
                  _GobalModel.set({ state: "httpclientxpathtextlist" });
                },
        httpclientxpathcount: function(){
                  _GobalModel.set({ state: "httpclientxpathcount" });
                },
        httpclientxpathexists: function(){
                  _GobalModel.set({ state: "httpclientxpathexists" });
                },
        parseline: function(){
                  _GobalModel.set({ state: "parseline" });
                },
        waitelement: function(){
                  _GobalModel.set({ state: "waitelement" });
                },
        promptresult: function(){
                  _GobalModel.set({ state: "promptresult" });
                },
        httpauth: function(){
                  _GobalModel.set({ state: "httpauth" });
                },
        solverfailed: function(){
          _GobalModel.set({ state: "solverfailed" });
        },
        browserjavascript: function(){
          _GobalModel.set({ state: "browserjavascript" });
        },
        browserscript: function(){
          _GobalModel.set({ state: "browserscript" });
        },
        onloadjavascript: function(){
          _GobalModel.set({ state: "onloadjavascript" });
        },
        incvariable: function(){
          _GobalModel.set({ state: "incvariable" });
        },
        incglobalvariable: function(){
          _GobalModel.set({ state: "incglobalvariable" });
        },
        ignoreerrors: function(){
          _GobalModel.set({ state: "ignoreerrors" });
        },
        die: function(){
          _GobalModel.set({ state: "die" });
        },
        randomint: function(){
          _GobalModel.set({ state: "randomint" });
        }
        ,
        addtab: function(){
          _GobalModel.set({ state: "addtab" });
        }
        ,
        selecttab: function(){
          _GobalModel.set({ state: "selecttab" });
        },
        tabinfo: function(){
          _GobalModel.set({ state: "tabinfo" });
        }
        ,closetab: function(){
          _GobalModel.set({ state: "closetab" });
        }
        ,drag: function(){
          _GobalModel.set({ state: "drag" });
        }
        ,drop: function(){
          _GobalModel.set({ state: "drop" });
        }
        ,dragelement: function(){
          _GobalModel.set({ state: "dragelement" });
        }
        ,dropelement: function(){
          _GobalModel.set({ state: "dropelement" });
        },
        waitfiledownload: function(){
          _GobalModel.set({ state: "waitfiledownload" });
        },
        loadcookiesfrombrowser: function(){
          _GobalModel.set({ state: "loadcookiesfrombrowser" });
        },
        loadcookiesfromhttpclient: function(){
          _GobalModel.set({ state: "loadcookiesfromhttpclient" });
        },openbrowser: function(){
          _GobalModel.set({ state: "openbrowser" });
        }
        ,closebrowser: function(){
          _GobalModel.set({ state: "closebrowser" });
        }
        ,label: function(){
          _GobalModel.set({ state: "label" });
        }
        ,goto: function(){

          _GobalModel.set({ state: "goto" });
          BrowserAutomationStudio_FillGotoLabels()
            
        }
        ,restrictpopups: function(){
          _GobalModel.set({ state: "restrictpopups" });
        }
        ,allowpopups: function(){
          _GobalModel.set({ state: "allowpopups" });
        }
        ,restrictdownloads: function(){
          _GobalModel.set({ state: "restrictdownloads" });
        }
        ,allowdownloads: function(){
          _GobalModel.set({ state: "allowdownloads" });
        }
        ,setheader: function(){
          _GobalModel.set({ state: "setheader" });
        }
        ,mousesettings: function(){
          _GobalModel.set({ state: "mousesettings" });
        }
        ,notification: function(){
          _GobalModel.set({ state: "notification" });
        }
        ,browsersettings: function(){
          _GobalModel.set({ state: "browsersettings" });
        }
        ,getbrowserversionlist: function(){
          _GobalModel.set({ state: "getbrowserversionlist" });
        },
        getcurrentbrowserversion: function(){
          _GobalModel.set({ state: "getcurrentbrowserversion" });
        },
        executefunctioninseveralthreads: function(){
          _GobalModel.set({ state: "executefunctioninseveralthreads" });
        }
        ,Checksum_String: function(){ _GobalModel.set({ state: "Checksum_String" }); },Checksum_File: function(){ _GobalModel.set({ state: "Checksum_File" }); },Checksum_GetAlgorithmsList: function(){ _GobalModel.set({ state: "Checksum_GetAlgorithmsList" }); },clickCaptchaElement: function(){ _GobalModel.set({ state: "clickCaptchaElement" }); },clipboard_getclipboard: function(){ _GobalModel.set({ state: "clipboard_getclipboard" }); },clipboard_setclipboard: function(){ _GobalModel.set({ state: "clipboard_setclipboard" }); },Database_GetGroupList: function(){ _GobalModel.set({ state: "Database_GetGroupList" }); },Database_CreateGroup: function(){ _GobalModel.set({ state: "Database_CreateGroup" }); },Database_DeleteGroup: function(){ _GobalModel.set({ state: "Database_DeleteGroup" }); },Database_ChangeGroup: function(){ _GobalModel.set({ state: "Database_ChangeGroup" }); },Database_CopyGroup: function(){ _GobalModel.set({ state: "Database_CopyGroup" }); },Database_MoveRecordToGroup: function(){ _GobalModel.set({ state: "Database_MoveRecordToGroup" }); },Database_InsertRecord: function(){ _GobalModel.set({ state: "Database_InsertRecord" }); },Database_UpdateRecord: function(){ _GobalModel.set({ state: "Database_UpdateRecord" }); },Database_UpdateRecordsByCriteria: function(){ _GobalModel.set({ state: "Database_UpdateRecordsByCriteria" }); },Database_SelectOne: function(){ _GobalModel.set({ state: "Database_SelectOne" }); },Database_SelectRecords: function(){ _GobalModel.set({ state: "Database_SelectRecords" }); },Database_DeleteOneRecord: function(){ _GobalModel.set({ state: "Database_DeleteOneRecord" }); },Database_DeleteRecords: function(){ _GobalModel.set({ state: "Database_DeleteRecords" }); },Database_CountRecords: function(){ _GobalModel.set({ state: "Database_CountRecords" }); },datetime_stringtodate: function(){ _GobalModel.set({ state: "datetime_stringtodate" }); },datetime_datetostring: function(){ _GobalModel.set({ state: "datetime_datetostring" }); },datetime_msecondstodate: function(){ _GobalModel.set({ state: "datetime_msecondstodate" }); },datetime_datetomseconds: function(){ _GobalModel.set({ state: "datetime_datetomseconds" }); },datetime_createdate: function(){ _GobalModel.set({ state: "datetime_createdate" }); },datetime_changedate: function(){ _GobalModel.set({ state: "datetime_changedate" }); },datetime_addsecondstodate: function(){ _GobalModel.set({ state: "datetime_addsecondstodate" }); },datetime_substractdates: function(){ _GobalModel.set({ state: "datetime_substractdates" }); },datetime_datenow: function(){ _GobalModel.set({ state: "datetime_datenow" }); },datetime_changetimezone: function(){ _GobalModel.set({ state: "datetime_changetimezone" }); },datetime_gettimezone: function(){ _GobalModel.set({ state: "datetime_gettimezone" }); },datetime_dayofmonth: function(){ _GobalModel.set({ state: "datetime_dayofmonth" }); },datetime_dayofweek: function(){ _GobalModel.set({ state: "datetime_dayofweek" }); },datetime_dayofyear: function(){ _GobalModel.set({ state: "datetime_dayofyear" }); },datetime_year: function(){ _GobalModel.set({ state: "datetime_year" }); },datetime_month: function(){ _GobalModel.set({ state: "datetime_month" }); },datetime_hour: function(){ _GobalModel.set({ state: "datetime_hour" }); },datetime_minute: function(){ _GobalModel.set({ state: "datetime_minute" }); },datetime_second: function(){ _GobalModel.set({ state: "datetime_second" }); },datetime_millisecond: function(){ _GobalModel.set({ state: "datetime_millisecond" }); },EmbeddedLanguagesNodeJs: function(){ _GobalModel.set({ state: "EmbeddedLanguagesNodeJs" }); },filesystem_readfile: function(){ _GobalModel.set({ state: "filesystem_readfile" }); },filesystem_writefile: function(){ _GobalModel.set({ state: "filesystem_writefile" }); },filesystem_fileinfo: function(){ _GobalModel.set({ state: "filesystem_fileinfo" }); },filesystem_createdir: function(){ _GobalModel.set({ state: "filesystem_createdir" }); },filesystem_removefile: function(){ _GobalModel.set({ state: "filesystem_removefile" }); },filesystem_movefile: function(){ _GobalModel.set({ state: "filesystem_movefile" }); },filesystem_copyfile: function(){ _GobalModel.set({ state: "filesystem_copyfile" }); },filesystem_search: function(){ _GobalModel.set({ state: "filesystem_search" }); },filesystem_file_to_list: function(){ _GobalModel.set({ state: "filesystem_file_to_list" }); },filesystem_list_to_file: function(){ _GobalModel.set({ state: "filesystem_list_to_file" }); },FingerprintSwitcher_Get: function(){ _GobalModel.set({ state: "FingerprintSwitcher_Get" }); },FingerprintSwitcher_Apply: function(){ _GobalModel.set({ state: "FingerprintSwitcher_Apply" }); },FingerprintSwitcher_Performance: function(){ _GobalModel.set({ state: "FingerprintSwitcher_Performance" }); },FingerprintSwitcher_Override: function(){ _GobalModel.set({ state: "FingerprintSwitcher_Override" }); },FingerprintSwitcher_DisableOverride: function(){ _GobalModel.set({ state: "FingerprintSwitcher_DisableOverride" }); },asyncfunction_call: function(){ _GobalModel.set({ state: "asyncfunction_call" }); },asyncfunction_wait: function(){ _GobalModel.set({ state: "asyncfunction_wait" }); },asyncfunction_result: function(){ _GobalModel.set({ state: "asyncfunction_result" }); },asyncfunction_stop: function(){ _GobalModel.set({ state: "asyncfunction_stop" }); },IdleEmulationNew: function(){ _GobalModel.set({ state: "IdleEmulationNew" }); },IdleEmulationSetGeneralSettings: function(){ _GobalModel.set({ state: "IdleEmulationSetGeneralSettings" }); },IdleEmulationResetGeneralSettings: function(){ _GobalModel.set({ state: "IdleEmulationResetGeneralSettings" }); },IdleEmulation: function(){ _GobalModel.set({ state: "IdleEmulation" }); },IdleEmulationSetDebug: function(){ _GobalModel.set({ state: "IdleEmulationSetDebug" }); },imageprocessingload: function(){ _GobalModel.set({ state: "imageprocessingload" }); },imageprocessingdelete: function(){ _GobalModel.set({ state: "imageprocessingdelete" }); },imageprocessingcreate: function(){ _GobalModel.set({ state: "imageprocessingcreate" }); },imageprocessingconvert: function(){ _GobalModel.set({ state: "imageprocessingconvert" }); },imageprocessinggetdata: function(){ _GobalModel.set({ state: "imageprocessinggetdata" }); },imageprocessinggetpixel: function(){ _GobalModel.set({ state: "imageprocessinggetpixel" }); },imageprocessingsetpixel: function(){ _GobalModel.set({ state: "imageprocessingsetpixel" }); },imageprocessinggetsize: function(){ _GobalModel.set({ state: "imageprocessinggetsize" }); },imageprocessingresize: function(){ _GobalModel.set({ state: "imageprocessingresize" }); },imageprocessinginsert: function(){ _GobalModel.set({ state: "imageprocessinginsert" }); },imageprocessingfind: function(){ _GobalModel.set({ state: "imageprocessingfind" }); },imageprocessingfill: function(){ _GobalModel.set({ state: "imageprocessingfill" }); },imageprocessingsub: function(){ _GobalModel.set({ state: "imageprocessingsub" }); },imageprocessingtext: function(){ _GobalModel.set({ state: "imageprocessingtext" }); },InMail_Configure: function(){ _GobalModel.set({ state: "InMail_Configure" }); },InMail_Proxy: function(){ _GobalModel.set({ state: "InMail_Proxy" }); },InMail_GetLastMessage: function(){ _GobalModel.set({ state: "InMail_GetLastMessage" }); },InMail_SearchLast: function(){ _GobalModel.set({ state: "InMail_SearchLast" }); },InMail_FindMessage: function(){ _GobalModel.set({ state: "InMail_FindMessage" }); },InMail_SearchOne: function(){ _GobalModel.set({ state: "InMail_SearchOne" }); },InMail_Search: function(){ _GobalModel.set({ state: "InMail_Search" }); },InMail_GetMessage: function(){ _GobalModel.set({ state: "InMail_GetMessage" }); },InMail_Count: function(){ _GobalModel.set({ state: "InMail_Count" }); },InMail_DelMessages: function(){ _GobalModel.set({ state: "InMail_DelMessages" }); },InMail_CopyMessages: function(){ _GobalModel.set({ state: "InMail_CopyMessages" }); },InMail_MoveMessages: function(){ _GobalModel.set({ state: "InMail_MoveMessages" }); },InMail_GetFlags: function(){ _GobalModel.set({ state: "InMail_GetFlags" }); },InMail_SetFlags: function(){ _GobalModel.set({ state: "InMail_SetFlags" }); },InMail_DelFlags: function(){ _GobalModel.set({ state: "InMail_DelFlags" }); },InMail_GetBoxes: function(){ _GobalModel.set({ state: "InMail_GetBoxes" }); },InMail_Status: function(){ _GobalModel.set({ state: "InMail_Status" }); },InMail_AddBox: function(){ _GobalModel.set({ state: "InMail_AddBox" }); },InMail_RenameBox: function(){ _GobalModel.set({ state: "InMail_RenameBox" }); },InMail_DelBox: function(){ _GobalModel.set({ state: "InMail_DelBox" }); },InMail_Close: function(){ _GobalModel.set({ state: "InMail_Close" }); },InMail_SetDebug: function(){ _GobalModel.set({ state: "InMail_SetDebug" }); },JsonCreateObject: function(){ _GobalModel.set({ state: "JsonCreateObject" }); },JsonGetValue: function(){ _GobalModel.set({ state: "JsonGetValue" }); },JsonGetAllValues: function(){ _GobalModel.set({ state: "JsonGetAllValues" }); },JsonGetKey: function(){ _GobalModel.set({ state: "JsonGetKey" }); },JsonGetAllKeys: function(){ _GobalModel.set({ state: "JsonGetAllKeys" }); },JsonGetCount: function(){ _GobalModel.set({ state: "JsonGetCount" }); },JsonChangeValue: function(){ _GobalModel.set({ state: "JsonChangeValue" }); },JsonRemoveValue: function(){ _GobalModel.set({ state: "JsonRemoveValue" }); },JsonCheckFormat: function(){ _GobalModel.set({ state: "JsonCheckFormat" }); },JsonChangeFormat: function(){ _GobalModel.set({ state: "JsonChangeFormat" }); },JsonFromString: function(){ _GobalModel.set({ state: "JsonFromString" }); },JsonToString: function(){ _GobalModel.set({ state: "JsonToString" }); },CreateList: function(){ _GobalModel.set({ state: "CreateList" }); },AddElement: function(){ _GobalModel.set({ state: "AddElement" }); },GetElementByIndex: function(){ _GobalModel.set({ state: "GetElementByIndex" }); },FirstListElement: function(){ _GobalModel.set({ state: "FirstListElement" }); },LastListElement: function(){ _GobalModel.set({ state: "LastListElement" }); },RandomListElement: function(){ _GobalModel.set({ state: "RandomListElement" }); },InsertElement: function(){ _GobalModel.set({ state: "InsertElement" }); },ListSetElement: function(){ _GobalModel.set({ state: "ListSetElement" }); },DeleteByIndex: function(){ _GobalModel.set({ state: "DeleteByIndex" }); },DeleteByValue: function(){ _GobalModel.set({ state: "DeleteByValue" }); },ListLength: function(){ _GobalModel.set({ state: "ListLength" }); },ListContains: function(){ _GobalModel.set({ state: "ListContains" }); },Sublist: function(){ _GobalModel.set({ state: "Sublist" }); },RemoveListPart: function(){ _GobalModel.set({ state: "RemoveListPart" }); },RemoveDuplicates: function(){ _GobalModel.set({ state: "RemoveDuplicates" }); },ListJoin: function(){ _GobalModel.set({ state: "ListJoin" }); },ParseStringToList: function(){ _GobalModel.set({ state: "ParseStringToList" }); },GetElementIndex: function(){ _GobalModel.set({ state: "GetElementIndex" }); },CopyList: function(){ _GobalModel.set({ state: "CopyList" }); },ListSort: function(){ _GobalModel.set({ state: "ListSort" }); },ShuffleList: function(){ _GobalModel.set({ state: "ShuffleList" }); },ListMerge: function(){ _GobalModel.set({ state: "ListMerge" }); },ListCompare: function(){ _GobalModel.set({ state: "ListCompare" }); },path_base_name: function(){ _GobalModel.set({ state: "path_base_name" }); },path_directory_name: function(){ _GobalModel.set({ state: "path_directory_name" }); },path_extension_name: function(){ _GobalModel.set({ state: "path_extension_name" }); },is_absolute_path: function(){ _GobalModel.set({ state: "is_absolute_path" }); },join_paths: function(){ _GobalModel.set({ state: "join_paths" }); },normalize_path: function(){ _GobalModel.set({ state: "normalize_path" }); },parse_path: function(){ _GobalModel.set({ state: "parse_path" }); },script_stats_project_path: function(){ _GobalModel.set({ state: "script_stats_project_path" }); },project_directory: function(){ _GobalModel.set({ state: "project_directory" }); },installation_path: function(){ _GobalModel.set({ state: "installation_path" }); },get_system_path: function(){ _GobalModel.set({ state: "get_system_path" }); },SMS_GetNumber: function(){ _GobalModel.set({ state: "SMS_GetNumber" }); },SMS_GetCode: function(){ _GobalModel.set({ state: "SMS_GetCode" }); },SMS_SetStatus: function(){ _GobalModel.set({ state: "SMS_SetStatus" }); },SMS_GetBalance: function(){ _GobalModel.set({ state: "SMS_GetBalance" }); },SMS_GetNumbersCount: function(){ _GobalModel.set({ state: "SMS_GetNumbersCount" }); },SMS_GetSites: function(){ _GobalModel.set({ state: "SMS_GetSites" }); },SMS_GetCountries: function(){ _GobalModel.set({ state: "SMS_GetCountries" }); },SMS_Debug: function(){ _GobalModel.set({ state: "SMS_Debug" }); },ExecuteProcess: function(){ _GobalModel.set({ state: "ExecuteProcess" }); },UseProfile: function(){ _GobalModel.set({ state: "UseProfile" }); },StopUsingProfile: function(){ _GobalModel.set({ state: "StopUsingProfile" }); },SaveProfile: function(){ _GobalModel.set({ state: "SaveProfile" }); },RemoveLocalProfile: function(){ _GobalModel.set({ state: "RemoveLocalProfile" }); },GetCurrentProfile: function(){ _GobalModel.set({ state: "GetCurrentProfile" }); },RegexpFirst: function(){ _GobalModel.set({ state: "RegexpFirst" }); },RegexpScan: function(){ _GobalModel.set({ state: "RegexpScan" }); },RegexpMatch: function(){ _GobalModel.set({ state: "RegexpMatch" }); },RegexpSplit: function(){ _GobalModel.set({ state: "RegexpSplit" }); },RegexpReplace: function(){ _GobalModel.set({ state: "RegexpReplace" }); },CreateResource: function(){ _GobalModel.set({ state: "CreateResource" }); },DeleteCurrentElement: function(){ _GobalModel.set({ state: "DeleteCurrentElement" }); },ResourceAddElement: function(){ _GobalModel.set({ state: "ResourceAddElement" }); },GetResouceLocation: function(){ _GobalModel.set({ state: "GetResouceLocation" }); },ResourceToArray: function(){ _GobalModel.set({ state: "ResourceToArray" }); },ArrayToResource: function(){ _GobalModel.set({ state: "ArrayToResource" }); },ResourceReload: function(){ _GobalModel.set({ state: "ResourceReload" }); },ResourceLength: function(){ _GobalModel.set({ state: "ResourceLength" }); },getthreadnumber: function(){ _GobalModel.set({ state: "getthreadnumber" }); },script_stats_success_number: function(){ _GobalModel.set({ state: "script_stats_success_number" }); },script_stats_fail_number: function(){ _GobalModel.set({ state: "script_stats_fail_number" }); },script_stats_is_record: function(){ _GobalModel.set({ state: "script_stats_is_record" }); },smtp_set_settings: function(){ _GobalModel.set({ state: "smtp_set_settings" }); },smtp_set_proxy: function(){ _GobalModel.set({ state: "smtp_set_proxy" }); },smtp_send_mail: function(){ _GobalModel.set({ state: "smtp_send_mail" }); },smtp_enable_debug: function(){ _GobalModel.set({ state: "smtp_enable_debug" }); },is_string: function(){ _GobalModel.set({ state: "is_string" }); },is_not_empty_string: function(){ _GobalModel.set({ state: "is_not_empty_string" }); },to_string: function(){ _GobalModel.set({ state: "to_string" }); },to_number: function(){ _GobalModel.set({ state: "to_number" }); },number_format: function(){ _GobalModel.set({ state: "number_format" }); },count_substrings: function(){ _GobalModel.set({ state: "count_substrings" }); },get_substring: function(){ _GobalModel.set({ state: "get_substring" }); },get_substring_between: function(){ _GobalModel.set({ state: "get_substring_between" }); },remove_string_part: function(){ _GobalModel.set({ state: "remove_string_part" }); },to_lower_case: function(){ _GobalModel.set({ state: "to_lower_case" }); },to_upper_case: function(){ _GobalModel.set({ state: "to_upper_case" }); },string_contains: function(){ _GobalModel.set({ state: "string_contains" }); },string_length: function(){ _GobalModel.set({ state: "string_length" }); },capitalize_words: function(){ _GobalModel.set({ state: "capitalize_words" }); },count_words: function(){ _GobalModel.set({ state: "count_words" }); },split_to_words: function(){ _GobalModel.set({ state: "split_to_words" }); },split_to_sentences: function(){ _GobalModel.set({ state: "split_to_sentences" }); },split_to_lines: function(){ _GobalModel.set({ state: "split_to_lines" }); },find_substring: function(){ _GobalModel.set({ state: "find_substring" }); },starts_with: function(){ _GobalModel.set({ state: "starts_with" }); },ends_with: function(){ _GobalModel.set({ state: "ends_with" }); },insert_substring: function(){ _GobalModel.set({ state: "insert_substring" }); },base64: function(){ _GobalModel.set({ state: "base64" }); },template: function(){ _GobalModel.set({ state: "template" }); },replacestring: function(){ _GobalModel.set({ state: "replacestring" }); },randomstring: function(){ _GobalModel.set({ state: "randomstring" }); },new_line: function(){ _GobalModel.set({ state: "new_line" }); },join_strings: function(){ _GobalModel.set({ state: "join_strings" }); },latinize: function(){ _GobalModel.set({ state: "latinize" }); },declination: function(){ _GobalModel.set({ state: "declination" }); },parse_csv_string: function(){ _GobalModel.set({ state: "parse_csv_string" }); },create_csv_string: function(){ _GobalModel.set({ state: "create_csv_string" }); },trim: function(){ _GobalModel.set({ state: "trim" }); },clean: function(){ _GobalModel.set({ state: "clean" }); },extract_emails: function(){ _GobalModel.set({ state: "extract_emails" }); },extract_urls: function(){ _GobalModel.set({ state: "extract_urls" }); },extract_phone_numbers: function(){ _GobalModel.set({ state: "extract_phone_numbers" }); },html_special_characters: function(){ _GobalModel.set({ state: "html_special_characters" }); },SendMessage: function(){ _GobalModel.set({ state: "SendMessage" }); },timezones_set_timezone_and_geolocation_by_ip: function(){ _GobalModel.set({ state: "timezones_set_timezone_and_geolocation_by_ip" }); },timezones_set_timezone: function(){ _GobalModel.set({ state: "timezones_set_timezone" }); },timezones_set_geolocation: function(){ _GobalModel.set({ state: "timezones_set_geolocation" }); },timezones_ip_info: function(){ _GobalModel.set({ state: "timezones_ip_info" }); },normalize_url: function(){ _GobalModel.set({ state: "normalize_url" }); },parse_url: function(){ _GobalModel.set({ state: "parse_url" }); },generate_url: function(){ _GobalModel.set({ state: "generate_url" }); },change_url: function(){ _GobalModel.set({ state: "change_url" }); },parse_ua: function(){ _GobalModel.set({ state: "parse_ua" }); },punycode: function(){ _GobalModel.set({ state: "punycode" }); },url_component: function(){ _GobalModel.set({ state: "url_component" }); },user_notification_play_sound: function(){ _GobalModel.set({ state: "user_notification_play_sound" }); },user_notification_user_input: function(){ _GobalModel.set({ state: "user_notification_user_input" }); },user_notification_web_interface_eval: function(){ _GobalModel.set({ state: "user_notification_web_interface_eval" }); },user_notification_manual_browser_control: function(){ _GobalModel.set({ state: "user_notification_manual_browser_control" }); },XpathXml: function(){ _GobalModel.set({ state: "XpathXml" }); },XpathXmlList: function(){ _GobalModel.set({ state: "XpathXmlList" }); },XpathText: function(){ _GobalModel.set({ state: "XpathText" }); },XpathTextList: function(){ _GobalModel.set({ state: "XpathTextList" }); },XpathCount: function(){ _GobalModel.set({ state: "XpathCount" }); },XpathExists: function(){ _GobalModel.set({ state: "XpathExists" }); },BACKPACK_Approve: function(){ _GobalModel.set({ state: "BACKPACK_Approve" }); },BACKPACK_UnlockPassword: function(){ _GobalModel.set({ state: "BACKPACK_UnlockPassword" }); },BACKPACK_AddNetworks: function(){ _GobalModel.set({ state: "BACKPACK_AddNetworks" }); },BACKPACK_ImportWalletToBACKPACK: function(){ _GobalModel.set({ state: "BACKPACK_ImportWalletToBACKPACK" }); },RABBY_RABBY_conect: function(){ _GobalModel.set({ state: "RABBY_RABBY_conect" }); },RABBY_RABBY_get_wallet_adress: function(){ _GobalModel.set({ state: "RABBY_RABBY_get_wallet_adress" }); },RABBY_RABBY_login: function(){ _GobalModel.set({ state: "RABBY_RABBY_login" }); },START_GOOGLEstart: function(){ _GobalModel.set({ state: "START_GOOGLEstart" }); }
    });

    var _Router = new Router();



    var _TaskCollection = new TaskCollection([
                { description: tr("Generate code with AI"), type: "group", name: "ai", icon: _G["ai"]["icon"], info: tr(_G["ai"]["info"])},
                { description: tr("Browser"), type: "group", name: "browser", icon: _G["browser"]["icon"], info: tr(_G["browser"]["info"])},
                { name: tr(_A["load"]["name"]), description: tr(_A["load"]["description"]), ref: "load" },
                { name: tr(_A["url"]["name"]), description: tr(_A["url"]["description"]), ref: "url" },
                { name: tr(_A["navigateback"]["name"]), description: tr(_A["navigateback"]["description"]), ref: "navigateback" },
                { name: tr(_A["html"]["name"]), description: tr(_A["html"]["description"]), ref: "html" },
                { name: tr(_A["type"]["name"]), description: tr(_A["type"]["description"]), ref: "type" },
                { name: tr(_A["resize"]["name"]), description: tr(_A["resize"]["description"]), ref: "resize" },
                { name: tr(_A["screen"]["name"]), description: tr(_A["screen"]["description"]), ref: "screen" },
                { name: tr(_A["proxy"]["name"]), description: tr(_A["proxy"]["description"]), ref: "proxy" },
                { name: tr(_A["javascript"]["name"]), description: tr(_A["javascript"]["description"]), ref: "javascript" },
                { name: tr(_A["browserjavascript"]["name"]), description: tr(_A["browserjavascript"]["description"]), ref: "browserjavascript" },
                { name: tr(_A["onloadjavascript"]["name"]), description: tr(_A["onloadjavascript"]["description"]), ref: "onloadjavascript" },
                { name: tr(_A["reset"]["name"]), description: tr(_A["reset"]["description"]), ref: "reset" },
                { name: tr(_A["openfile"]["name"]), description: tr(_A["openfile"]["description"]), ref: "openfile" },
                { name: tr(_A["dragfile"]["name"]), description: tr(_A["dragfile"]["description"]), ref: "dragfile" },
                { name: tr(_A["promptresult"]["name"]), description: tr(_A["promptresult"]["description"]), ref: "promptresult" },
                { name: tr(_A["httpauth"]["name"]), description: tr(_A["httpauth"]["description"]), ref: "httpauth" },
                { name: tr(_A["scroll"]["name"]), description: tr(_A["scroll"]["description"]), ref: "scroll" },
                { name: tr(_A["renderscreen"]["name"]), description: tr(_A["renderscreen"]["description"]), ref: "renderscreen" },
                { name: tr(_A["solvecaptcha"]["name"]), description: tr(_A["solvecaptcha"]["description"]), ref: "solvecaptcha" },
                { name: tr(_A["recaptchav3"]["name"]), description: tr(_A["recaptchav3"]["description"]), ref: "recaptchav3" },
                { name: tr(_A["clickCaptchaBrowser"]["name"]), description: tr(_A["clickCaptchaBrowser"]["description"]), ref: "clickCaptchaBrowser" },
                { name: tr(_A["solverfailed"]["name"]), description: tr(_A["solverfailed"]["description"]), ref: "solverfailed" },
                { name: tr(_A["timeout"]["name"]), description: tr(_A["timeout"]["description"]), ref: "timeout" },
                { name: tr(_A["browsersettings"]["name"]), description: tr(_A["browsersettings"]["description"]), ref: "browsersettings" },
                { name: tr(_A["getcurrentbrowserversion"]["name"]), description: tr(_A["getcurrentbrowserversion"]["description"]), ref: "getcurrentbrowserversion" },
                { name: tr(_A["getbrowserversionlist"]["name"]), description: tr(_A["getbrowserversionlist"]["description"]), ref: "getbrowserversionlist" },
                { name: tr(_A["clickextensionbutton"]["name"]), description: tr(_A["clickextensionbutton"]["description"]), ref: "clickextensionbutton" },
                { name: tr(_A["touch"]["name"]), description: tr(_A["touch"]["description"]), ref: "touch" },
                { name: tr(_A["mousesettings"]["name"]), description: tr(_A["mousesettings"]["description"]), ref: "mousesettings" },
                { name: tr(_A["notification"]["name"]), description: tr(_A["notification"]["description"]), ref: "notification" },
                { description: tr("Script logic"), type: "group", name: "logic", icon: _G["logic"]["icon"], info: tr(_G["logic"]["info"]) },
                { name: tr(_A["if"]["name"]), description: tr(_A["if"]["description"]), ref: "if" },
                { name: tr(_A["while"]["name"]), description: tr(_A["while"]["description"]), ref: "while" },
                { name: tr(_A["for"]["name"]), description: tr(_A["for"]["description"]), ref: "for" },
                { name: tr(_A["foreach"]["name"]), description: tr(_A["foreach"]["description"]), ref: "foreach" },
                { name: tr(_A["break"]["name"]), description: tr(_A["break"]["description"]), ref: "break" },
                { name: tr(_A["continue"]["name"]), description: tr(_A["continue"]["description"]), ref: "continue" },
                { name: tr(_A["success"]["name"]), description: tr(_A["success"]["description"]), ref: "success" },
                { name: tr(_A["fail"]["name"]), description: tr(_A["fail"]["description"]), ref: "fail" },
                { name: tr(_A["die"]["name"]), description: tr(_A["die"]["description"]), ref: "die" },
                { name: tr(_A["label"]["name"]), description: tr(_A["label"]["description"]), ref: "label" },
                { name: tr(_A["goto"]["name"]), description: tr(_A["goto"]["description"]), ref: "goto" },
                { name: tr(_A["ignoreerrors"]["name"]), description: tr(_A["ignoreerrors"]["description"]), ref: "ignoreerrors" },
                { name: tr(_A["setvariable"]["name"]), description: tr(_A["setvariable"]["description"]), ref: "setvariable" },
                { name: tr(_A["incvariable"]["name"]), description: tr(_A["incvariable"]["description"]), ref: "incvariable" },
                { name: tr(_A["globalset"]["name"]), description: tr(_A["globalset"]["description"]), ref: "globalset" },
                { name: tr(_A["incglobalvariable"]["name"]), description: tr(_A["incglobalvariable"]["description"]), ref: "incglobalvariable" },
                { name: tr(_A["executefunction"]["name"]), description: tr(_A["executefunction"]["description"]), ref: "executefunction" },
                { name: tr(_A["getfunctionparameter"]["name"]), description: tr(_A["getfunctionparameter"]["description"]), ref: "getfunctionparameter" },
                { name: tr(_A["return"]["name"]), description: tr(_A["return"]["description"]), ref: "return" },
                { name: tr(_A["executefunctioninseveralthreads"]["name"]), description: tr(_A["executefunctioninseveralthreads"]["description"]), ref: "executefunctioninseveralthreads" },
                { description: tr("Tools"), type: "group", name: "tools", icon: _G["tools"]["icon"], info: tr(_G["tools"]["info"]) },
                { name: tr(_A["log"]["name"]), description: tr(_A["log"]["description"]), ref: "log" },
                { name: tr(_A["clearlog"]["name"]), description: tr(_A["clearlog"]["description"]), ref: "clearlog" },
                { name: tr(_A["result"]["name"]), description: tr(_A["result"]["description"]), ref: "result" },
                { name: tr(_A["custom"]["name"]), description: tr(_A["custom"]["description"]), ref: "custom" },
                /*{ name: tr(_A["globalget"]["name"]), description: tr(_A["globalget"]["description"]), ref: "globalget" },*/
                { name: tr(_A["parseline"]["name"]), description: tr(_A["parseline"]["description"]), ref: "parseline" },
                { name: tr(_A["randomint"]["name"]), description: tr(_A["randomint"]["description"]), ref: "randomint" },
                { description: tr("Network"), type: "group", name: "network", icon: _G["network"]["icon"], info: tr(_G["network"]["info"]) },
                //{ name: tr(_A["getcookiesforurl"]["name"]), description: tr(_A["getcookiesforurl"]["description"]), ref: "getcookiesforurl" },
                { name: tr(_A["savecookies"]["name"]), description: tr(_A["savecookies"]["description"]), ref: "savecookies" },
                { name: tr(_A["restorecookies"]["name"]), description: tr(_A["restorecookies"]["description"]), ref: "restorecookies" },
                { name: tr(_A["loadcookiesfromhttpclient"]["name"]), description: tr(_A["loadcookiesfromhttpclient"]["description"]), ref: "loadcookiesfromhttpclient" },
                { name: tr(_A["cachemaskallow"]["name"]), description: tr(_A["cachemaskallow"]["description"]), ref: "cachemaskallow" },
                { name: tr(_A["cachemaskdeny"]["name"]), description: tr(_A["cachemaskdeny"]["description"]), ref: "cachemaskdeny" },
                { name: tr(_A["requestmaskallow"]["name"]), description: tr(_A["requestmaskallow"]["description"]), ref: "requestmaskallow" },
                { name: tr(_A["requestmaskdeny"]["name"]), description: tr(_A["requestmaskdeny"]["description"]), ref: "requestmaskdeny" },
                { name: tr(_A["cleardata"]["name"]), description: tr(_A["cleardata"]["description"]), ref: "cleardata" },
                { name: tr(_A["clearmasks"]["name"]), description: tr(_A["clearmasks"]["description"]), ref: "clearmasks" },
                { name: tr(_A["getstatus"]["name"]), description: tr(_A["getstatus"]["description"]), ref: "getstatus" },
                { name: tr(_A["isloaded"]["name"]), description: tr(_A["isloaded"]["description"]), ref: "isloaded" },
                { name: tr(_A["getfromcache"]["name"]), description: tr(_A["getfromcache"]["description"]), ref: "getfromcache" },
                { name: tr(_A["getallcache"]["name"]), description: tr(_A["getallcache"]["description"]), ref: "getallcache" },
                { name: tr(_A["redirectrequests"]["name"]), description: tr(_A["redirectrequests"]["description"]), ref: "redirectrequests" },
                { name: tr(_A["replacerequestcontent"]["name"]), description: tr(_A["replacerequestcontent"]["description"]), ref: "replacerequestcontent" },
                { name: tr(_A["replaceresponsecontent"]["name"]), description: tr(_A["replaceresponsecontent"]["description"]), ref: "replaceresponsecontent" },
                { name: tr(_A["disablerules"]["name"]), description: tr(_A["disablerules"]["description"]), ref: "disablerules" },
                { name: tr(_A["getrulestats"]["name"]), description: tr(_A["getrulestats"]["description"]), ref: "getrulestats" },
                { name: tr(_A["restrictpopups"]["name"]), description: tr(_A["restrictpopups"]["description"]), ref: "restrictpopups" },
                { name: tr(_A["allowpopups"]["name"]), description: tr(_A["allowpopups"]["description"]), ref: "allowpopups" },
                { name: tr(_A["restrictdownloads"]["name"]), description: tr(_A["restrictdownloads"]["description"]), ref: "restrictdownloads" },
                { name: tr(_A["allowdownloads"]["name"]), description: tr(_A["allowdownloads"]["description"]), ref: "allowdownloads" },
                { name: tr(_A["setheader"]["name"]), description: tr(_A["setheader"]["description"]), ref: "setheader" },
                { description: tr("Waiters"), type: "group", name: "waiters", icon: _G["waiters"]["icon"], info: tr(_G["waiters"]["info"]) },
                { name: tr(_A["waitfullload"]["name"]), description: tr(_A["waitfullload"]["description"]), ref: "waitfullload" },
                { name: tr(_A["waitload"]["name"]), description: tr(_A["waitload"]["description"]), ref: "waitload" },
                { name: tr(_A["waiturl"]["name"]), description: tr(_A["waiturl"]["description"]), ref: "waiturl" },
                { name: tr(_A["waitcontent"]["name"]), description: tr(_A["waitcontent"]["description"]), ref: "waitcontent" },
                { name: tr(_A["waitcss"]["name"]), description: tr(_A["waitcss"]["description"]), ref: "waitcss" },
                { name: tr(_A["waitfiledownload"]["name"]), description: tr(_A["waitfiledownload"]["description"]), ref: "waitfiledownload" },
                { name: tr(_A["sleep"]["name"]), description: tr(_A["sleep"]["description"]), ref: "sleep" },
                /*{ description: tr("Email"), type: "group", name: "email", icon: _G["email"]["icon"], info: tr(_G["email"]["info"]) },
                { name: tr(_A["emailsettings"]["name"]), description: tr(_A["emailsettings"]["description"]), ref: "emailsettings" },
                { name: tr(_A["emailproxy"]["name"]), description: tr(_A["emailproxy"]["description"]), ref: "emailproxy" },
                { name: tr(_A["emaillength"]["name"]), description: tr(_A["emaillength"]["description"]), ref: "emaillength" },
                { name: tr(_A["emailsearchfirst"]["name"]), description: tr(_A["emailsearchfirst"]["description"]), ref: "emailsearchfirst" },
                { name: tr(_A["emailsearchall"]["name"]), description: tr(_A["emailsearchall"]["description"]), ref: "emailsearchall" },
                { name: tr(_A["emailpull"]["name"]), description: tr(_A["emailpull"]["description"]), ref: "emailpull" },
                { name: tr(_A["emailremove"]["name"]), description: tr(_A["emailremove"]["description"]), ref: "emailremove" },*/
                { description: tr("Http Client"), type: "group", name: "httpclient", icon: _G["httpclient"]["icon"], info: tr(_G["httpclient"]["info"]) },
                { name: tr(_A["httpclientproxy"]["name"]), description: tr(_A["httpclientproxy"]["description"]), ref: "httpclientproxy" },
                { name: tr(_A["httpclientreset"]["name"]), description: tr(_A["httpclientreset"]["description"]), ref: "httpclientreset" },
                { name: tr(_A["httpclientget"]["name"]), description: tr(_A["httpclientget"]["description"]), ref: "httpclientget" },
                { name: tr(_A["httpclientpost"]["name"]), description: tr(_A["httpclientpost"]["description"]), ref: "httpclientpost" },
                { name: tr(_A["httpclientdownload"]["name"]), description: tr(_A["httpclientdownload"]["description"]), ref: "httpclientdownload" },
                { name: tr(_A["httpclienturl"]["name"]), description: tr(_A["httpclienturl"]["description"]), ref: "httpclienturl" },
                { name: tr(_A["httpclientcontent"]["name"]), description: tr(_A["httpclientcontent"]["description"]), ref: "httpclientcontent" },
                { name: tr(_A["httpclientstatus"]["name"]), description: tr(_A["httpclientstatus"]["description"]), ref: "httpclientstatus" },
                { name: tr(_A["httpclientgetheader"]["name"]), description: tr(_A["httpclientgetheader"]["description"]), ref: "httpclientgetheader" },
                { name: tr(_A["httpclientsetheader"]["name"]), description: tr(_A["httpclientsetheader"]["description"]), ref: "httpclientsetheader" },
                { name: tr(_A["httpclientclearheader"]["name"]), description: tr(_A["httpclientclearheader"]["description"]), ref: "httpclientclearheader" },
                //{ name: tr(_A["httpclientgetcookiesforurl"]["name"]), description: tr(_A["httpclientgetcookiesforurl"]["description"]), ref: "httpclientgetcookiesforurl" },
                { name: tr(_A["httpclientsavecookies"]["name"]), description: tr(_A["httpclientsavecookies"]["description"]), ref: "httpclientsavecookies" },
                { name: tr(_A["httpclientrestorecookies"]["name"]), description: tr(_A["httpclientrestorecookies"]["description"]), ref: "httpclientrestorecookies" },
                { name: tr(_A["loadcookiesfrombrowser"]["name"]), description: tr(_A["loadcookiesfrombrowser"]["description"]), ref: "loadcookiesfrombrowser" },
                { name: tr(_A["httpclientfailonerror"]["name"]), description: tr(_A["httpclientfailonerror"]["description"]), ref: "httpclientfailonerror" },
                { name: tr(_A["httpclientiserror"]["name"]), description: tr(_A["httpclientiserror"]["description"]), ref: "httpclientiserror" },
                { name: tr(_A["httpclientgeterrorstring"]["name"]), description: tr(_A["httpclientgeterrorstring"]["description"]), ref: "httpclientgeterrorstring" },
                { name: tr(_A["httpclientxpathxml"]["name"]), description: tr(_A["httpclientxpathxml"]["description"]), ref: "httpclientxpathxml" },
                { name: tr(_A["httpclientxpathxmllist"]["name"]), description: tr(_A["httpclientxpathxmllist"]["description"]), ref: "httpclientxpathxmllist" },
                { name: tr(_A["httpclientxpathtext"]["name"]), description: tr(_A["httpclientxpathtext"]["description"]), ref: "httpclientxpathtext" },
                { name: tr(_A["httpclientxpathtextlist"]["name"]), description: tr(_A["httpclientxpathtextlist"]["description"]), ref: "httpclientxpathtextlist" },
                { name: tr(_A["httpclientxpathcount"]["name"]), description: tr(_A["httpclientxpathcount"]["description"]), ref: "httpclientxpathcount" },
                { name: tr(_A["httpclientxpathexists"]["name"]), description: tr(_A["httpclientxpathexists"]["description"]), ref: "httpclientxpathexists" },
                { description: tr("Open/close browser"), type: "group", name: "manual", icon: _G["manual"]["icon"], info: tr(_G["manual"]["info"]) },
                { name: tr(_A["openbrowser"]["name"]), description: tr(_A["openbrowser"]["description"]), ref: "openbrowser" },
                { name: tr(_A["closebrowser"]["name"]), description: tr(_A["closebrowser"]["description"]), ref: "closebrowser" }

                ,{"description":"Контрольная сумма","icon":"..\/..\/modules\/Checksum\/Checksum.png","info":"Модуль для расчета контрольной суммы строки или файла","name":"Checksum","show_only_with_database":false,"type":"group"},{"description":"Контрольная сумма строки","name":"Контрольная сумма строки","ref":"Checksum_String","show_only_with_database":false},{"description":"Контрольная сумма файла","name":"Контрольная сумма файла","ref":"Checksum_File","show_only_with_database":false},{"description":"Получить список алгоритмов","name":"Получить список алгоритмов","ref":"Checksum_GetAlgorithmsList","show_only_with_database":false},{"description":"Буфер обмена","icon":"..\/..\/modules\/Clipboard\/clipboard.png","info":"Доступ к буферу обмена: чтение, запись.","name":"Clipboard","show_only_with_database":false,"type":"group"},{"description":"Читать Буфер Обмена","name":"Читать Буфер Обмена","ref":"clipboard_getclipboard","show_only_with_database":false},{"description":"Запись В Буфер Обмена","name":"Запись В Буфер Обмена","ref":"clipboard_setclipboard","show_only_with_database":false},{"description":"База данных","icon":"..\/..\/modules\/Database\/database.png","info":"Доступ к базе данных в ручном режиме. Получение, обновление, удаление и добавление записей. Лучше использовать ресурсы для управления базой данных.","name":"Database","show_only_with_database":true,"type":"group"},{"description":"Получить Список Групп","name":"Получить Список Групп","ref":"Database_GetGroupList","show_only_with_database":true},{"description":"Создать Группу","name":"Создать Группу","ref":"Database_CreateGroup","show_only_with_database":true},{"description":"Удалить Группу","name":"Удалить Группу","ref":"Database_DeleteGroup","show_only_with_database":true},{"description":"Изменить Группу","name":"Изменить Группу","ref":"Database_ChangeGroup","show_only_with_database":true},{"description":"Копировать Группу","name":"Копировать Группу","ref":"Database_CopyGroup","show_only_with_database":true},{"description":"Переместить Запись В Группу","name":"Переместить Запись В Группу","ref":"Database_MoveRecordToGroup","show_only_with_database":true},{"description":"Вставить Запись","name":"Вставить Запись","ref":"Database_InsertRecord","show_only_with_database":true},{"description":"Изменить Одну Запись","name":"Изменить Одну Запись","ref":"Database_UpdateRecord","show_only_with_database":true},{"description":"Изменить Записи По Критерию","name":"Изменить Записи По Критерию","ref":"Database_UpdateRecordsByCriteria","show_only_with_database":true},{"description":"Получить Одну Запись","name":"Получить Одну Запись","ref":"Database_SelectOne","show_only_with_database":true},{"description":"Получить Записи По Критерию","name":"Получить Записи По Критерию","ref":"Database_SelectRecords","show_only_with_database":true},{"description":"Удалить Одну Запись","name":"Удалить Одну Запись","ref":"Database_DeleteOneRecord","show_only_with_database":true},{"description":"Удалить Записи По Критерию","name":"Удалить Записи По Критерию","ref":"Database_DeleteRecords","show_only_with_database":true},{"description":"Количество Записей","name":"Количество Записей","ref":"Database_CountRecords","show_only_with_database":true},{"description":"Дата и время","icon":"..\/..\/modules\/DateTime\/datetime.png","info":"Манипуляции с датой и временем.","name":"DateTime","show_only_with_database":false,"type":"group"},{"description":"Строку В Дату","name":"Строку В Дату","ref":"datetime_stringtodate","show_only_with_database":false},{"description":"Дату В Строку","name":"Дату В Строку","ref":"datetime_datetostring","show_only_with_database":false},{"description":"Миллисекунды В Дату","name":"Миллисекунды В Дату","ref":"datetime_msecondstodate","show_only_with_database":false},{"description":"Дату в Миллисекунды","name":"Дату в Миллисекунды","ref":"datetime_datetomseconds","show_only_with_database":false},{"description":"Создать Дату","name":"Создать Дату","ref":"datetime_createdate","show_only_with_database":false},{"description":"Изменить Дату","name":"Изменить Дату","ref":"datetime_changedate","show_only_with_database":false},{"description":"Добавить Секунды К Дате","name":"Добавить Секунды К Дате","ref":"datetime_addsecondstodate","show_only_with_database":false},{"description":"Разница Между Датами","name":"Разница Между Датами","ref":"datetime_substractdates","show_only_with_database":false},{"description":"Дата Сейчас","name":"Дата Сейчас","ref":"datetime_datenow","show_only_with_database":false},{"description":"Изменить Часовой Пояс Даты","name":"Изменить Часовой Пояс Даты","ref":"datetime_changetimezone","show_only_with_database":false},{"description":"Получить Часовой Пояс Даты","name":"Получить Часовой Пояс Даты","ref":"datetime_gettimezone","show_only_with_database":false},{"description":"День Месяца","name":"День Месяца","ref":"datetime_dayofmonth","show_only_with_database":false},{"description":"День Недели","name":"День Недели","ref":"datetime_dayofweek","show_only_with_database":false},{"description":"День Года","name":"День Года","ref":"datetime_dayofyear","show_only_with_database":false},{"description":"Получить Год Из Даты","name":"Получить Год Из Даты","ref":"datetime_year","show_only_with_database":false},{"description":"Получить Месяц Из Даты","name":"Получить Месяц Из Даты","ref":"datetime_month","show_only_with_database":false},{"description":"Получить Часы Из Даты","name":"Получить Часы Из Даты","ref":"datetime_hour","show_only_with_database":false},{"description":"Получить Минуты Из Даты","name":"Получить Минуты Из Даты","ref":"datetime_minute","show_only_with_database":false},{"description":"Получить Секунды Из Даты","name":"Получить Секунды Из Даты","ref":"datetime_second","show_only_with_database":false},{"description":"Получить Миллисекунды Из Даты","name":"Получить Миллисекунды Из Даты","ref":"datetime_millisecond","show_only_with_database":false},{"description":"Встроенные языки","icon":"..\/..\/modules\/EmbeddedLanguages\/languages.png","info":"Встроенные языки. Позволяет выполнить код на одном из языков представленном ниже. Действие 'Выполнить код'' также позволяет выполнить javascript код, но с ограниченными возможностями.","name":"EmbeddedLanguages","show_only_with_database":false,"type":"group"},{"description":"Node.js","name":"Node.js","ref":"EmbeddedLanguagesNodeJs","show_only_with_database":false},{"description":"Файловая система","icon":"..\/..\/modules\/FileSystem\/filesystem.png","info":"Доступ к файловой системе: чтение, запись и поиск файлов.","name":"FileSystem","show_only_with_database":false,"type":"group"},{"description":"Читать Файл","name":"Читать Файл","ref":"filesystem_readfile","show_only_with_database":false},{"description":"Запись В Файл","name":"Запись В Файл","ref":"filesystem_writefile","show_only_with_database":false},{"description":"Информация О Файле\/Папке","name":"Информация О Файле\/Папке","ref":"filesystem_fileinfo","show_only_with_database":false},{"description":"Создать Папку","name":"Создать Папку","ref":"filesystem_createdir","show_only_with_database":false},{"description":"Удалить Файл\/Папку","name":"Удалить Файл\/Папку","ref":"filesystem_removefile","show_only_with_database":false},{"description":"Переместить Файл\/Папку","name":"Переместить Файл\/Папку","ref":"filesystem_movefile","show_only_with_database":false},{"description":"Копировать Файл\/Папку","name":"Копировать Файл\/Папку","ref":"filesystem_copyfile","show_only_with_database":false},{"description":"Поиск Файлов","name":"Поиск Файлов","ref":"filesystem_search","show_only_with_database":false},{"description":"Читать Файл В Список","name":"Читать Файл В Список","ref":"filesystem_file_to_list","show_only_with_database":false},{"description":"Записать Список В Файл","name":"Записать Список В Файл","ref":"filesystem_list_to_file","show_only_with_database":false},{"description":"Смена отпечатка браузера","icon":"..\/..\/modules\/FingerprintSwitcher\/fingerprintswitcher.png","info":"FingerprintSwitcher - это более продвинутая версия смены юзер агента. Сервис меняет не только юзер агент, но и множество внутренних методов и переменных браузера, так, что он выглядел абсолютно идентично хрому, файерфоксу, сафари, настольному или мобильному браузеру.","name":"FingerprintSwitcher","show_only_with_database":false,"type":"group"},{"description":"Получить отпечаток","name":"Получить отпечаток","ref":"FingerprintSwitcher_Get","show_only_with_database":false},{"description":"Применить отпечаток","name":"Применить отпечаток","ref":"FingerprintSwitcher_Apply","show_only_with_database":false},{"description":"Отпечаток производительности","name":"Отпечаток производительности","ref":"FingerprintSwitcher_Performance","show_only_with_database":false},{"description":"Переопределить ключ","name":"Переопределить ключ","ref":"FingerprintSwitcher_Override","show_only_with_database":false},{"description":"Отменить переопределение ключа","name":"Отменить переопределение ключа","ref":"FingerprintSwitcher_DisableOverride","show_only_with_database":false},{"description":"Асинхронный вызов функции","icon":"..\/..\/modules\/FunctionAsyncCall\/async.png","info":"Этот модуль позволяет начать выполнение функции в отдельном потоке, дождаться результатов или остановить его при необходимости.","name":"FunctionAsyncCall","show_only_with_database":false,"type":"group"},{"description":"Вызов функции асинхронно","name":"Вызов функции асинхронно","ref":"asyncfunction_call","show_only_with_database":false},{"description":"Ждать завершение асинхронной функции","name":"Ждать завершение асинхронной функции","ref":"asyncfunction_wait","show_only_with_database":false},{"description":"Получить результат асинхронной функции","name":"Получить результат асинхронной функции","ref":"asyncfunction_result","show_only_with_database":false},{"description":"Прервать асинхронную функцию","name":"Прервать асинхронную функцию","ref":"asyncfunction_stop","show_only_with_database":false},{"description":"Эмуляция бездействия","icon":"..\/..\/modules\/IdleEmulation\/idleemulation.png","info":"Имитирует случайную активность пользователя: перемещает мышь, прокручивает страницу.","name":"IdleEmulation","show_only_with_database":false,"type":"group"},{"description":"Начать эмуляцию бездействия","name":"Начать эмуляцию бездействия","ref":"IdleEmulationNew","show_only_with_database":false},{"description":"Включить автоматическую эмуляцию бездействия","name":"Включить автоматическую эмуляцию бездействия","ref":"IdleEmulationSetGeneralSettings","show_only_with_database":false},{"description":"Отключить автоматическую эмуляцию бездействия","name":"Отключить автоматическую эмуляцию бездействия","ref":"IdleEmulationResetGeneralSettings","show_only_with_database":false},{"description":"Начать эмуляцию бездействия (устаревшее)","name":"Начать эмуляцию бездействия (устаревшее)","ref":"IdleEmulation","show_only_with_database":false},{"description":"Отладка","name":"Отладка","ref":"IdleEmulationSetDebug","show_only_with_database":false},{"description":"Обработка изображений","icon":"..\/..\/modules\/ImageProcessing\/imageprocessing.png","info":"Модуль для обработки изображений и поиска картинок.","name":"ImageProcessing","show_only_with_database":false,"type":"group"},{"description":"Начать работу с изображением","name":"Начать работу с изображением","ref":"imageprocessingload","show_only_with_database":false},{"description":"Закончить работу с изображением","name":"Закончить работу с изображением","ref":"imageprocessingdelete","show_only_with_database":false},{"description":"Создать пустое изображение","name":"Создать пустое изображение","ref":"imageprocessingcreate","show_only_with_database":false},{"description":"Изменить формат изображения","name":"Изменить формат изображения","ref":"imageprocessingconvert","show_only_with_database":false},{"description":"Получить данные изображения","name":"Получить данные изображения","ref":"imageprocessinggetdata","show_only_with_database":false},{"description":"Получить цвет пикселя","name":"Получить цвет пикселя","ref":"imageprocessinggetpixel","show_only_with_database":false},{"description":"Установить цвет пикселя","name":"Установить цвет пикселя","ref":"imageprocessingsetpixel","show_only_with_database":false},{"description":"Получить размер","name":"Получить размер","ref":"imageprocessinggetsize","show_only_with_database":false},{"description":"Изменить размер","name":"Изменить размер","ref":"imageprocessingresize","show_only_with_database":false},{"description":"Вставить одно изображение в другое","name":"Вставить одно изображение в другое","ref":"imageprocessinginsert","show_only_with_database":false},{"description":"Поиск одного изображения в другом","name":"Поиск одного изображения в другом","ref":"imageprocessingfind","show_only_with_database":false},{"description":"Заполнить прямоугольник цветом","name":"Заполнить прямоугольник цветом","ref":"imageprocessingfill","show_only_with_database":false},{"description":"Получить часть изображения","name":"Получить часть изображения","ref":"imageprocessingsub","show_only_with_database":false},{"description":"Добавить текст","name":"Добавить текст","ref":"imageprocessingtext","show_only_with_database":false},{"description":"Почта","icon":"..\/..\/modules\/InMail\/mail.png","info":"Модуль для работы с входящей почтой","name":"InMail","show_only_with_database":false,"type":"group"},{"description":"Настроить получение почты","name":"Настроить получение почты","ref":"InMail_Configure","show_only_with_database":false},{"description":"Прокси получения почты","name":"Прокси получения почты","ref":"InMail_Proxy","show_only_with_database":false},{"description":"Получить содержимое последнего письма","name":"Получить содержимое последнего письма","ref":"InMail_GetLastMessage","show_only_with_database":false},{"description":"Найти id последнего письма","name":"Найти id последнего письма","ref":"InMail_SearchLast","show_only_with_database":false},{"description":"Получить содержимое одного письма по критериям","name":"Получить содержимое одного письма по критериям","ref":"InMail_FindMessage","show_only_with_database":false},{"description":"Найти id одного письма по критериям","name":"Найти id одного письма по критериям","ref":"InMail_SearchOne","show_only_with_database":false},{"description":"Найти id нескольких писем по критериям","name":"Найти id нескольких писем по критериям","ref":"InMail_Search","show_only_with_database":false},{"description":"Получить содержимое письма по id","name":"Получить содержимое письма по id","ref":"InMail_GetMessage","show_only_with_database":false},{"description":"Получить количество писем по критериям","name":"Получить количество писем по критериям","ref":"InMail_Count","show_only_with_database":false},{"description":"Удалить письмо по id","name":"Удалить письмо по id","ref":"InMail_DelMessages","show_only_with_database":false},{"description":"Копировать письмо по id","name":"Копировать письмо по id","ref":"InMail_CopyMessages","show_only_with_database":false},{"description":"Переместить письмо по id","name":"Переместить письмо по id","ref":"InMail_MoveMessages","show_only_with_database":false},{"description":"Получить флаги письма по id","name":"Получить флаги письма по id","ref":"InMail_GetFlags","show_only_with_database":false},{"description":"Установить флаги письма по id","name":"Установить флаги письма по id","ref":"InMail_SetFlags","show_only_with_database":false},{"description":"Удалить флаги письма по id","name":"Удалить флаги письма по id","ref":"InMail_DelFlags","show_only_with_database":false},{"description":"Получить список папок","name":"Получить список папок","ref":"InMail_GetBoxes","show_only_with_database":false},{"description":"Получить информацию о папке","name":"Получить информацию о папке","ref":"InMail_Status","show_only_with_database":false},{"description":"Создать новую папку","name":"Создать новую папку","ref":"InMail_AddBox","show_only_with_database":false},{"description":"Переименовать папку","name":"Переименовать папку","ref":"InMail_RenameBox","show_only_with_database":false},{"description":"Удалить папку","name":"Удалить папку","ref":"InMail_DelBox","show_only_with_database":false},{"description":"Закрыть почту","name":"Закрыть почту","ref":"InMail_Close","show_only_with_database":false},{"description":"Отладка","name":"Отладка","ref":"InMail_SetDebug","show_only_with_database":false},{"description":"JSON","icon":"..\/..\/modules\/JSON\/json.png","info":"Работа с JSON и JSONPath","name":"JSON","show_only_with_database":false,"type":"group"},{"description":"Создать объект","name":"Создать объект","ref":"JsonCreateObject","show_only_with_database":false},{"description":"Получить значение","name":"Получить значение","ref":"JsonGetValue","show_only_with_database":false},{"description":"Получить все значения","name":"Получить все значения","ref":"JsonGetAllValues","show_only_with_database":false},{"description":"Получить ключ","name":"Получить ключ","ref":"JsonGetKey","show_only_with_database":false},{"description":"Получить все ключи","name":"Получить все ключи","ref":"JsonGetAllKeys","show_only_with_database":false},{"description":"Количество элементов","name":"Количество элементов","ref":"JsonGetCount","show_only_with_database":false},{"description":"Изменить значение","name":"Изменить значение","ref":"JsonChangeValue","show_only_with_database":false},{"description":"Удалить значение","name":"Удалить значение","ref":"JsonRemoveValue","show_only_with_database":false},{"description":"Подходит ли строка под парсинг JSON","name":"Подходит ли строка под парсинг JSON","ref":"JsonCheckFormat","show_only_with_database":false},{"description":"Изменить формат (устаревшее)","name":"Изменить формат (устаревшее)","ref":"JsonChangeFormat","show_only_with_database":false},{"description":"Строку в JSON","name":"Строку в JSON","ref":"JsonFromString","show_only_with_database":false},{"description":"JSON в строку","name":"JSON в строку","ref":"JsonToString","show_only_with_database":false},{"description":"Список","icon":"..\/..\/modules\/List\/list.png","info":"Работа со списками. Списки доступны только в одном потоке, чтобы работать с данными в многопоточном режиме, используйте ресурсы. Используйте действие foreach, чтобы перебрать элементы списка.","name":"List","show_only_with_database":false,"type":"group"},{"description":"Создать Список","name":"Создать Список","ref":"CreateList","show_only_with_database":false},{"description":"Добавить Элемент","name":"Добавить Элемент","ref":"AddElement","show_only_with_database":false},{"description":"Получить Элемент","name":"Получить Элемент","ref":"GetElementByIndex","show_only_with_database":false},{"description":"Первый Элемент","name":"Первый Элемент","ref":"FirstListElement","show_only_with_database":false},{"description":"Последний Элемент","name":"Последний Элемент","ref":"LastListElement","show_only_with_database":false},{"description":"Случайный Элемент","name":"Случайный Элемент","ref":"RandomListElement","show_only_with_database":false},{"description":"Вставить Элемент","name":"Вставить Элемент","ref":"InsertElement","show_only_with_database":false},{"description":"Установить Элемент","name":"Установить Элемент","ref":"ListSetElement","show_only_with_database":false},{"description":"Удалить По Индексу","name":"Удалить По Индексу","ref":"DeleteByIndex","show_only_with_database":false},{"description":"Удалить По Значению","name":"Удалить По Значению","ref":"DeleteByValue","show_only_with_database":false},{"description":"Количество Элементов","name":"Количество Элементов","ref":"ListLength","show_only_with_database":false},{"description":"Содержит","name":"Содержит","ref":"ListContains","show_only_with_database":false},{"description":"Подсписок","name":"Подсписок","ref":"Sublist","show_only_with_database":false},{"description":"Удалить Часть","name":"Удалить Часть","ref":"RemoveListPart","show_only_with_database":false},{"description":"Удалить Дубликаты","name":"Удалить Дубликаты","ref":"RemoveDuplicates","show_only_with_database":false},{"description":"Объединить в строку","name":"Объединить в строку","ref":"ListJoin","show_only_with_database":false},{"description":"Парсить Строку","name":"Парсить Строку","ref":"ParseStringToList","show_only_with_database":false},{"description":"Получить Индекс","name":"Получить Индекс","ref":"GetElementIndex","show_only_with_database":false},{"description":"Копировать Список","name":"Копировать Список","ref":"CopyList","show_only_with_database":false},{"description":"Сортировать","name":"Сортировать","ref":"ListSort","show_only_with_database":false},{"description":"Перемешать Список","name":"Перемешать Список","ref":"ShuffleList","show_only_with_database":false},{"description":"Объединить Списки","name":"Объединить Списки","ref":"ListMerge","show_only_with_database":false},{"description":"Сравнить Списки","name":"Сравнить Списки","ref":"ListCompare","show_only_with_database":false},{"description":"Путь","icon":"..\/..\/modules\/Path\/path.png","info":"Модуль для работы с путями.","name":"Path","show_only_with_database":false,"type":"group"},{"description":"Получить имя файла из пути","name":"Получить имя файла из пути","ref":"path_base_name","show_only_with_database":false},{"description":"Получить папку из пути","name":"Получить папку из пути","ref":"path_directory_name","show_only_with_database":false},{"description":"Получить расширение файла","name":"Получить расширение файла","ref":"path_extension_name","show_only_with_database":false},{"description":"Является ли абсолютным путем","name":"Является ли абсолютным путем","ref":"is_absolute_path","show_only_with_database":false},{"description":"Объединить пути","name":"Объединить пути","ref":"join_paths","show_only_with_database":false},{"description":"Нормализовать путь","name":"Нормализовать путь","ref":"normalize_path","show_only_with_database":false},{"description":"Парсить путь","name":"Парсить путь","ref":"parse_path","show_only_with_database":false},{"description":"Путь к файлу проекта","name":"Путь к файлу проекта","ref":"script_stats_project_path","show_only_with_database":false},{"description":"Путь к директории проекта","name":"Путь к директории проекта","ref":"project_directory","show_only_with_database":false},{"description":"Путь установки","name":"Путь установки","ref":"installation_path","show_only_with_database":false},{"description":"Получить системный путь","name":"Получить системный путь","ref":"get_system_path","show_only_with_database":false},{"description":"Подтверждение телефона","icon":"..\/..\/modules\/PhoneVerification\/SMS.png","info":"Работа с сервисами приема SMS, узнать баланс, запросить количество доступных номеров, получить временный номер телефона и принять SMS код.","name":"PhoneVerification","show_only_with_database":false,"type":"group"},{"description":"Получить номер телефона","name":"Получить номер телефона","ref":"SMS_GetNumber","show_only_with_database":false},{"description":"Получить код активации","name":"Получить код активации","ref":"SMS_GetCode","show_only_with_database":false},{"description":"Изменение статуса активации","name":"Изменение статуса активации","ref":"SMS_SetStatus","show_only_with_database":false},{"description":"Получить баланс","name":"Получить баланс","ref":"SMS_GetBalance","show_only_with_database":false},{"description":"Получить количество доступных номеров","name":"Получить количество доступных номеров","ref":"SMS_GetNumbersCount","show_only_with_database":false},{"description":"Получить список сайтов","name":"Получить список сайтов","ref":"SMS_GetSites","show_only_with_database":false},{"description":"Получить список стран","name":"Получить список стран","ref":"SMS_GetCountries","show_only_with_database":false},{"description":"Отладка","name":"Отладка","ref":"SMS_Debug","show_only_with_database":false},{"description":"Управление Процессами","icon":"..\/..\/modules\/Processes\/processes.png","info":"Этот модуль может запускать любой bat или exe файл.","name":"Processes","show_only_with_database":false,"type":"group"},{"description":"Запустить Процесс","name":"Запустить Процесс","ref":"ExecuteProcess","show_only_with_database":false},{"description":"Работа с профилями","icon":"..\/..\/modules\/Profiles\/profiles.png","info":"Сохраняет и загружает профили. Совместимо с профилями хром.","name":"Profiles","show_only_with_database":false,"type":"group"},{"description":"Создать или переключиться на постоянный профиль (устарело)","name":"Создать или переключиться на постоянный профиль (устарело)","ref":"UseProfile","show_only_with_database":false},{"description":"Переключиться на временный профиль (устарело)","name":"Переключиться на временный профиль (устарело)","ref":"StopUsingProfile","show_only_with_database":false},{"description":"Копировать профиль в другую папку","name":"Копировать профиль в другую папку","ref":"SaveProfile","show_only_with_database":false},{"description":"Удалить профиль","name":"Удалить профиль","ref":"RemoveLocalProfile","show_only_with_database":false},{"description":"Получить информацию о текущем профилe","name":"Получить информацию о текущем профилe","ref":"GetCurrentProfile","show_only_with_database":false},{"description":"Регулярные выражения","icon":"..\/..\/modules\/RegularExpression\/RegularExpression.png","info":"Выполните регулярное выражения, чтобы получить один или несколько результатов.","name":"RegularExpression","show_only_with_database":false,"type":"group"},{"description":"Первое вхождение","name":"Первое вхождение","ref":"RegexpFirst","show_only_with_database":false},{"description":"Извлечь все данные","name":"Извлечь все данные","ref":"RegexpScan","show_only_with_database":false},{"description":"Подходит ли строка под регулярное выражение","name":"Подходит ли строка под регулярное выражение","ref":"RegexpMatch","show_only_with_database":false},{"description":"Разделить строку","name":"Разделить строку","ref":"RegexpSplit","show_only_with_database":false},{"description":"Заменить строку","name":"Заменить строку","ref":"RegexpReplace","show_only_with_database":false},{"description":"Ресурсы","icon":"..\/..\/modules\/Resources\/Resources.png","info":"Используйте этот модуль, чтобы вставить элемент в ресурс или читать ресурс в список. Чтобы получить элемент из ресурса, используйте выпадающее меню на любом поле.","name":"Resources","show_only_with_database":false,"type":"group"},{"description":"Создать Ресурс","name":"Создать Ресурс","ref":"CreateResource","show_only_with_database":false},{"description":"Удалить Текущий Элемент","name":"Удалить Текущий Элемент","ref":"DeleteCurrentElement","show_only_with_database":false},{"description":"Добавить Элемент","name":"Добавить Элемент","ref":"ResourceAddElement","show_only_with_database":false},{"description":"Расположение Ресурса","name":"Расположение Ресурса","ref":"GetResouceLocation","show_only_with_database":false},{"description":"Ресурс В Список","name":"Ресурс В Список","ref":"ResourceToArray","show_only_with_database":false},{"description":"Список В Ресурс","name":"Список В Ресурс","ref":"ArrayToResource","show_only_with_database":false},{"description":"Перезагрузить Ресурс","name":"Перезагрузить Ресурс","ref":"ResourceReload","show_only_with_database":false},{"description":"Количество Элементов В Ресурсе","name":"Количество Элементов В Ресурсе","ref":"ResourceLength","show_only_with_database":false},{"description":"Статистика скрипта","icon":"..\/..\/modules\/ScriptStats\/scriptstats.png","info":"Полезные инструменты для получения статистики выполнения скрипта.","name":"ScriptStats","show_only_with_database":false,"type":"group"},{"description":"Номер потока","name":"Номер потока","ref":"getthreadnumber","show_only_with_database":false},{"description":"Успешных выполнений","name":"Успешных выполнений","ref":"script_stats_success_number","show_only_with_database":false},{"description":"Неудачных выполнений","name":"Неудачных выполнений","ref":"script_stats_fail_number","show_only_with_database":false},{"description":"Включен ли режим записи","name":"Включен ли режим записи","ref":"script_stats_is_record","show_only_with_database":false},{"description":"Отправить письмо","icon":"..\/..\/modules\/SmtpClient\/SmtpClient.png","info":"Отправить письмо","name":"SmtpClient","show_only_with_database":false,"type":"group"},{"description":"SMTP Настройки","name":"SMTP Настройки","ref":"smtp_set_settings","show_only_with_database":false},{"description":"SMTP Прокси","name":"SMTP Прокси","ref":"smtp_set_proxy","show_only_with_database":false},{"description":"Отправить письмо","name":"Отправить письмо","ref":"smtp_send_mail","show_only_with_database":false},{"description":"Включить отладку","name":"Включить отладку","ref":"smtp_enable_debug","show_only_with_database":false},{"description":"Строка","icon":"..\/..\/modules\/String\/string.png","info":"Модуль для работы со строками.","name":"String","show_only_with_database":false,"type":"group"},{"description":"Является ли строкой","name":"Является ли строкой","ref":"is_string","show_only_with_database":false},{"description":"Не пустая строка","name":"Не пустая строка","ref":"is_not_empty_string","show_only_with_database":false},{"description":"В строку","name":"В строку","ref":"to_string","show_only_with_database":false},{"description":"В число","name":"В число","ref":"to_number","show_only_with_database":false},{"description":"Форматировать число","name":"Форматировать число","ref":"number_format","show_only_with_database":false},{"description":"Количество подстрок","name":"Количество подстрок","ref":"count_substrings","show_only_with_database":false},{"description":"Получить подстроку","name":"Получить подстроку","ref":"get_substring","show_only_with_database":false},{"description":"Получить подстроку между","name":"Получить подстроку между","ref":"get_substring_between","show_only_with_database":false},{"description":"Удалить часть строки","name":"Удалить часть строки","ref":"remove_string_part","show_only_with_database":false},{"description":"В нижний регистр","name":"В нижний регистр","ref":"to_lower_case","show_only_with_database":false},{"description":"В верхний регистр","name":"В верхний регистр","ref":"to_upper_case","show_only_with_database":false},{"description":"Содержит","name":"Содержит","ref":"string_contains","show_only_with_database":false},{"description":"Получить длину","name":"Получить длину","ref":"string_length","show_only_with_database":false},{"description":"Слово с большой буквы","name":"Слово с большой буквы","ref":"capitalize_words","show_only_with_database":false},{"description":"Количество слов","name":"Количество слов","ref":"count_words","show_only_with_database":false},{"description":"Разделить предложение на слова","name":"Разделить предложение на слова","ref":"split_to_words","show_only_with_database":false},{"description":"Разделить текст на предложения","name":"Разделить текст на предложения","ref":"split_to_sentences","show_only_with_database":false},{"description":"Разделить текст на строки","name":"Разделить текст на строки","ref":"split_to_lines","show_only_with_database":false},{"description":"Найти подстроку","name":"Найти подстроку","ref":"find_substring","show_only_with_database":false},{"description":"Начинается с","name":"Начинается с","ref":"starts_with","show_only_with_database":false},{"description":"Заканчивается на","name":"Заканчивается на","ref":"ends_with","show_only_with_database":false},{"description":"Вставить в","name":"Вставить в","ref":"insert_substring","show_only_with_database":false},{"description":"Base64 кодировать\/декодировать","name":"Base64 кодировать\/декодировать","ref":"base64","show_only_with_database":false},{"description":"Шаблон","name":"Шаблон","ref":"template","show_only_with_database":false},{"description":"Заменить строку","name":"Заменить строку","ref":"replacestring","show_only_with_database":false},{"description":"Случайная строка","name":"Случайная строка","ref":"randomstring","show_only_with_database":false},{"description":"Символ перевода строки","name":"Символ перевода строки","ref":"new_line","show_only_with_database":false},{"description":"Объединить строки","name":"Объединить строки","ref":"join_strings","show_only_with_database":false},{"description":"Латинизировать","name":"Латинизировать","ref":"latinize","show_only_with_database":false},{"description":"Склонять","name":"Склонять","ref":"declination","show_only_with_database":false},{"description":"Парсить CSV строку","name":"Парсить CSV строку","ref":"parse_csv_string","show_only_with_database":false},{"description":"Создать CSV строку","name":"Создать CSV строку","ref":"create_csv_string","show_only_with_database":false},{"description":"Подровнять","name":"Подровнять","ref":"trim","show_only_with_database":false},{"description":"Очистить","name":"Очистить","ref":"clean","show_only_with_database":false},{"description":"Извлечь все почты","name":"Извлечь все почты","ref":"extract_emails","show_only_with_database":false},{"description":"Извлечь все ссылки","name":"Извлечь все ссылки","ref":"extract_urls","show_only_with_database":false},{"description":"Извлечь все телефонные номера","name":"Извлечь все телефонные номера","ref":"extract_phone_numbers","show_only_with_database":false},{"description":"Специальные HTML символы кодировать\/декодировать","name":"Специальные HTML символы кодировать\/декодировать","ref":"html_special_characters","show_only_with_database":false},{"description":"Телеграм","icon":"..\/..\/modules\/Telegram\/message.png","info":"Модуль позволяет отправлять сообщения своему боту в телеграм","name":"Telegram","show_only_with_database":false,"type":"group"},{"description":"Отправить Сообщение","name":"Отправить Сообщение","ref":"SendMessage","show_only_with_database":false},{"description":"Часовой пояс","icon":"..\/..\/modules\/Timezones\/timezones.png","info":"Изменить часовой пояс браузера.","name":"Timezones","show_only_with_database":false,"type":"group"},{"description":"Установить месторасположение браузера по ип","name":"Установить месторасположение браузера по ип","ref":"timezones_set_timezone_and_geolocation_by_ip","show_only_with_database":false},{"description":"Установить часовой пояс","name":"Установить часовой пояс","ref":"timezones_set_timezone","show_only_with_database":false},{"description":"Установить координаты","name":"Установить координаты","ref":"timezones_set_geolocation","show_only_with_database":false},{"description":"Сведения об ип","name":"Сведения об ип","ref":"timezones_ip_info","show_only_with_database":false},{"description":"URL","icon":"..\/..\/modules\/URL\/URL.png","info":"Модуль для работы с URL и не только.","name":"URL","show_only_with_database":false,"type":"group"},{"description":"Нормализовать URL","name":"Нормализовать URL","ref":"normalize_url","show_only_with_database":false},{"description":"Парсить URL","name":"Парсить URL","ref":"parse_url","show_only_with_database":false},{"description":"Создать URL","name":"Создать URL","ref":"generate_url","show_only_with_database":false},{"description":"Изменить URL","name":"Изменить URL","ref":"change_url","show_only_with_database":false},{"description":"Парсить User-Agent","name":"Парсить User-Agent","ref":"parse_ua","show_only_with_database":false},{"description":"Punycode кодировать\/декодировать","name":"Punycode кодировать\/декодировать","ref":"punycode","show_only_with_database":false},{"description":"Url компонент кодировать\/декодировать","name":"Url компонент кодировать\/декодировать","ref":"url_component","show_only_with_database":false},{"description":"Взаимодействие с пользователем","icon":"..\/..\/modules\/UserNotification\/usernotification.png","info":"Воспроизвести звук или попросить пользователя ввести данные.","name":"UserNotification","show_only_with_database":false,"type":"group"},{"description":"Воспроизвести Звук","name":"Воспроизвести Звук","ref":"user_notification_play_sound","show_only_with_database":false},{"description":"Запросить ввод от пользователя","name":"Запросить ввод от пользователя","ref":"user_notification_user_input","show_only_with_database":false},{"description":"Выполнить яваскрипт в веб интерфейсе","name":"Выполнить яваскрипт в веб интерфейсе","ref":"user_notification_web_interface_eval","show_only_with_database":false},{"description":"Ручное управление браузером","name":"Ручное управление браузером","ref":"user_notification_manual_browser_control","show_only_with_database":false},{"description":"Xpath","icon":"..\/..\/modules\/Xpath\/xpath.png","info":"Xpath - удобный способ парсинга html и xml.","name":"Xpath","show_only_with_database":false,"type":"group"},{"description":"Xpath получить xml","name":"Xpath получить xml","ref":"XpathXml","show_only_with_database":false},{"description":"Xpath получить каждый xml","name":"Xpath получить каждый xml","ref":"XpathXmlList","show_only_with_database":false},{"description":"Xpath получить текст","name":"Xpath получить текст","ref":"XpathText","show_only_with_database":false},{"description":"Xpath получить каждый текст","name":"Xpath получить каждый текст","ref":"XpathTextList","show_only_with_database":false},{"description":"Xpath получить количество элементов","name":"Xpath получить количество элементов","ref":"XpathCount","show_only_with_database":false},{"description":"Xpath проверить существование","name":"Xpath проверить существование","ref":"XpathExists","show_only_with_database":false},{"description":"\nAdd BACKPACK","icon":"..\/..\/custom\/BACKPACK\/icon.png","name":"BACKPACK","show_only_with_database":false,"type":"group"},{"description":"Approve","name":"Approve","ref":"BACKPACK_Approve","show_only_with_database":false},{"description":"UnlockPassword","name":"UnlockPassword","ref":"BACKPACK_UnlockPassword","show_only_with_database":false},{"description":"AddNetworks","name":"AddNetworks","ref":"BACKPACK_AddNetworks","show_only_with_database":false},{"description":"ImportWalletToBACKPACK","name":"ImportWalletToBACKPACK","ref":"BACKPACK_ImportWalletToBACKPACK","show_only_with_database":false},{"description":"RABBY","icon":"..\/..\/custom\/RABBY\/icon.png","name":"RABBY","show_only_with_database":false,"type":"group"},{"description":"RABBY_conect","name":"RABBY_conect","ref":"RABBY_RABBY_conect","show_only_with_database":false},{"description":"RABBY_get_wallet_adress","name":"RABBY_get_wallet_adress","ref":"RABBY_RABBY_get_wallet_adress","show_only_with_database":false},{"description":"RABBY_login","name":"RABBY_login","ref":"RABBY_RABBY_login","show_only_with_database":false},{"description":"START SERVISEs","icon":"..\/..\/custom\/START\/icon.png","name":"START","show_only_with_database":false,"type":"group"},{"description":"GOOGLEstart","name":"GOOGLEstart","ref":"START_GOOGLEstart","show_only_with_database":false}

            ]);

    var _A2G = {}

    var CurrentGroup = ""

    for(var i=0; i<_TaskCollection.length; i++)
    {
      var el = _TaskCollection.models[i]
      if(el.get("type") == "group")
      {
        CurrentGroup = el.get("name")
        _G[CurrentGroup]["name"] = el.get("description")
      }else
      {
        _A2G[el.get("ref")] = CurrentGroup
      }
    }

    var _PreserveMainPosition = new PreserveMainPosition();

    var _MultiSelectManager = new MultiSelectManager();

    var _SearchManager = new SearchManager();

    var _GobalModel = new GobalModel();

    var _SelectorModel = new SelectorModel();

    var _MainView = new MainView({collection: _TaskCollection, model: _GobalModel});

    var _ResourceCollection = new ResourceCollection();

    var _VariableCollection = new VariableCollection();

    var _GlobalVariableCollection = new GlobalVariableCollection();

    var _Schema = [];

    var _FunctionCollection = new FunctionCollection();

    var _EmbeddedModel = new EmbeddedModel();
 
    var _LabelCollection = new LabelCollection();

    var _ExpressionEditor = null;

    var ToolboxMaximizeCallback = null;

    var ActionHistory = []

    var BookmarkList = []

    var CurrentGroup = ""

    var CurrentTab = ""

    var BookmarkDrop = null;

    var RemoveBookmarkDrop = null;

    var BookmarkDrag = [];

    var OnHold = false;

    var CurrentDat = null;

    var CurrentParameters = null

    var RecaptchaV3ActionList = []

    /* Notifications */

    function BrowserAutomationStudio_Notify(subject, parameters)
    {
      if(subject == "download")
      {
        BrowserAutomationStudio_NotifyInternal(tr("File is downloading."), tr("BrowserAutomationStudio is downloading file. You can wait for it and obtain file name with \"Wait File Download\" action."), "#!/waitfiledownload")  
      }else if(subject == "upload")
      {
        BrowserAutomationStudio_NotifyInternal(tr("Open file dialog."), tr("BrowserAutomationStudio needs file input. Use \"Open File Result\" action to set upload file. This action must be used <strong>before</strong> dialog appear."), "#!/openfile")  
      }else if(subject == "prompt")
      {
        BrowserAutomationStudio_NotifyInternal(tr("Prompt dialog."), tr("Site has used prompt javascript function. Use \"Prompt Result\" in order to set result."), "#!/promptresult")  
      }else if(subject == "notification")
      {
        BrowserAutomationStudio_NotifyInternal(tr("Notifications."), tr("Site requests permission to show notifications. You can allow or deny it. This action must be used <strong>before</strong> notification is requested."), "#!/notification")  
      }else if(subject == "combobox")
      {
        if(typeof(window.WasComboboxNotification) == "undefined")
        {
          BrowserAutomationStudio_NotifyInternal(tr("Combobox."), tr("In order to automate combobox input you need to use keyboard - start typing option that you want to select and then hit ENTER." ), "")  
          window.WasComboboxNotification = true;
        }
      }else if(subject == "recaptchav3")
      {
        if(RecaptchaV3ActionList.indexOf(parameters) < 0)
        {
          RecaptchaV3ActionList.push(parameters)
          RecaptchaV3ActionList.sort()
        }
        $(".recaptcha-notify").remove()
        BrowserAutomationStudio_NotifyInternal(tr("Recaptcha V3."), tr("It seams that this site uses recaptcha v3(action: ") + "<strong>" + parameters + "</strong>" + tr("). You can resolve it with \"Recaptcha V3\" action."), "#!/recaptchav3", "recaptcha-notify")  
      }else if(subject == "search") 
      {
        BrowserAutomationStudio_NotifyInternal(tr(parameters), tr("Please select any element inside browser and click on the '") + tr(parameters) + tr("' action inside the menu that will appear."), "");
      }
    }
    
    function BrowserAutomationStudio_NotifyInternal(title, text, ref, addclass)
    {
      var finalclass = "toast-bottom-right"
      if(typeof(addclass) == "string")
      {
        finalclass += " " + addclass
      }
      toastr.info(text,title,
      {
        "positionClass": finalclass,
        timeOut: 60000,
        extendedTimeOut: 120000,
        closeButton: true,
        hideDuration: 1,
        onclick: function()
          {
            if(ref)
              _Router.navigate(ref, true);
          }
      })

    }

    function BrowserAutomationStudio_AskEnableModule(ModuleName, ModuleDescription)
    {
      bootbox.confirm(
      {
        title: tr("Enable module ") + ModuleDescription + "?",
        message: tr("In order to use this module, you need to enable it first. It will restart script.") + "<br><br><span style='color:gray;font-size:small'>" + tr("You can disable it later by using Menu -> Module manager.")  + "</span>",
        buttons:
        {
          confirm:
          {
            label: tr('Enable'),
            className: 'btn-success'
          },
          cancel:
          {
            label: tr('Cancel'),
            className: 'btn-primary'
          }
        },
        callback: function (result)
        {
          if(result == 1)
          {
            BrowserAutomationStudio_EnableModule(ModuleName)
          }
        }
      });
    }

    /* Preserve execute type */

    function BrowserAutomationStudio_MultiSelectReport(Report)
    {
      _MultiSelectManager.Report(Report)
    }

    var BrowserAutomationStudio_LastExecuteType = "executeandadd"

    function BrowserAutomationStudio_SetExecuteType()
    {
      if(typeof(BrowserAutomationStudio_LastExecuteType) == "undefined")
      {
        BrowserAutomationStudio_LastExecuteType = "executeandadd"
      }

      const $executeType = $('#executeType');
      $executeType.find(`[data-action="${BrowserAutomationStudio_LastExecuteType}"]`).trigger('click');
      $executeType.removeClass('open');
      $executeType.removeClass('show');
    }

    /* Test path */


    var BrowserAutomationStudio_TestPathLastPath = ""

    function BrowserAutomationStudio_TestPathInternal()
    {
      var clear_highlight = true;
      var path = "page().highlight('')!" + "\n" + "section_start(\"test\",-3)!"
      if($("#selector-input").length > 0 && $("#selector-input").val().length > 0)
      {

        var loader = new ResourceLoader();
        var p = GetPath(loader,true,true)
        path = p["path"] + ".highlight(_SELECTOR)!" + "\n" + "section_start(\"test\",-3)!"
        var selector = "";
        if(p["query"])
        {
          selector = ";_SELECTOR=" + p["query"] + ";"
        }
        path = loader.GetAdditionalData() + selector + path
        clear_highlight = false
      }
      
      if(typeof(BrowserAutomationStudio_TestPathLastPath) == "undefined")
        BrowserAutomationStudio_TestPathLastPath = ""


      if(BrowserAutomationStudio_TestPathLastPath != path)
      {
        BrowserAutomationStudio_TestPathFirstTry = false

        var prev = BrowserAutomationStudio_TestPathLastPath

        BrowserAutomationStudio_TestPathLastPath = path

        if(prev != "" && typeof(OnHold) == "boolean" && OnHold == false)
        {
          if(clear_highlight)
          {
            BrowserAutomationStudio_SetPathCount("0")
            BrowserAutomationStudio_ClearHighlight()  
          }else
          {
            BrowserAutomationStudio_SetPathCount("")
            BrowserAutomationStudio_Execute(path)
          }
        }
      }
    }

    function BrowserAutomationStudio_SetPathCount(count)
    {
      if(count.toString().length > 0)
      {
        $("#PathCount").css("visibility","visible")
        $("#PathCount").html(count)
      }else
      {
        $("#PathCount").css("visibility","hidden")
      }
      
    }


    /* Bookmarks history */
    function BrowserAutomationStudio_DisableDragFunction(ev)
    {
        var img = document.createElement('img')
        img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
        ev.dataTransfer.setDragImage(img, 0, 0)
    }

    function BrowserAutomationStudio_SaveBookmarks()
    {
      if(CurrentTab == "bookmarks")
      {
        BookmarkList = []
        $(".leftactionpaneltitlebody a").toArray().forEach(function(el){
          var ref = $(el).attr("data-ref")
          BookmarkList.push(ref)
        })
        BrowserAutomationStudio_PreserveInterfaceState();
        
      }
      
    }

    function BrowserAutomationStudio_InstallBookmarks()
    {
      if(BookmarkDrag)
      {
        BookmarkDrag.forEach(function(el){
          el.destroy()
        })
      }
      BookmarkDrag = []
      $(".panel-group").toArray().forEach(function(el){
        el.ondragstart = BrowserAutomationStudio_DisableDragFunction
        BookmarkDrag.push(Sortable.create(el, {
          group: {
            name: 'input',
            pull: "clone",
            put: function(e){return false;}
          },
          draggable: ".toolbutton",
          onStart: function () {
            $(".tool").removeClass("toolhover")
          },

          onEnd: function () {
            $(".tool").removeClass("toolhover")
            BrowserAutomationStudio_SaveBookmarks();
          },
          ghostClass: 'ghost',

          sort: false,
          animation: 70
        }))
      })
    }


    function BrowserAutomationStudio_ShowHideHistory()
    {
      if(CurrentTab.length == 0)
      {
        BrowserAutomationStudio_RenderHistory();
        
        return;
      }

      if(CurrentTab == "bookmarks")
      {
        BrowserAutomationStudio_RenderHistory();
        return;
      }

      if(CurrentTab == "history")
      {
        BrowserAutomationStudio_HideHistoryBookmarks();
        return;
      }
      
    }

    function BrowserAutomationStudio_ShowHideBookmarks()
    {

      if(CurrentTab.length == 0)
      {
        BrowserAutomationStudio_RenderBookmarks();
        return;
      }

      if(CurrentTab == "history")
      {
        BrowserAutomationStudio_RenderBookmarks();
        return;
      }

      if(CurrentTab == "bookmarks")
      {
        BrowserAutomationStudio_HideHistoryBookmarks();
        return;
      }
    }

    function BrowserAutomationStudio_FillGotoLabels()
    {
      if(_LabelCollection.toJSON().length == 0)
        //$("#LabelList").html("<div style='margin-bottom:2px'>" + tr("No label found. Create one with 'Set label' action.") + "</div>")
        $("#LabelListInfo").html(_.template($('#info').html())({description: tr(`No label found. Create one with 'Set label' action.`), color: "gray"}))

      else
      {
        //$("#LabelList").html("<div style='margin-bottom:2px'>" + tr("Choose one of following labels") + ":</div>")
        $("#LabelListInfo").html(_.template($('#info').html())({description: tr(`Choose one of following labels`), color: "gray"}))
        _LabelCollection.toJSON().sort(function(a, b) {
          return a["name"].localeCompare(b["name"]);
        }).forEach(function(elem){
          var el = $('<button type="button" class="btn btn-default btn-sm"><i class="fa fa-tag"></i> <span class="text-label"></span></button>')
          if($("#LabelName").val() == elem["name"])
          {
            el.removeClass("btn-default").addClass("btn-primary")
          }
          el.find(".text-label").text(elem["name"])
          $(el).click(function(){
            $("#LabelName").val(elem["name"])
            $("#ok").click()
          })
          
          $("#LabelList").append(el)
        })
      }
    }

    function BrowserAutomationStudio_HideHistoryBookmarks()
    {
      $(".leftactionpaneltitledrop").hide()

      $(".leftactionpanel").hide()
      $(".mainscreen").css('margin-left','37px');
      CurrentTab = ""
      BrowserAutomationStudio_PreserveInterfaceState()
      $("#showhistory").removeClass("btn-primary").removeClass("btn-default").addClass("btn-default")
      $("#showbookmarks").removeClass("btn-primary").removeClass("btn-default").addClass("btn-default")

    }

    function BrowserAutomationStudio_RenderBookmarks()
    {
      $(".leftactionpaneltitledrop").hide()
      $(".leftactionpanel").show()
      $(".mainscreen").css('margin-left','259px');
        
      $(".leftactionpaneltitle").html('<div>' + tr('Bookmarks') + '</div><div style="color:gray">' + tr('Drag actions here') + '</div>')
      CurrentTab = "bookmarks"; 
      BrowserAutomationStudio_PreserveInterfaceState()
      

      $("#showhistory").removeClass("btn-primary").removeClass("btn-default").addClass("btn-default")
      $("#showbookmarks").removeClass("btn-primary").removeClass("btn-default").addClass("btn-primary")

      var render = ""
      BookmarkList.forEach(function(el){
        var name = ""
        if(_A[el])
        {
            name = tr(_A[el]["name"])
        }
        render += '<a class="toolbutton" href="#!/' + el + '" data-ref="' + el + '"><div class="tool"><span class="toolinner">' + name + '</span></div></a>'
      })


      $(".leftactionpaneltitlebody").html(render)

      if(BookmarkDrop)
        BookmarkDrop.destroy()

      BookmarkDrop = null

      if(RemoveBookmarkDrop)
        RemoveBookmarkDrop.destroy()

      RemoveBookmarkDrop = null

      var leftactionpaneltitledrop = $(".leftactionpaneltitledrop")
      if(leftactionpaneltitledrop.length > 0)
      {
        $(".leftactionpaneltitledrop")[0].ondragstart = BrowserAutomationStudio_DisableDragFunction

        RemoveBookmarkDrop = Sortable.create($(".leftactionpaneltitledrop")[0], {
          group: {
            name: 'output',
            put: function(e)
            {
              return true;
            }
          },
          onAdd: function (evt) {
            var el = evt.item;
            el.parentNode.removeChild(el);
          },
          onEnd: function () {
            $(".tool").removeClass("toolhover")
            BrowserAutomationStudio_SaveBookmarks();
          },
          animation: 70
        });
      }



      var leftactionpaneltitlebody = $(".leftactionpaneltitlebody")
      if(leftactionpaneltitlebody.length > 0)
      {
        $(".leftactionpaneltitlebody")[0].ondragstart = BrowserAutomationStudio_DisableDragFunction

        BookmarkDrop = Sortable.create($(".leftactionpaneltitlebody")[0], {
          group: {
            name: 'output',
            put: function(e){
              return true;
            }
          },

          onStart: function (e) {
            $(".leftactionpaneltitledrop").show()
          },

          onEnd: function (e) {
            $(".leftactionpaneltitledrop").hide()
            BrowserAutomationStudio_SaveBookmarks();

          },
          onAdd: function (e) {
            var item = e.item;
            if(BookmarkList.indexOf($(item).attr("data-ref")) >= 0)
              item.parentNode.removeChild(item);

          },

          ghostClass: 'ghost',
          animation: 70
        });
      }

    }

    function BrowserAutomationStudio_RenderHistory()
    {
      $(".leftactionpaneltitledrop").hide()
      $(".leftactionpanel").show()
      $(".mainscreen").css('margin-left','259px');
        
      $(".leftactionpaneltitle").html('<div>' + tr('History') + '</div><div style="color:gray">' + tr('Your recent actions') + '</div>')
      CurrentTab = "history";
      BrowserAutomationStudio_PreserveInterfaceState()
      $("#showhistory").removeClass("btn-primary").removeClass("btn-default").addClass("btn-primary")
      $("#showbookmarks").removeClass("btn-primary").removeClass("btn-default").addClass("btn-default")
      
      var data = "";

      _.each(ActionHistory, function(Action) {
        if(_A[Action])
        {
          data += '<a href="#!/' + Action + '"><div class="tool"><span class="toolinner">' + tr(_A[Action]["name"]) + '</span></div></a>'
        }
        
      })

      $(".leftactionpaneltitlebody").html(data)

      if(BookmarkDrop)
        BookmarkDrop.destroy()

      BookmarkDrop = null
      
    }




    function BrowserAutomationStudio_ReturnToMainFunction()
    {      
      $(".mainscreen *[data-group]").hide()
      $(".mainscreen *[data-group-all").show()
      $(".actions")[0].scrollTop = 0
      CurrentGroup = ""
    }

    function BrowserAutomationStudio_GotoGroup(group)
    {
        $(".mainscreen *[data-group]").hide()
        $(".mainscreen *[data-group=" + group + "]").show()
        $(".actions")[0].scrollTop = 0
        CurrentGroup = group
    }


    // Action history

    _Router.on("route", function(route, params) {
      if(route != "main" && _A[route] && _A[route]["class"] != "browser")
      {
        var index = ActionHistory.indexOf(route)
        if(index >= 0)
          ActionHistory.splice(index,1)

        ActionHistory.splice(0,0,route);
        ActionHistory = ActionHistory.slice(0,10);
        BrowserAutomationStudio_PreserveInterfaceState();
      }
    });

    function BrowserAutomationStudio_PreserveInterfaceState()
    {
      $(".toolbookmark").removeClass("toolbookmark")
      BookmarkList.forEach(function(name){
        var el = $(`.mainscreen [data-ref="${name}"]`)
        el.addClass("toolbookmark")          
      })
      BrowserAutomationStudio_SaveInterfaceState(JSON.stringify({
        recent: BasDialogsLib.store.save(), 
        bookmarks: BookmarkList,
        history: ActionHistory,
        tab: CurrentTab
      }));
    }

    function BrowserAutomationStudio_LoadInterfaceState(interface_json)
    {
      try
      {
        var interface_obj = JSON.parse(interface_json)
        BasDialogsLib.store.load(interface_obj["recent"])
        ActionHistory = interface_obj["history"]
        BookmarkList = interface_obj["bookmarks"]
        var tab = interface_obj["tab"] || ""
        if(tab == "history")
        {
          BrowserAutomationStudio_RenderHistory();
        }else if (tab == "bookmarks")
        {
          BrowserAutomationStudio_RenderBookmarks();
        }
        BookmarkList.forEach(function(name){
          var el = $(`.mainscreen [data-ref="${name}"]`)
          el.addClass("toolbookmark")          
        })

      }catch(e){}
    }


    function BrowserAutomationStudio_MaximizeCallback()
    {
      if(ToolboxMaximizeCallback)
      {
        ToolboxMaximizeCallback();
        ToolboxMaximizeCallback = null
      }
    }

    Backbone.history.start();

    $( document ).ready(function() {
        document.documentElement.style.zoom = _Z + '%';
        /*$( document.body ).click(function(){
          $("#searchinput").focus()  

        })*/

        /*$( document ).click(function(){
          $(".dropdown-menu-css-options").hide()
          $(".dropdown-menu-match-xpath-at-css-options").hide()
        })*/

        $(window).on('popstate', function(event) {
          $('.modal').modal('hide');
        });

        $( window ).resize(function() {
          $(".search").css("height", window.innerHeight * (100.0 / _Z) - 40 + "px");
          $(".actions").css("height", window.innerHeight * (100.0 / _Z) - 40 + "px");
          $(".leftactionpanel").css("height", window.innerHeight * (100.0 / _Z) - 45 + "px")
          $(".leftactionpaneltitlebody").css("min-height", window.innerHeight * (100.0 / _Z) - 95 + "px")

        });

        $(document).keyup(function(e) {
          if($("#NodeAll").length>0)
            return
          if (e.keyCode == 27)
          {
            if ($(".search").is(":visible"))
            {
              _SearchManager.hide();
            }
            /*if($('.modal.in').length > 0)
            {
              $('#' + $('.modal.in').attr("id")).modal('hide');
              return;
            }

            if($("#expressioneditor-container").is(":visible"))
            {
              $("#expressioneditor-cancel").click()
              return;
            }

            if($(".returntomain").is(":visible") && CurrentGroup != "")
            {
              BrowserAutomationStudio_ReturnToMainFunction();
              return;
            }
            
            var el = $("#backtomain")
            if(el.length > 0)
            {
              el[0].click()
            }*/
            
            }
          if (e.keyCode == 13)
          {
            if( e.target.nodeName == "TEXTAREA" ) return

            if($('.modal.in').length > 0)
            {
              return;
            }

            if($('#modalDialogContainer').length > 0) 
            {
              return;
            }

            if($("#expressioneditor-container").is(":visible"))
            {
              return;
            }

            if($(".returntomain").is(":visible") && CurrentGroup != "")
            {
              return;
            }
            
            var el = $("#ok")
            if(el.length > 0)
            {
              el[0].click()
            }

          }
        });
    });

    function Invalid(data)
    {
      bootbox.alert({title:tr("Unable to save action"), message:"<div class='text-danger'>" + data + "</div>"});
      BrowserAutomationStudio_TriggerEvent('toolbox.editFail', JSON.stringify(data));
    }

    function je(data)
    {
      return data
      .replace(new RegExp("\\\\","g"),"\\u005c")
      .replace(new RegExp("<","g"),"\\u003c")
      .replace(new RegExp(">","g"),"\\u003e")
      .replace(new RegExp("\"","g"),"\\u0022")
      .replace(new RegExp("'","g"),"\\u0027")
      .replace(new RegExp("&","g"),"\\u0026")
      .replace(new RegExp("{","g"),"\\u007b")
      .replace(new RegExp("}","g"),"\\u007d")
      .replace(new RegExp("\\n","g"),"\\n")
      .replace(new RegExp("\\r","g"),"\\r")
      .replace(new RegExp("\\)\\!","g"),"\\)\\!")
    }

    function jsort(json)
    {
      return json.sort(function (a, b) {
        if (a["name"].toLowerCase() > b["name"].toLowerCase()) {
          return 1;
        }
        if (a["name"].toLowerCase() < b["name"].toLowerCase()) {
          return -1;
        }
        return 0;
      })
    }

    function utf8_to_b64( str ) {
        return window.btoa(unescape(encodeURIComponent( str )));
    }

    function b64_to_utf8( str ) {
        return decodeURIComponent(escape(window.atob( str )));
    }

    function fromhex(hex,str)
    {
      var str = "";
      try
      {
        str = decodeURIComponent(hex.replace(/(..)/g,'%$1'))
      }
      catch(e)
      {
        str = hex
      }
      return str
    }


    function tohex(str,hex)
    {
      try
      {
        hex = unescape(encodeURIComponent(str)).split('').map(function(v){
          return v.charCodeAt(0).toString(16)
        }).join('')
      }
      catch(e){
        hex = str
      }
      return hex
    }


    function BrowserAutomationStudio_GetWaitCode()
    {
      var usewaiter = $("#use-waiter")

      if(usewaiter.length > 0 && usewaiter.attr("data-enabled") == "true")  
      {
        return "\n" + timeout_waiter() + "\nwait_async_load()!"
      }

      return "";
    }

    function BrowserAutomationStudio_MouseCustom(x,y)
    {

      if($("#Check2").is(':checked'))
      {
        return "_type(" + JSON.stringify("<CONTROL><MOUSELEFT>") + ",100)!";
      }

      var type = $("#Select").val();
      
      if(type == "left")
      {
        return "mouse(" + x + "," + y + ")!"
      }

      var text = ""

      /*if($("#MouseClickShift").is(':checked'))
      {
        text += "<SHIFT>"
      }

      if($("#MouseClickCtrl").is(':checked'))
      {
        text += "<CONTROL>"
      }*/

      

      if(type == "right")
      {
        text += "<MOUSERIGHT>" 
      }

      if(type == "double")
      {
        text += "<MOUSEDOUBLE>" 
      }


      return "_type(" + JSON.stringify(text) + ",100)!";


      //return "mouse_custom(" + x + "," + y + "," + JSON.stringify($("#Select").val()) + ", " + (($("#MouseClickShift").is(':checked')) ? "true" : "false") + ", " + (($("#MouseClickCtrl").is(':checked')) ? "true" : "false") + ")!";
    }

    function timeout_general()
    {
      var usewaiter = $("#use-timeout")
      if(usewaiter.length == 0)
        return ""
      var timeout_value = usewaiter.attr("data-value")
        if(timeout_value.length == 0)
          timeout_value = "0"

      timeout_value = parseInt(timeout_value) * 1000

      if(usewaiter.length > 0 && usewaiter.attr("data-enabled") == "true" && timeout_value != "0")  
      {
        return "general_timeout_next(" + timeout_value + ")"
      }

      return "" 
    }

    function timeout_solver()
    {
      var usewaiter = $("#use-timeout")
      if(usewaiter.length == 0)
        return ""
      var timeout_value = usewaiter.attr("data-value")
        if(timeout_value.length == 0)
          timeout_value = "0"

      timeout_value = parseInt(timeout_value) * 1000

      if(usewaiter.length > 0 && usewaiter.attr("data-enabled") == "true" && timeout_value != "0")  
      {
        return "solver_timeout_next(" + timeout_value + ")"
      }

      return "" 
    }

    function timeout_value()
    {
      var usewaiter = $("#use-timeout")
      if(usewaiter.length == 0)
        return 0
      var timeout_value = usewaiter.attr("data-value")
        if(timeout_value.length == 0)
          timeout_value = "0"

      timeout_value = parseInt(timeout_value) * 1000

      if(usewaiter.length > 0 && usewaiter.attr("data-enabled") == "true" && timeout_value != "0")  
      {
        return timeout_value
      }

      return 0 
    }

    function timeout_waiter()
    {
      var usewaiter = $("#use-timeout")
      if(usewaiter.length == 0)
        return ""
      var timeout_value = usewaiter.attr("data-value")
        if(timeout_value.length == 0)
          timeout_value = "0"

      timeout_value = parseInt(timeout_value) * 1000

      if(usewaiter.length > 0 && usewaiter.attr("data-enabled") == "true" && timeout_value != "0")  
      {
        return "waiter_timeout_next(" + timeout_value + ")"
      }

      return "" 
    }

    function BrowserAutomationStudio_GetTargetCode(loader)
    {
      var usetarget = $("#use-target")

      if(usetarget.length > 0 && usetarget.attr("data-enabled") == "true")  
      {
        var TargetUrl = GetInputConstructorValue("TargetUrl",loader);
        var TargetTabNumber = GetInputConstructorValue("TargetTabNumber",loader);
        return "\n_set_target({url:" + TargetUrl["updated"] + ",tab:" + TargetTabNumber["updated"] + "})\n"
      }

      return "";
    }

    function BrowserAutomationStudio_GetMoveJson(loader)
    {
      var usemove = $("#use-move")

      if(usemove.length > 0 && usemove.attr("data-enabled") == "true")  
      {
        var Speed = GetInputConstructorValue("Speed",loader);
        var Gravity = GetInputConstructorValue("Gravity",loader);
        var Deviation = GetInputConstructorValue("Deviation",loader);
        return ' {"speed": ' + Speed["updated"] + ',"gravity": ' +  Gravity["updated"] + ',"deviation": ' + Deviation["updated"] + '} '
      }

      return ' {} ';
    }

    function BrowserAutomationStudio_GetEmulationTarget(target, target2)
    {
      if(target && target2)
      {
        return `{x: (${target}), y: (${target2})}`;
      }else if(_SelectorModel.get("is_image"))
      {
        return '_image()';
      }else
      {
        return '_SELECTOR';
      }
    }

    function BrowserAutomationStudio_GetEmulationData(loader, target, target2)
    {
      var collectParams = function(names, arr = []){
        for(var name of names){
          var value = GetInputConstructorValue(name, loader)["updated"];
          if(value !== '""'){
            arr.push(`${name}: (${value})`);
          }
        }
        return arr;
      }

      var emulationSettings = collectParams(["time", "accuracy", "intensity"], ['useGeneral: true', `target: ${BrowserAutomationStudio_GetEmulationTarget(target, target2)}`]);

      var actions = collectParams(["sleep", "longElementMove", "shortElementMove", "scroll", "randomMove", "microMove", "goingBeyond", "moveAlongText"]);
      if(actions.length){
        emulationSettings.push(`useActions: {${actions.join(', ')}}`);
      }

      collectParams(["longMax", "shortMax", "miss", "delay", "targetScroll", "targetDelay", "filters", "hoverMode", "maxRepeatSkip", "overlapByPoints", "reverseScroll"], emulationSettings);

      return `{${emulationSettings.join(', ')}}`;
    }

    function BrowserAutomationStudio_GetScrollParams(loader)
    {
      var params = [];
      var usescrollparams = $("#use-scroll-params")

      if(usescrollparams.length > 0 && usescrollparams.attr("data-enabled") == "true")  
      {
        var scrollSpeed = GetInputConstructorValue("scrollSpeed", loader);
        params.push(`speed: (${scrollSpeed["updated"]})`);
        var minPause = GetInputConstructorValue("minPause", loader);
        var maxPause = GetInputConstructorValue("maxPause", loader);
        params.push(`pause: {min: (${minPause["updated"]}), max: (${maxPause["updated"]})}`);
        var moveChance = GetInputConstructorValue("moveChance", loader);
        var moveInScrollDirection = $("#moveInScrollDirection").is(':checked');
        var moveBeyond = GetInputConstructorValue("moveBeyond", loader);
        var moveMinDistance = GetInputConstructorValue("moveMinDistance", loader);
        var moveMaxDistance = GetInputConstructorValue("moveMaxDistance", loader);
        var moveSpeed = GetInputConstructorValue("moveSpeed", loader);
        var moveGravity = GetInputConstructorValue("moveGravity", loader);
        var moveDeviation = GetInputConstructorValue("moveDeviation", loader);
        params.push(`move: {chance: (${moveChance["updated"]}), in_scroll_direction: ${moveInScrollDirection}, beyond: (${moveBeyond["updated"]}), min_distance: (${moveMinDistance["updated"]}), max_distance: (${moveMaxDistance["updated"]}), speed: (${moveSpeed["updated"]}), gravity: (${moveGravity["updated"]}), deviation: (${moveDeviation["updated"]})}`);
      }

      return `{${params.join(', ')}}`;
    }

    function BrowserAutomationStudio_UsesWaitCode()
    {
      var usewaiter = $("#use-waiter")
      if(usewaiter.length > 0 && usewaiter.attr("data-enabled") == "true")  
        return true
      return false
    }

    function BrowserAutomationStudio_ThreadNumberEdit()
    {
        _Router.navigate("#!/threadnumber", true);
    }

    function BrowserAutomationStudio_RunFunction(FunctionName)
    {
        _Router.navigate("#!/executefunction", true);
        $("#FunctionName").val(FunctionName)
        _MainView.funcchange(FunctionName)
    }

    function BrowserAutomationStudio_OpenAction(Name)
    {
        if ($("#expressioneditor-container").is(":visible")) {
          $("#expressioneditor-cancel").click();
        }

        $('.modal').modal('hide');

        _Router.navigate("#!/" + Name, true);
    }
    
    function BrowserAutomationStudio_RunFunctionSeveralThreads(FunctionName)
    {
        _Router.navigate("#!/executefunctioninseveralthreads", true); 
        $("#FunctionName").val(FunctionName)
    }

    function BrowserAutomationStudio_RunFunctionAsync(FunctionName)
    {
        _Router.navigate("#!/asyncfunction_call", true); 
        $("#FunctionName").val(FunctionName)
        _MainView.funcchange(FunctionName)
    }

    function BrowserAutomationStudio_SuccessNumberEdit()
    {
        _Router.navigate("#!/successnumber", true);
    }

    function BrowserAutomationStudio_FailNumberEdit()
    {
        _Router.navigate("#!/failnumber", true);
    }

    function BrowserAutomationStudio_SaveControls(additional)
    {
      var loader = new ResourceLoader();

      var ControlsText = {s:_GobalModel.get("state"),v: 1}

      if(additional)
        ControlsText = Object.assign({},ControlsText, additional);

      ControlsText["f"] = _Filter.GetModels()
      
      var usewaiter = $("#use-waiter")
      if(usewaiter.length > 0 && usewaiter.attr("data-enabled") == "true")  
      {
        ControlsText["uw"] = "1"
      }else
      {
        ControlsText["uw"] = "0"
      }

      var usetarget = $("#use-target")
      if(usetarget.length > 0 && usetarget.attr("data-enabled") == "true")  
      {
        ControlsText["ut"] = "1"
      }else
      {
        ControlsText["ut"] = "0"
      }

      var usetimeout = $("#use-timeout")
      if(usetimeout.length > 0 && usetimeout.attr("data-enabled") == "true")  
      {
        ControlsText["uto"] = "1"
        ControlsText["uti"] = $("#timeout-val").html()
      }else
      {
        ControlsText["uto"] = "0"
      }

      var usemove = $("#use-move")
      if(usemove.length > 0 && usemove.attr("data-enabled") == "true")  
      {
        ControlsText["um"] = "1"
      }else
      {
        ControlsText["um"] = "0"
      }

      var useemulation = $("#use-emulation")
      if(useemulation.length > 0 && useemulation.attr("data-enabled") == "true")  
      {
        ControlsText["ue"] = "1"
      }else
      {
        ControlsText["ue"] = "0"
      }

      var usescrollparams = $("#use-scroll-params")
      if(usescrollparams.length > 0 && usescrollparams.attr("data-enabled") == "true")  
      {
        ControlsText["usp"] = "1"
      }else
      {
        ControlsText["usp"] = "0"
      }

      var ControlList = $("*[data-preserve=true]")
      var Elements = []

      for(var i = 0;i<ControlList.length;i++)
      {
        var el = $(ControlList[i])
        var NewElement = {}
        var id = el.attr("data-preserve-id")
        var type = el.attr("data-preserve-type")
        var json = el.attr("data-preserve-json")


        NewElement["id"] = id
        NewElement["type"] = type
        NewElement["json"] = json


        if(type == "constr")
        {
          if($("#" + id).attr("data-is-code-editor") == "true")
          {
            NewElement["data"] = window[id].Editor.getValue()
            NewElement["class"] = "expression"
          }
          else
          {
            NewElement["data"] = GetInputConstructorValue(id,loader)["original"]
            NewElement["class"] = $("*[data-selector-id=" + id + "]").html()
            NewElement["is_def"] = IsDefaultValueUsed(id)
          }
        }else if(type == "filter")
        {
          NewElement["data"] = _Filters.getFilters(id)
          NewElement["is_def"] = !NewElement["data"].length
        }else if(type == "var")
        {
          NewElement["data"] = $("#" + id).val()
          NewElement["is_def"] = IsDefaultVariableUsed(id)

        }else if(type == "select")
        {
          NewElement["data"] = $("#" + id).val()
          NewElement["is_def"] = IsDefaultSelectUsed(id)
        }else if(type == "check")
        {
          NewElement["data"] = $("#" + id).prop("checked")
          NewElement["is_def"] = IsDefaultCheckUsed(id)

        }else if(type == "text")
        {
          NewElement["data"] =  $("#" + id).val()
        }

        Elements.push(NewElement)
      }
      ControlsText["d"] = Elements
      if($(".path").length>0 || $(".path2").length>0)
      {
        var all = {}
        var json = _SelectorModel.toJSON()
        all["is_image"] = json["is_image"]
        if(json["is_image"])
        {
          //all["image_data"] = json["image_data"]
          /*all["scroll"] = json["scroll"]
          all["threshold"] = json["threshold"]*/
        }else
        {
          var current = json["current"]

          if(json["is_ai_generated"] === true)
          {
            all["ig"] = true
            all["gd"] = json["ai_generated_name"]
          }
          
          all["css"] = json["css"]
          all["version"] = json["version"]
          all["css1"] = ("css1" in json) ? json["css1"] : ""
          all["css2"] = ("css2" in json) ? json["css2"] : ""
          all["css3"] = ("css3" in json) ? json["css3"] : ""
          all["current"] = current
          all["match"] = json["match"]
          all["xpath"] = json["xpath"]
          all["at"] = json["mousex"] + ", " + json["mousey"]

          if(current!="none")
            all[current] = $("#selector-input").val()

          
        }
        if($("#checkbox-wait-element").length > 0)
          all["we"] = $("#checkbox-wait-element").prop("checked")
        
        if($("#checkbox-fail-action").length > 0)
          all["fa"] = $("#checkbox-fail-action").prop("checked")

        ControlsText["p"] = all
      }
      // console.log(ControlsText);
      ControlsText = "/*Dat:" + utf8_to_b64(JSON.stringify(ControlsText)) +  "*/\n";
      BasDialogsLib.store.addElements(Elements);
      return ControlsText;
    }

    function BrowserAutomationStudio_EditStart(dataraw)
    {

      _SelectorModel.set("is_editing",true)
      var data = JSON.parse(b64_to_utf8(dataraw))
      CurrentDat = data

      _SelectorModel.set("is_ai_generated",false)
      _SelectorModel.set("ai_generated_name","")
      
      if("p" in data)
      {
        var selector = data["p"]
        _SelectorModel.set("is_image",selector["is_image"])

        if(selector["is_image"])
        {
          //console.log(data["d"])
          //_SelectorModel.set("image_data",data["d"]["ImageBase64"]["data"])
          /*_SelectorModel.set("threshold",selector["threshold"])
          _SelectorModel.set("scroll",selector["scroll"])*/
        }else
        {
          
          if(selector["ig"] === true)
          {
            _SelectorModel.set("is_ai_generated",true)
            _SelectorModel.set("ai_generated_name",selector["gd"])
          }

          _SelectorModel.set("css",selector["css"])

          if("css1" in selector)
            _SelectorModel.set("css1",selector["css1"])
          else
            _SelectorModel.set("css1","")
          
          if("css2" in selector)
            _SelectorModel.set("css2",selector["css2"])
          else
            _SelectorModel.set("css2","")
          
          if("css3" in selector)
            _SelectorModel.set("css3",selector["css3"])
          else
            _SelectorModel.set("css3","")

          _SelectorModel.set("match",selector["match"])
          _SelectorModel.set("xpath",selector["xpath"] || "")
          var split = selector["at"].split(",")
          _SelectorModel.set("mousex",split[0].replace(/\s/g, ''))
          _SelectorModel.set("mousey",split[split.length - 1].replace(/\s/g, ''))
          _SelectorModel.set("current",selector["current"])
          _SelectorModel.set("version",selector["version"])
        }

      }

      $('.modal').modal('hide');

      _GobalModel.set({ state: data["s"] });
      _GobalModel.attributes["isedit"] = true

      try
      {
        for(var i = 0;i<data["d"].length;i++)
        {
          var el = data["d"][i]

          if(el.id == "FunctionName")
          {

            _MainView.funcchange(el.data)
            break;
          }
        }
      }catch(e)
      {

      }

      if(["cachemaskallow","cachemaskdeny","requestmaskdeny","requestmaskallow","getstatus","isloaded","getfromcache","getallcache","waitload"].includes(data["s"])) // Replacing masks with filters where needed
      {
        try
        {
          if(!data["d"].some((ell) => ell.id == 'urlFilters'))
          {
            let ell = data["d"].find((ell) => ell.id === (data["s"] === "waitload" ? 'Wait' : 'Value'))

            if(ell && ell.data !== "*")
            {
              _Filters.addFilter('urlFilters', {match: true, type: 'Mask', value: {
                data: ell.data,
                class: ell.class
              }})
            }
          }
        }catch(e)
        {

        }
      }

      $("#executeType").hide()

      if("p" in data)
      {
        if(typeof(selector["we"]) != "undefined")
        {
          $("#checkbox-wait-element").prop("checked", selector["we"]);
        }
        
        if(typeof(selector["fa"]) != "undefined")
        {
          $("#checkbox-fail-action").prop("checked", selector["fa"]);
        }

        if(selector["ig"] === true)
        {
          $("#selector-ai").show()
          $("#selector-ai-name").text(selector["gd"])
        }

      }

      if(data["uw"] == "1")
      {
        $("#use-waiter").attr("data-enabled","true")
        $("#use-waiter").removeClass().addClass("use-waiter-enabled")
      }else if(data["uw"] == "0")
      {
        $("#use-waiter").attr("data-enabled","false")
        $("#use-waiter").removeClass().addClass("use-waiter-disabled")
      }

      if(data["ut"]  == "1")
      {
        $("#use-target").attr("data-enabled","true")
        $("#use-target").removeClass().addClass("use-target-enabled")
        $("#target-data").show()
      }else if(data["ut"] == "0")
      {
        $("#use-target").attr("data-enabled","false")
        $("#use-target").removeClass().addClass("use-target-disabled")
        $("#target-data").hide()
      }

      if(data["um"]  == "1")
      {
        $("#use-move").attr("data-enabled","true")
        $("#use-move").removeClass().addClass("use-move-enabled")
        $("#move-data").show()
      }else if(data["um"] == "0")
      {
        $("#use-move").attr("data-enabled","false")
        $("#use-move").removeClass().addClass("use-move-disabled")
        $("#move-data").hide()
      }

      if(data["ue"]  == "1")
      {
        $("#use-emulation").attr("data-enabled","true")
        $("#use-emulation").removeClass().addClass("use-emulation-enabled")
        $("#emulation-data").show()
      }else if(data["ue"] == "0")
      {
        $("#use-emulation").attr("data-enabled","false")
        $("#use-emulation").removeClass().addClass("use-emulation-disabled")
        $("#emulation-data").hide()
      }

      if(data["usp"]  == "1")
      {
        $("#use-scroll-params").attr("data-enabled","true")
        $("#use-scroll-params").removeClass().addClass("use-scroll-params-enabled")
        $("#scroll-params-data").show()
      }else if(data["usp"] == "0")
      {
        $("#use-scroll-params").attr("data-enabled","false")
        $("#use-scroll-params").removeClass().addClass("use-scroll-params-disabled")
        $("#scroll-params-data").hide()
      }

      var timeout_value = 0
      if(data["uto"]  == "1")
        timeout_value = parseInt(data["uti"])
      

      $("#use-timeout").attr("data-value", (typeof(timeout_value) != "undefined" && timeout_value > 0) ? timeout_value : "0")
                        .attr("class", ((typeof(timeout_value) != "undefined" && timeout_value > 0) ? "" : "use-timeout-disabled") + " trtitle")
                        .attr("data-enabled", (typeof(timeout_value) != "undefined" && timeout_value > 0) ? "true" : "false")

      $("#timeout-val").html((typeof(timeout_value) != "undefined" && timeout_value > 0) ? ("" + timeout_value) : "")
      if(typeof(timeout_value) != "undefined" && timeout_value > 0)
      {
        $("#timeout-is-default").hide()
      }else
      {
        $("#timeout-is-default").show()
      }


      
      for(var i = 0;i<data["d"].length;i++)
      {
        var el = data["d"][i]
        
        var id = el["id"]
        var type = el["type"]
        var _data = el["data"]

        if(id == "ImageBase64")
        {
          _SelectorModel.set("image_data",_data)
          $("#ImageData").attr("src","data:image/png;base64," + _SelectorModel.get("image_data"))
        }

        if(type == "constr")
        {
          
          var _class = el["class"]
          $("*[data-preserve-id=" + id + "] a." + _class).click()
          $("*[data-preserve-id=" + id + "]").attr("data-preserve-json",el["json"])
          if(_class == "int")
          {
            $("#" + id + "_number").val(parseInt(_data))
          }else
          {
            if($("#" + id).attr("data-is-code-editor") == "true")
            {
              if(!window[id])
                window[id] = {Editor: null, InitialValue: ""}
              if(window[id].Editor)
                window[id].Editor.setValue(_data)
              window[id].InitialValue = _data

            }
            else
            {
              $("#" + id).val(_data)
              $("#" + id).trigger("change")
            }
          }

        }else if(type == "filter")
        {
          _Filters.restore(id, _data)
        }else if(type == "check")
        {
          var attr = $("#" + id).attr("onclick")
          if(typeof(attr) == "string" && attr.length > 0)
          {
            if($("#" + id).prop("checked") != _data)
              $("#" + id).trigger("click")
          }else
          {
            $("#" + id).prop("checked",_data);
            $("#" + id).trigger("change")
          }
        }else if(type == "select")
        {
          $("#" + id).val(_data);
          SelectChange(id, _data)
        }else
        {
          $("#" + id).val(_data);
          if(type === "var")
          {
            $("#" + id).trigger("input")
          }
        }

      }
      _MainView.tablechange();
      if(typeof(data["f"]) != "undefined" && data["f"])
        _Filter.RestoreModels(data["f"])

      if(_MainView.model.get("state") == "goto")
      {
        BrowserAutomationStudio_FillGotoLabels()
      }

      if (data['d'].some((el) => $(`#${el.id}`).data('is-code-editor') || el.id === 'NodeVersionList')) {
        if (!isEditorInstalled()) {
          _MainView.once('monacoEditorCreated', () => {
            BrowserAutomationStudio_TriggerEvent('toolbox.editStarted');
          });
        } else {
          BrowserAutomationStudio_TriggerEvent('toolbox.editStarted');
        }
      } else {
        BrowserAutomationStudio_TriggerEvent('toolbox.editStarted');
      }
    }

    function BrowserAutomationStudio_EditEnd()
    {
      _GobalModel.attributes["isedit"] = false
      bootbox.hideAll()
      $('.modal').modal('hide')
      if(typeof(BrowserAutomationStudio_IsUpdatingAllActions) == "boolean" && BrowserAutomationStudio_IsUpdatingAllActions)
      {
        //If updating project action, goto blank screen instead of main
        //This significantly increaces speed.
        //If same state will be left, may lead to prject corruption
        _GobalModel.set({ state: "___none" });
      }else
      {
        _GobalModel.set({ state: "main" });
      }
      BrowserAutomationStudio_TriggerEvent('toolbox.editEnd');
    }

    function BrowserAutomationStudio_EditSaveStart()
    {
      if($("#node-check").length == 1)
      {
        $("#node-check").click()
      }else
        _MainView.accept()
    }


    function BrowserAutomationStudio_SetResources(resources, additionalResources)
    {
      const additionalSource = JSON.parse(additionalResources);
      const source = JSON.parse(resources);
      _ResourceCollection.reset();

      for (let i = 0; i < source.length; i++) {
        _ResourceCollection.add({ name: source[i]["name"], description: source[i]["description"], type: source[i]["type"] });
      }

      for (let i = 0; i < additionalSource.length; i++) {
        _ResourceCollection.add({ name: additionalSource[i]["name"], description: additionalSource[i]["name"] });
      }

      BasDialogsLib.store.addResource([...additionalSource, ...source]);
    }

    function BrowserAutomationStudio_SetGlobalVariables(globalVariables)
    {
      const source = JSON.parse(globalVariables);
      _GlobalVariableCollection.reset();

      source.sort((a, b) => a["name"] >= b["name"]);
      for (let i = 0; i < source.length; i++) {
        _GlobalVariableCollection.add({ name: source[i]["name"], global: true });
      }

      BasDialogsLib.store.addVariable(source, true);
    }

    function BrowserAutomationStudio_SetVariables(variables)
    {
      const source = JSON.parse(variables);
      _VariableCollection.reset();

      let addedCycleIndex = false;

      for (let i = 0; i < source.length; i++) {
        if (source[i]["name"] === "CYCLE_INDEX") {
          addedCycleIndex = true;
        }
      }

      if (!addedCycleIndex) {
        source.push({ name: "CYCLE_INDEX" });
      }

      source.sort((a, b) => a["name"] >= b["name"]);
      for (let i = 0; i < source.length; i++) {
        _VariableCollection.add({ name: source[i]["name"], global: false });
      }

      BasDialogsLib.store.addVariable(source, false);
    }

    function BrowserAutomationStudio_SetFunctions(functions)
    {
      const source = JSON.parse(functions);
      _FunctionCollection.reset();

      for (let i = 0; i < source.length; i++) {
        try {
          const dat = JSON.parse(JSON.parse(source[i]["name"]));
          const prop = { name: dat["n"] };
          if (dat["fd"]) {
            prop["properties"] = JSON.parse(dat["fd"]);
          }
          _FunctionCollection.add(prop);
        } catch (e) { }
      }

      BasDialogsLib.store.addFunction(source);
    }

    function BrowserAutomationStudio_SetSchema(schema)
    {
      _Schema = JSON.parse(schema)
      _Filter.Install(_Schema)
      _MainView.render()
    }

    function BrowserAutomationStudio_SetEmbeddedData(data, languages)
    {
      _EmbeddedModel.ParseData(data, languages)
    }

    function BrowserAutomationStudio_SetCurrentFunction(FunctionData)
    {
      CurrentParameters = JSON.parse(FunctionData)["p"].map(function(el){return el["name"]})
      if(CurrentParameters.length == 0)
        CurrentParameters = null
    }

    function BrowserAutomationStudio_SetLabels(labels)
    {
      _LabelCollection.reset()
      var res = JSON.parse(labels)

      for(var i = 0;i < res.length;i+=1)
      {
        _LabelCollection.add({name:res[i]["name"]})
      }
    }

    function ParameterNotSpecified(name)
    {
      Invalid(tr("The parameter \"") + tr(name) + tr("\" is not specified"));
    }

    function GetInputConstructorValueFilename(id, loader)
    {

      try
      {
        var Value = $("#" + id).val()
        var Match = Value.match(/^{{([^}]+)}}$/)
        if(Match && typeof(_ResourceCollection.toJSON().find(function(el){return el["name"] == Match[1] && el["type"] == "LinesFromFile"})) != "undefined")
        {
          
          return {"original": Value, "updated": `RInfo("${Match[1]}","Location")`}
        }

      }catch(e)
      {
        return GetInputConstructorValue(id, loader)
      }
      return GetInputConstructorValue(id, loader)

    }

    function GetInputConstructorValue(id, loader)
    {
        
        var ResTextTypeIsString = $("*[data-selector-id=" + id + "]").html() == "string";
        var ResTextTypeIsInt = $("*[data-selector-id=" + id + "]").html() == "int";
        var ResTextTypeIsEditor = $("*[id=" + id + "][data-is-code-editor=true]").length == 1
        var ForceString = $("*[id=" + id + "][data-force-string=true]").length == 1


        var ResText;
        if(ResTextTypeIsEditor)
          ResText = window[id].Editor.getValue();
        else if(ResTextTypeIsString)
        {
          ResText = $("#" + id).val();
          if($("#" + id).attr("data-replace-linebreaks"))
          {
            ResText = ResText.replace(/\r?\n/g, "\r\n")
          }
        }
        else if(ResTextTypeIsInt)
          ResText = $("#" + id + "_number").val();
        else
          ResText = $("#" + id).val();

        console.log(ResTextTypeIsEditor)

        loader.SetIsString((ResTextTypeIsString && !ResTextTypeIsEditor) || ForceString)
        var ResTextUpdated = loader.Resolve(ResText+"");
        if(ResTextUpdated.length == 0)
          ResTextUpdated = "\"\""
        return {"updated" : ResTextUpdated, "original" : ResText, "isString": ResTextTypeIsString};
    }

    function IsDefaultValueUsed(id)
    {
      const type = $(`*[data-selector-id=${id}]`).html();
      if(typeof type === 'string' && (type === "string" || type === "int" || type === "expression"))
      {
        const input = $(`#${id}${type === "int" ? "_number" : ""}`)[0];
        if(input == null)
          return false
        if(type === "int" && input.hasAttribute("data-no-default") && input.getAttribute("data-no-default") == "true")
        {
          return false
        }
        return input.value === input.defaultValue;
      }
      return false;
    }

    function IsDefaultCheckUsed(id)
    {
      const input = $(`#${id}`);
      let result = true
      try
      {
        result = input.attr("data-default") === input.prop("checked").toString();
      }catch(e)
      {

      }

      return result;
    }

    function IsDefaultSelectUsed(id)
    {
      const input = $(`#${id}`);
      let result = true
      try
      {
        result = input.find("option[data-default]").attr("value") === input.val();
      }catch(e)
      {

      }
      return result;
    }

    function IsDefaultVariableUsed(id)
    {
      const input = $(`#${id}`)[0];
      return input != null && input.value === input.defaultValue;
    }

    function GetPath(loader, need_all, need_visible, selector_index)
    {
      if(_SelectorModel.get("is_image"))
      {
        var waitelement = true
        var failaction = true
        if($("#checkbox-wait-element").length > 0)
        {
          waitelement = $("#checkbox-wait-element").prop("checked") 
        }

        if($("#checkbox-fail-action").length > 0)
        {
          failaction = $("#checkbox-fail-action").prop("checked") 
        }

        var scroll = 'data["scroll"] = ' + GetInputConstructorValue("Scroll",loader)["updated"] + ' == "scroll";'
        var threshold = 'data["threshold"] = parseInt(' + GetInputConstructorValue("Threshold",loader)["updated"] + ');'
        var timeout = timeout_value()
        if(timeout == 0)
          timeout = 60000
        timeout = 'data["timeout"] = ' + timeout + ';'

        var dataraw = GetInputConstructorValue("ImageBase64",loader)["updated"]
        
        var data = 'data["data"] = ' + dataraw + ';'

        var rawnodata = scroll + threshold + timeout
        var raw = rawnodata + data

        var resultwaiter = ""
        var resultpath = ""

        resultwaiter = "var data = {fail:" + failaction + ",wait:" + waitelement + "};" + raw + "_wait_image(data)!"
        resultpath = "_image()"

        return {path: resultpath,waiter: resultwaiter, imagesearch:true}

      }else if(_SelectorModel.get("version") == "1.0" || $("#selector-input").val().indexOf(">CSS>") >= 0 || $("#selector-input").val().indexOf(">MATCH>") >= 0|| $("#selector-input").val().indexOf(">FRAME>") >= 0|| $("#selector-input").val().indexOf(">XPATH>") >= 0 || $("#selector-input").val().indexOf(">AT>") >= 0 || _SelectorModel.get("current") == "xpath")
      {
        //New selectors
       
        var raw = $("#selector-input").val()

        if(typeof(selector_index) != "undefined")
        {
          raw += ">AT>" + selector_index
        }

        var current = _SelectorModel.get("current")
        if(current == "none")
          return {path:"page()",waiter:"",raw:"", querycss: je(_SelectorModel.get("css")), querycss2: je(_SelectorModel.get("css2")), querycss3: je(_SelectorModel.get("css3")), querymatch: je(_SelectorModel.get("match")), queryxpath: je(_SelectorModel.get("xpath"))}

        if(current == "at")
          return {path:"position(" + raw + ")",waiter:"", raw:"position " + raw, querycss: je(_SelectorModel.get("css")), querycss2: je(_SelectorModel.get("css2")), querycss3: je(_SelectorModel.get("css3")), querymatch: je(_SelectorModel.get("match")), queryxpath: je(_SelectorModel.get("xpath"))}

        loader.SetIsString(true)
        var raw_not_escaped = raw
        raw = loader.Resolve(raw+"")


        var waiter_func_name = "wait_element";
        if((typeof(need_visible) != "undefined" && need_visible))
        {
          waiter_func_name = "wait_element_visible"
        }

        var waitelement = true
        var failaction = true
        if($("#checkbox-wait-element").length > 0)
        {
          waitelement = $("#checkbox-wait-element").prop("checked") 
        }

        if($("#checkbox-fail-action").length > 0)
        {
          failaction = $("#checkbox-fail-action").prop("checked") 
        }
        

        var querycss = _SelectorModel.get("css")
        var querycss2 = _SelectorModel.get("css2")
        var querycss3 = _SelectorModel.get("css3")
        var querymatch = _SelectorModel.get("match")
        var queryxpath = _SelectorModel.get("xpath")

        if(current == "css")
        {
          querycss = raw
          querymatch = loader.Resolve(querymatch+"")
          queryxpath = loader.Resolve(queryxpath+"")
        }
        if(current == "match")
        {
          querymatch = raw
          querycss = loader.Resolve(querycss+"")
          queryxpath = loader.Resolve(queryxpath+"")
        }
        if(current == "xpath")
        {
          queryxpath = raw
          querycss = loader.Resolve(querycss+"")
          querymatch = loader.Resolve(querymatch+"")
        }

        var resultpath = "get_element_selector(_SELECTOR, " + (typeof(need_all) != "undefined" && need_all).toString() + ")"
        var resultwaiter = "_SELECTOR = " + raw + ";"

        if(waitelement == true && failaction == true)
        {
          resultwaiter += timeout_waiter() + "\n" + waiter_func_name + "(_SELECTOR)!"
        }else if(waitelement == false && failaction == true)
        {
          resultwaiter += "waiter_timeout_next(1000)\n" + waiter_func_name + "(_SELECTOR)!"
          resultpath += ".nowait()"
        }else if(waitelement == true && failaction == false)
        {
          resultwaiter += timeout_waiter() + "\nwaiter_nofail_next();\n" + waiter_func_name + "(_SELECTOR)!"
          resultpath += ".nowait()"
        }else if(waitelement == false && failaction == false)
        {
          resultwaiter += "waiter_timeout_next(1000)\nwaiter_nofail_next();\n" + waiter_func_name + "(_SELECTOR)!"
          resultpath += ".nowait()"
        }

        return {path: resultpath,waiter: resultwaiter,raw:"css " + raw_not_escaped, querycss: querycss, querycss2: querycss2, querycss3: querycss3, querymatch: querymatch, queryxpath: queryxpath, query: raw}
        
       
      }
      else
      {
        //Old selectors
        var current = _SelectorModel.get("current")
        if(current == "none")
          return {path:"page()",waiter:"",raw:"", querycss: '"' + je(_SelectorModel.get("css")) + '"', querycss2: '"' + je(_SelectorModel.get("css2")) + '"', querycss3: '"' + je(_SelectorModel.get("css3")) + '"', querymatch: '"' + je(_SelectorModel.get("match")) + '"'}

        var raw_not_escaped = $("#selector-input").val()
        var raw_original = $("#selector-input").val()
        var index = ""

        var index_match = raw_not_escaped.match(/\s*\<\s*([^\>\<]+)\s*\>\s*$/)
        if(index_match)
        {
          index = index_match[1]
          raw_not_escaped = raw_not_escaped.replace(/\<\s*([^\>\<]+)\s*\>\s*$/,"")
        }

        var raw = raw_not_escaped

        var frames_array = []
        var frames_path = ""
        while(true)
        {
          var indexcss = raw.indexOf(">css>")
          var indexmatch = raw.indexOf(">match>")

          if(indexcss < 0 && indexmatch < 0)
            break;

          if(indexcss >= 0 && (indexmatch < 0 || indexcss < indexmatch))
          {
            var frame_item = raw.substring(0,indexcss)
            

            loader.SetIsString(true)
            frame_item = loader.Resolve(frame_item+"")
            frames_array.push("{type: \"css\", data: " + frame_item + "}");
            
            frames_path += "frame_css(" + frame_item + ")."
            indexcss += ">css>".length
            raw = raw.substring(indexcss,raw.length)
            continue;
          }

          if(indexmatch >= 0 && (indexcss < 0 || indexmatch < indexcss))
          {
            var frame_item = raw.substring(0,indexmatch)

            loader.SetIsString(true)
            frame_item = loader.Resolve(frame_item+"")     
            frames_array.push("{type: \"match\", data: " + frame_item + "}");
            
            frames_path += "frame_match(" + frame_item + ")."
            indexmatch += ">match>".length
            raw = raw.substring(indexmatch,raw.length)
            continue;
          }

        }

        loader.SetIsString(true)
        raw = loader.Resolve(raw+"")

        if(index.length > 0)
        {
          loader.SetIsString(false)
          index = loader.Resolve(index+"")
        }
        

        if(current == "css")
        {
          var path = "css"

          if(index.length > 0 || (typeof(need_all) != "undefined" && need_all))
            path = "all"

          path += "(" + raw + ")"

          if(index.length > 0)
            path += ".at(" + index + ")"

          var waiter_func_name = "wait_css";
          if((typeof(need_visible) != "undefined" && need_visible))
          {
            waiter_func_name = "wait_css_visible"
          }

          var raw_object = ["raw:" + raw, "frames:" + "[" + frames_array.join(",") + "]"]
          
          if(index.length > 0)
            raw_object.push("index:" + index)

          raw = "{" + raw_object.join(",") + "}"

          return {path:frames_path + path,waiter: timeout_waiter() + "\n" + waiter_func_name + "(" + raw + ")!",raw:"css " + raw_not_escaped, querycss: '"' + je(raw_original) + '"', querycss2: '"' + je(_SelectorModel.get("css2")) + '"', querycss3: '"' + je(_SelectorModel.get("css3")) + '"', querymatch: '"' + je(_SelectorModel.get("match")) + '"'}
        }

        if(current == "match")
        {
          var path = "match"

          if(index.length > 0 || (typeof(need_all) != "undefined" && need_all))
            path = "match_all"

          path += "(" + raw + ")"

          if(index.length > 0)
            path += ".at(" + index + ")"

          var waiter_func_name = "wait_content";
          if((typeof(need_visible) != "undefined" && need_visible))
          {
            waiter_func_name = "wait_content_visible"
          }

          var raw_object = ["raw:" + raw, "frames:" + "[" + frames_array.join(",") + "]"]
          
          if(index.length > 0)
            raw_object.push("index:" + index)

          raw = "{" + raw_object.join(",") + "}"

          return {path:frames_path + path,waiter: timeout_waiter() + "\n" + waiter_func_name + "(" + raw + ")!", raw:"match " + raw_not_escaped, querycss: '"' + je(_SelectorModel.get("css")) + '"', querycss2: '"' + je(_SelectorModel.get("css2")) + '"', querycss3: '"' + je(_SelectorModel.get("css3")) + '"', querymatch: '"' + je(raw_original) + '"'}
        }

        if(current == "at")
          return {path:"position(" + raw + ")",waiter:"", raw:"position " + raw_not_escaped, querycss: '"' + je(_SelectorModel.get("css")) + '"', querycss2: '"' + je(_SelectorModel.get("css2")) + '"', querycss3: '"' + je(_SelectorModel.get("css3")) + '"', querymatch: '"' + je(_SelectorModel.get("match")) + '"'}

        return {path:"page()",waiter:"",raw:"", query: "", querycss: '"' + je(_SelectorModel.get("css")) + '"', querycss2: '"' + je(_SelectorModel.get("css2")) + '"', querycss3: '"' + je(_SelectorModel.get("css3")) + '"', querymatch: '"' + je(_SelectorModel.get("match")) + '"'}
      }
    }

    function InsertAtCaret(areaId,text)
    {
        var txtarea = document.getElementById(areaId);
        var scrollPos = txtarea.scrollTop;
        var strPos = 0;
        var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ?
            "ff" : (document.selection ? "ie" : false ) );
        if (br == "ie") {
            //txtarea.focus();
            var range = document.selection.createRange();
            range.moveStart ('character', -txtarea.value.length);
            strPos = range.text.length;
        }
        else if (br == "ff") strPos = txtarea.selectionStart;

        var front = (txtarea.value).substring(0,strPos);
        var back = (txtarea.value).substring(strPos,txtarea.value.length);
        txtarea.value=front+text+back;
        strPos = strPos + text.length;
        if (br == "ie") {
            //txtarea.focus();
            var range = document.selection.createRange();
            range.moveStart ('character', -txtarea.value.length);
            range.moveStart ('character', strPos);
            range.moveEnd ('character', 0);
            range.select();
        }
        else if (br == "ff") {
            txtarea.selectionStart = strPos;
            txtarea.selectionEnd = strPos;
            //txtarea.focus();
        }
        txtarea.scrollTop = scrollPos;
    }

    function ResourceLoader()
    {
      var AdditionalData = "";
      var IsString = true;
      var IsPrerender = false;
      var IsJsonStringify = false;

      this.Resolve = function(str)
      {
        var res = this.ResolveResources(str);
        //res = this.ResolveVariables(res);
        return res;
      }

      this.SetIsString = function(value)
      {
        IsString = value;
      }

      this.SetIsPrerender = function(value)
      {
        IsPrerender = value;
      }

      this.SetIsJsonStringify = function(value)
      {
        IsJsonStringify = value;
      }

      this.ResolveVariables = function(str)
      {
        var res = "";
        var reg = new RegExp("\\[\\[([^\\]]+)\\]\\]")
        var rest = str
        var all = ""
        while(true)
        {
          all = res
          if(res.length > 0 && rest.length > 0)
            all += ((IsString) ? " + " : "")

          if(rest.length > 0)
            all += ((IsString) ? "\"" : "") + ((IsString) ? je(rest) : rest) + ((IsString) ? "\"" : "")

          var match = reg.exec(rest)
          if(!match)
            break;

          var i = match.index
          var resnew = "";
          if(i>0)
          {
            resnew += (IsString) ? "\"" : ""
            resnew += (IsString) ? je(rest.substr(0,i)) : rest.substr(0,i)
            resnew += (IsString) ? "\" + " : ""
          }

          if(IsPrerender)
            resnew += match[0]
          else
          {
            var match_add = match[1]
            if(match_add.indexOf("GLOBAL:") >= 0)
            {
              match_add = "JSON.parse(P(\"basglobal\", " + JSON.stringify(match_add.substr(7)) + ") || '\"\"')";
            }else
            {
              match_add = "VAR_" + match_add
            }

            if(IsJsonStringify)
            {
              match_add = "JSON.stringify(" + match_add + ")"
            }
            resnew += match_add
            
          }


          i = match.index + match[0].length
          var j = rest.length - i
          if(j>0)
          {
            rest = rest.substr(i,j)
          }else
            rest = ""

          if(res.length == 0)
            res = resnew
          else
            res +=  ((IsString) ? " + " : "") + resnew


        }
        return all;
      }

      this.ResolveResources = function(str)
      {
        var res = "";
        var reg = new RegExp("\\{\\{([^\\}]+)\\}\\}")
        var rest = str
        var all = ""
        while(true)
        {
          all = res
          if(res.length > 0 && rest.length > 0)
            all += ((IsString) ? " + " : "")

          if(rest.length > 0)
            all += this.ResolveVariables(rest)

          var match = reg.exec(rest)
          if(!match)
            break;
          var Iteration = Math.floor(Math.random() * (999999 - 100000) + 100000)

          var v = "RESOURCE_" + Iteration;
          var m = match[1].split("|")[0]
          var notreuse = match[1].indexOf("|notreuse")>=0
          var onlyfail = match[1].indexOf("|onlyfail")>=0
          AdditionalData +=  _.template($('#resource_code').html())({resource:m,variable:v,notreuse:notreuse,onlyfail:onlyfail});

          var i = match.index
          var resnew = "";
          if(i>0)
          {
            resnew += this.ResolveVariables(rest.substr(0,i))
            resnew += ((IsString) ? " + " : "")
          }

          if(IsPrerender)
            resnew += match[0]
          else
            resnew += (IsJsonStringify) ? "JSON.stringify(" + v + ")" : v

          i = match.index + match[0].length
          var j = rest.length - i
          if(j>0)
          {
            rest = rest.substr(i,j)
          }else
            rest = ""

          if(res.length == 0)
            res = resnew
          else
            res +=  ((IsString) ? " + " : "") + resnew


        }
        return all;
      }

      this.GetAdditionalData = function()
      {
        return AdditionalData;
      }

    }

    function BrowserAutomationStudio_AddTab()
    {
      _Router.navigate("#!/addtab", true);
    }

    function BrowserAutomationStudio_SelectTab(i)
    {
      _Router.navigate("#!/selecttab", true);
      _GobalModel.set("index",i)
    }

    function BrowserAutomationStudio_TabInfo()
    {
      _Router.navigate("#!/tabinfo", true);
    }

    function BrowserAutomationStudio_CloseTab(i)
    {
      _Router.navigate("#!/closetab", true);
      _GobalModel.set("index",i)
    }


    function BrowserAutomationStudio_Click(x, y)
    {
      _Router.navigate("#!/click", true);
      _GobalModel.set("x",x.toString())
      _GobalModel.set("y",y.toString())
    }

    function BrowserAutomationStudio_Move(x, y)
    {
      _Router.navigate("#!/move", true);
      _GobalModel.set("x",x.toString())
      _GobalModel.set("y",y.toString())
      
    }

    function BrowserAutomationStudio_MoveAndClick(x, y)
    {
      _Router.navigate("#!/moveandclick", true);
      _GobalModel.set("x",x.toString())
      _GobalModel.set("y",y.toString())
      
    }

    function BrowserAutomationStudio_Drag(x, y)
    {
      _Router.navigate("#!/drag", true);
      _GobalModel.set("x",x.toString())
      _GobalModel.set("y",y.toString())
    }

    function BrowserAutomationStudio_Drop(x, y)
    {
      _Router.navigate("#!/drop", true);
      _GobalModel.set("x",x.toString())
      _GobalModel.set("y",y.toString())
    }

    
    //This function is called when selector has been updated
    function BrowserAutomationStudio_UpdateSelectorResult(selector)
    {
      if(typeof(selector) == "object")
      {
        //Disable info about ai generation
        _SelectorModel.set("is_ai_generated",false)
        _SelectorModel.set("ai_generated_name","")

        //Clear ui for ai generation
        $("#selector-ai").hide()

        //Set model data for selector
        _SelectorModel.set("is_image",false)
        _SelectorModel.set("css",selector["css"])
        _SelectorModel.set("css1",selector["css1"])
        if("css2" in selector)
          _SelectorModel.set("css2",selector["css2"])
        else
          _SelectorModel.set("css2","")

        if("css3" in selector)
          _SelectorModel.set("css3",selector["css3"])
        else
          _SelectorModel.set("css3","")

        _SelectorModel.set("match",selector["match"])
        _SelectorModel.set("xpath",selector["xpath"] || "")

        //Select css selector and update ui for selector
        $("#selector").html("css")
        $("#selector-input").removeAttr("disabled").val(_SelectorModel.get("css"))
        BrowserAutomationStudio_TestPathInternal();
        
        let CssHtml = `<li class="dropdown-border"><a tabindex="-1" href="#" class="dropdown-menu-css-item" data-selected="true">${selector["css1"]}</a></li>`
        if("css2" in selector)
        {
          CssHtml += `<li class="dropdown-border"><a tabindex="-1" href="#" class="dropdown-menu-css-item">${selector["css2"]}</a></li>`
        }
        if("css3" in selector)
        {
          CssHtml += `<li class="dropdown-border"><a tabindex="-1" href="#" class="dropdown-menu-css-item">${selector["css3"]}</a></li>`
        }


        $(".dropdown-menu-css-item").parent().replaceWith(CssHtml)

      }

    }
    
    function BrowserAutomationStudio_ElementFunction_Internal(selector, name, is_loop)
    {
      _SelectorModel.set("is_editing",false)
      _SelectorModel.set("version","1.0")
      _SelectorModel.set("is_ai_generated",false)
      _SelectorModel.set("ai_generated_name","")
      var need_to_set_image_data = false

      _Router.navigate("#", true);
      if(is_loop !== 1)
      {
        if(typeof(selector) == "string")
        {
          need_to_set_image_data = true
          _SelectorModel.set("is_image",true)
          _SelectorModel.set("image_data",selector)
        }else
        {
          _SelectorModel.set("is_image",false)
          _SelectorModel.set("css",selector["css"])
          _SelectorModel.set("css1",selector["css1"])
          if("css2" in selector)
            _SelectorModel.set("css2",selector["css2"])
          else
            _SelectorModel.set("css2","")

          if("css3" in selector)
            _SelectorModel.set("css3",selector["css3"])
          else
            _SelectorModel.set("css3","")

          _SelectorModel.set("match",selector["match"])
          _SelectorModel.set("xpath",selector["xpath"] || "")
        }

      }
      else
      {
        if(_.pluck(_VariableCollection.toJSON(), 'name').indexOf("FOR_EACH_CSS") < 0)
        {
          bootbox.alert(tr("Start Loop to use this function"))
          return
        }

        _SelectorModel.set("css","[[FOR_EACH_CSS]]>AT>[[CYCLE_INDEX]]")
        _SelectorModel.set("css1","[[FOR_EACH_CSS]]>AT>[[CYCLE_INDEX]]")
        _SelectorModel.set("css2","")
        _SelectorModel.set("css3","")
        _SelectorModel.set("match","[[FOR_EACH_MATCH]]>AT>[[CYCLE_INDEX]]")
        _SelectorModel.set("xpath","[[FOR_EACH_XPATH]]>AT>[[CYCLE_INDEX]]")

      }
      _SelectorModel.set("mousex",parseInt(selector["mousex"]))
      _SelectorModel.set("mousey",parseInt(selector["mousey"]))

      _Router.navigate("#!/" + name, true);
      if(need_to_set_image_data)
      {
        $("#ImageBase64").val(_SelectorModel.get("image_data"))
        $("#ImageData").attr("src","data:image/png;base64," + _SelectorModel.get("image_data"))

      }
    }

    function BrowserAutomationStudio_ElementFunction(selector, name, is_loop)
    {
      if(is_loop)
      {
        bootbox.confirm(
        {
          title: tr("Execution point is inside loop. Which element do you want to use?"),
          message: "<span style='width: 8px;height: 8px;margin-right: 8px;background-color: #337ab7;border-radius: 50%;display: inline-block;margin-bottom: 1px;'></span><span>" + tr("Element from the loop") + "</span> - <span style='color:gray;font-size:small'>" + tr("action will be performed for each element in a loop") + "</span>."+
          
          "<br /><span style='margin-top:7px;display:inline-block;'><span style='width: 8px;height: 8px;margin-right: 3px;background-color: #5cb85c;border-radius: 50%;display: inline-block;margin-bottom: 1px;'></span> " + tr("Element that you just selected") + "</span> - <span style='color:gray;font-size:small'>" + tr("default option. Action will be performed each time for same element (element that was just selected)") + ".</span>",
          buttons:
          {
            cancel:
            {
              label: tr('Element that you just selected'),
              className: 'btn-success bootbox-right'
            },
            confirm:
            {
              label: tr('Element from the loop'),
              className: 'btn-primary'
            }
          },
          callback: function (result)
          {
            is_loop = result ? 1 : 0;
            BrowserAutomationStudio_ElementFunction_Internal(selector, name, is_loop)
          }
        });
      }else
      {
        BrowserAutomationStudio_ElementFunction_Internal(selector, name, is_loop)
      }
    }

    function BrowserAutomationStudio_LoopElement(selector)
    {
      BrowserAutomationStudio_ElementFunction(selector, "loopelement", false)
    }

    function BrowserAutomationStudio_clickCaptchaElement(selector, is_loop){BrowserAutomationStudio_ElementFunction(selector, "clickCaptchaElement", is_loop)}

    function BrowserAutomationStudio_Wait(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "waitelement", is_loop)
    }

    function BrowserAutomationStudio_GetXml(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "xml", is_loop)
    }

    function BrowserAutomationStudio_GetText(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "text", is_loop)
    }

    function BrowserAutomationStudio_ExecuteScript(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "browserscript", is_loop)
    }


    function BrowserAutomationStudio_ClickElement(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "clickelement", is_loop)
    }
    function BrowserAutomationStudio_MoveElement(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "moveelement", is_loop)
    }
    function BrowserAutomationStudio_DragElement(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "dragelement", is_loop)
    }
    function BrowserAutomationStudio_DropElement(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "dropelement", is_loop)
    }
    function BrowserAutomationStudio_MoveAndClickElement(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "moveandclickelement", is_loop)
    }
    function BrowserAutomationStudio_Clear(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "clear", is_loop)
    }
    function BrowserAutomationStudio_Type(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "typeelement", is_loop)
    }
    function BrowserAutomationStudio_Exists(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "exist", is_loop)
    }
    function BrowserAutomationStudio_Style(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "style", is_loop)
    }
    function BrowserAutomationStudio_Check(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "check", is_loop)
    }
    function BrowserAutomationStudio_Focus(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "focus", is_loop)
    }
    function BrowserAutomationStudio_Set(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "set", is_loop)
    }
    function BrowserAutomationStudio_SetInteger(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "set_integer", is_loop)
    }
    function BrowserAutomationStudio_SetRandom(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "set_random", is_loop)
    }
    function BrowserAutomationStudio_GetAttr(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "attr", is_loop)
    }
    function BrowserAutomationStudio_GetLinkURL(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "linkurl", is_loop)
    }
    function BrowserAutomationStudio_SetAttr(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "set_attr", is_loop)
    }
    function BrowserAutomationStudio_Captcha(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "captcha", is_loop)
    }
    function BrowserAutomationStudio_Length(selector)
    {
      BrowserAutomationStudio_ElementFunction(selector, "length", false)
    }
    function BrowserAutomationStudio_Screenshot(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "screenshot", is_loop)
    }
    function BrowserAutomationStudio_GetCoordinates(selector, is_loop)
    {
      BrowserAutomationStudio_ElementFunction(selector, "coordinates", is_loop)
    }

    function BrowserAutomationStudio_HandleEvent(name, data) {
      if (name === 'scenario.updateFinish') {
        window.BrowserAutomationStudio_IsUpdatingAllActions = false
        _GobalModel.set({ state: "main" });
        Toolbox.overlay.hide();
      }

      if (name === 'scenario.updateStart') {
        window.BrowserAutomationStudio_IsUpdatingAllActions = true
        Toolbox.overlay.show();
      }
    }

    function BrowserAutomationStudio_ClearWindowModalTimeout()
    {
      if(typeof(window.WindowModalTimeout) != "undefined")
      {
        clearTimeout(window.WindowModalTimeout);
        delete window.WindowModalTimeout
      }
    }


    function BrowserAutomationStudio_ShowWaiting(code)
    {
      OnHold = true
      $(".modal").modal('hide')
      var text = prepare_title_code(code,"")
      if(text.length > 0)
      {
        $("#WaitingActionName").html(text)
        $("#InterruptMessage").hide()
        $("#WaitingDisable").show()
        BrowserAutomationStudio_ClearWindowModalTimeout();
        $('#WaitingModal').modal({keyboard: false,backdrop: 'static'})
      }
          
    }
    function BrowserAutomationStudio_HideWaiting()
    {
      OnHold = false
      
      BrowserAutomationStudio_ClearWindowModalTimeout()

      window.WindowModalTimeout = setTimeout(function(){
        $('#WaitingModal').modal('hide')
        BrowserAutomationStudio_ClearWindowModalTimeout()
      }, 200)
    }

    function Normalize(code, tab)
    {
      var a = code.split("\n")
      var res = "";
      for(var i=0;i<a.length;i+=1)
      {
        var l = a[i].trim()
        if(l.length == 0)
          continue;

        if(res.length != 0)
        {
          res += "\n"
        }
        for(var j = 0;j<tab;j+=1)
          res += "   "
        res += l
      }
      return res
    }


  </script>

</body>
</html>