--- /dev/null
+-----BEGIN CERTIFICATE REQUEST-----
+MIICkDCCAXgCAQAwSzFJMEcGCSqGSIb3DQEJARY6dmluY2VudEBjdWJlZGVzaWdu
+ZXJzLmNvbSwgQ049VmluY2VudCBWYW53YWVsc2NhcHBlbCwgQz1GUjCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAK+AuVzs23zgJaARe9KzejKeUFlS3mWI
+3+6GmNaYUIHs0AoNW97BYsuQ1DFyc4tShOagVtsuLoUFctjE5v355P0zjzoM+0sI
+NR3h6hBmPL44UQAiQGPwCuJC+h9ix029vpIltmuwuPtAiLKSv+rSTNMfK++bNqNr
+/dUgdiiTCdBMcFcXyMZVW2Bpz8bgVyLuowvt1H7A+txQFIZ2TgWpl4KXwKuMrpAb
+NfqY1wbjEVGnAXSXOonkSEcrvj3VZJgDDXa0rWfaiVVnv1gSZGUP4BxaXkCPAN+6
+8DVbhPSKdQ5NLXUVI+QaoVqzt2zEzdvLA5QYPTpIsgoFxD/2C4LO+K0CAwEAAaAA
+MA0GCSqGSIb3DQEBCwUAA4IBAQCsVqoQbesVNCTYh5AJ88JBGod82aHZaydlXh85
+BN0/CRcWzbkfMOceOvxWGkItnltTu+eXuHQLnKWiUSImkyKZ/CRDrZuM9Fsq7xF6
+PkIYoSdrHNw63ew+6Mn7AuvQV4GCbzSjJAE7zsVnqrDeX0kLSWTZytAZ/hnXMpoq
+Ej4PwmAYn1U5/WKAMfyTq1tHtk6tjNaW0HH1u6YXC/yGlNDjx8EJu3fukefHdpkj
+/Yj4G208EMEq4HE+bgri25ox/V/SNGxv0nV+BasUgmskZxL1E546Vodtb0KXzvwW
+sC/EsVeKQ48MY0DIwHq+QfvH7jpdS+GLI1Vu59I05FES930a
+-----END CERTIFICATE REQUEST-----
--- /dev/null
+Bag Attributes
+ localKeyID: 0E A0 70 D2 26 76 A4 AA 26 64 C5 27 9A 3B 46 49 BB 69 52 3F
+subject=/UID=82TNE4UQ7A/CN=Developer ID Application: Cubedesigners (82TNE4UQ7A)/OU=82TNE4UQ7A/O=Cubedesigners/C=US
+issuer=/CN=Developer ID Certification Authority/OU=Apple Certification Authority/O=Apple Inc./C=US
+-----BEGIN CERTIFICATE-----
+MIIFdDCCBFygAwIBAgIISmkSRgQmbSwwDQYJKoZIhvcNAQELBQAweTEtMCsGA1UE
+AwwkRGV2ZWxvcGVyIElEIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSYwJAYDVQQL
+DB1BcHBsZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTETMBEGA1UECgwKQXBwbGUg
+SW5jLjELMAkGA1UEBhMCVVMwHhcNMTgwMzA2MTEwNzM4WhcNMjMwMzA3MTEwNzM4
+WjCBlTEaMBgGCgmSJomT8ixkAQEMCjgyVE5FNFVRN0ExPTA7BgNVBAMMNERldmVs
+b3BlciBJRCBBcHBsaWNhdGlvbjogQ3ViZWRlc2lnbmVycyAoODJUTkU0VVE3QSkx
+EzARBgNVBAsMCjgyVE5FNFVRN0ExFjAUBgNVBAoMDUN1YmVkZXNpZ25lcnMxCzAJ
+BgNVBAYTAlVTMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr4C5XOzb
+fOAloBF70rN6Mp5QWVLeZYjf7oaY1phQgezQCg1b3sFiy5DUMXJzi1KE5qBW2y4u
+hQVy2MTm/fnk/TOPOgz7Swg1HeHqEGY8vjhRACJAY/AK4kL6H2LHTb2+kiW2a7C4
++0CIspK/6tJM0x8r75s2o2v91SB2KJMJ0ExwVxfIxlVbYGnPxuBXIu6jC+3UfsD6
+3FAUhnZOBamXgpfAq4yukBs1+pjXBuMRUacBdJc6ieRIRyu+PdVkmAMNdrStZ9qJ
+VWe/WBJkZQ/gHFpeQI8A37rwNVuE9Ip1Dk0tdRUj5BqhWrO3bMTN28sDlBg9Okiy
+CgXEP/YLgs74rQIDAQABo4IB4TCCAd0wPgYIKwYBBQUHAQEEMjAwMC4GCCsGAQUF
+BzABhiJodHRwOi8vb2NzcC5hcHBsZS5jb20vb2NzcC1kZXZpZDAxMB0GA1UdDgQW
+BBQ2lm4L1Wbn/kR3Ghdt+LisS0XgPTAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaA
+FFcX7aLP3HyYoRDg/L6HLSzy4xdUMIIBDgYDVR0gBIIBBTCCAQEwgf4GCSqGSIb3
+Y2QFATCB8DAoBggrBgEFBQcCARYcaHR0cDovL3d3dy5hcHBsZS5jb20vYXBwbGVj
+YTCBwwYIKwYBBQUHAgIwgbYMgbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRl
+IGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBw
+bGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNl
+cnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0
+ZW1lbnRzLjAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwMw
+EwYKKoZIhvdjZAYBDQEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAFtVWrJfmQaU
+xjOY3lIcmExgxFWzGljMN4slRLldW3hilzUQCiGhCJS7odGvEto3tl0tRPRfcqJS
+bwTkVrXEebouRauMIAW8mBa86hIARAa2VahxKSmZZXD44cPBWrx+pPLcKeCOmJvg
+HKflSwzYIyTjbC6eLRrwOBWywsmj+XLXrUq0kTA/4MVXH1Ib9mw5epaGzIuTltRI
+qPz6asx0d/yLfw9GsDjXpD2QPnoIikvRi1qahpVS+mq/ISsLdu+acANLW51jKk+i
+lMfUcPCyZfh8zxDlxZUMv6KqmyxFl+j3Uk7TThlqNuFyy8H/ByyOg70FWyzIx2v9
+Zn4UJyVje18=
+-----END CERTIFICATE-----
+Bag Attributes
+ localKeyID: 0E A0 70 D2 26 76 A4 AA 26 64 C5 27 9A 3B 46 49 BB 69 52 3F
+Key Attributes: <No Attributes>
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCvgLlc7Nt84CWg
+EXvSs3oynlBZUt5liN/uhpjWmFCB7NAKDVvewWLLkNQxcnOLUoTmoFbbLi6FBXLY
+xOb9+eT9M486DPtLCDUd4eoQZjy+OFEAIkBj8AriQvofYsdNvb6SJbZrsLj7QIiy
+kr/q0kzTHyvvmzaja/3VIHYokwnQTHBXF8jGVVtgac/G4Fci7qML7dR+wPrcUBSG
+dk4FqZeCl8CrjK6QGzX6mNcG4xFRpwF0lzqJ5EhHK7491WSYAw12tK1n2olVZ79Y
+EmRlD+AcWl5AjwDfuvA1W4T0inUOTS11FSPkGqFas7dsxM3bywOUGD06SLIKBcQ/
+9guCzvitAgMBAAECggEAQkXtuXWH/MP38VYo2AwGXQ8DcHemm9jwFvakyISEAkwW
+03Tv+FI2qIBsYK/Dih0DKsPpiKML1heUot7YC5hOLH9H2rgEPPVAeaRR6xdwYLSL
+ge1tO0/uDDsWkLuQX38Dc9Th6hC2Ccr409YuutHnSOJAiR6np1akZ9L2S6Qa1Jko
+wzusNDCDf+2hf1THY0M4LJnLpw+Xb9aOaUB2WQ9Q3wXGSce4Q5HhW8JG/at8a7iD
+yoXXOd41gp8x/JvJTiAFn/hlLWR7v0PccZDcWO5nGl/nouCWoZGVkRCKOACZKapc
+ZL82I/sjEfnA2UyRJ5Fu8QRRsNiTo4ZagiUfKryl0QKBgQDYqNJiiKeotaGRaKNl
+rE/qj+6RmSfsCHSmocJYt1HpiMeS4z8ZcpdnjvzHIaOpzUN1S/5O8rhxJW9aSdFr
+qukZuVJHC0IlueNhyd7IL6m+XJyeJ02L6kL2PANresw04Njm81oJDE3YnEgwjTaK
+lTyFT+Zmvnwc8zSUg7SdHigYkwKBgQDPXsf9w+X5Vaho72gc3hO9qIoz82z3KnBS
+dlyoHzz4rbwY7tiBbVm3WzpiPIcW1wzzR7zGr2dDp7+8Vi9bbNwtwCLAAeEo2sli
+q+WYN8U3TGRlftWHo5TIqp+GFbSjn+h7eokM0xHaMYXFpu/tv28FS7ujCjITScXp
+LqrDgd2xvwKBgQCGx1bBRyONNxhAPajP+gZo84rEdlM4aPYwJpag28GQFq+YN9er
++/YlzPSA5/NJEVDyqgiUkjec413G+/7UDKkfgIKngWBv2ZiS36LAQ65DppcjZ229
+KUjopuK1vNlF1832tdH/qPDQXEAoO+B/C2FvyQmaRsssszq1XM1BpF3rEwKBgBFR
+SABQOMdeuOayf45RmXJwPcJi5MmrWJ/6VHiRy0S1NY0bfScp26EtVC3aAioNIX67
+ke9BvKzwuFlhFSlcaPLFJeHFBmmkA8ditZTFq4mXrpavRePC7GzpmtLWwzQa6Y5O
+SF2yzr3a/uHntAe1we6+SVgvRMlJkuaLSCV1le7/AoGAaZpvCGbmrsmI9tqeY7n1
+V0Rt7XonGFV25gIJILAy0fJJAgFFEUr81sasrd9u9Y614+SNwwkSufA7eQe8EuL3
+WYN/TigD3MH9Lap5MqnJt40bRSk1KrglOGHhD/ffFQB7BLIgfDpC8f1F17eCwpfq
+dIS4wArzLhQY9ASdaXgkU9I=
+-----END PRIVATE KEY-----
--- /dev/null
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAr4C5XOzbfOAloBF70rN6Mp5QWVLeZYjf7oaY1phQgezQCg1b
+3sFiy5DUMXJzi1KE5qBW2y4uhQVy2MTm/fnk/TOPOgz7Swg1HeHqEGY8vjhRACJA
+Y/AK4kL6H2LHTb2+kiW2a7C4+0CIspK/6tJM0x8r75s2o2v91SB2KJMJ0ExwVxfI
+xlVbYGnPxuBXIu6jC+3UfsD63FAUhnZOBamXgpfAq4yukBs1+pjXBuMRUacBdJc6
+ieRIRyu+PdVkmAMNdrStZ9qJVWe/WBJkZQ/gHFpeQI8A37rwNVuE9Ip1Dk0tdRUj
+5BqhWrO3bMTN28sDlBg9OkiyCgXEP/YLgs74rQIDAQABAoIBAEJF7bl1h/zD9/FW
+KNgMBl0PA3B3ppvY8Bb2pMiEhAJMFtN07/hSNqiAbGCvw4odAyrD6YijC9YXlKLe
+2AuYTix/R9q4BDz1QHmkUesXcGC0i4HtbTtP7gw7FpC7kF9/A3PU4eoQtgnK+NPW
+LrrR50jiQIkep6dWpGfS9kukGtSZKMM7rDQwg3/toX9Ux2NDOCyZy6cPl2/WjmlA
+dlkPUN8FxknHuEOR4VvCRv2rfGu4g8qF1zneNYKfMfybyU4gBZ/4ZS1ke79D3HGQ
+3FjuZxpf56LglqGRlZEQijgAmSmqXGS/NiP7IxH5wNlMkSeRbvEEUbDYk6OGWoIl
+Hyq8pdECgYEA2KjSYoinqLWhkWijZaxP6o/ukZkn7Ah0pqHCWLdR6YjHkuM/GXKX
+Z478xyGjqc1DdUv+TvK4cSVvWknRa6rpGblSRwtCJbnjYcneyC+pvlycnidNi+pC
+9jwDa3rMNODY5vNaCQxN2JxIMI02ipU8hU/mZr58HPM0lIO0nR4oGJMCgYEAz17H
+/cPl+VWoaO9oHN4TvaiKM/Ns9ypwUnZcqB88+K28GO7YgW1Zt1s6YjyHFtcM80e8
+xq9nQ6e/vFYvW2zcLcAiwAHhKNrJYqvlmDfFN0xkZX7Vh6OUyKqfhhW0o5/oe3qJ
+DNMR2jGFxabv7b9vBUu7owoyE0nF6S6qw4Hdsb8CgYEAhsdWwUcjjTcYQD2oz/oG
+aPOKxHZTOGj2MCaWoNvBkBavmDfXq/v2Jcz0gOfzSRFQ8qoIlJI3nONdxvv+1Ayp
+H4CCp4Fgb9mYkt+iwEOuQ6aXI2dtvSlI6KbitbzZRdfN9rXR/6jw0FxAKDvgfwth
+b8kJmkbLLLM6tVzNQaRd6xMCgYARUUgAUDjHXrjmsn+OUZlycD3CYuTJq1if+lR4
+kctEtTWNG30nKduhLVQt2gIqDSF+u5HvQbys8LhZYRUpXGjyxSXhxQZppAPHYrWU
+xauJl66Wr0Xjwuxs6ZrS1sM0GumOTkhdss692v7h57QHtcHuvklYL0TJSZLmi0gl
+dZXu/wKBgGmabwhm5q7JiPbanmO59VdEbe16JxhVduYCCSCwMtHySQIBRRFK/NbG
+rK3fbvWOtePkjcMJErnwO3kHvBLi91mDf04oA9zB/S2qeTKpybeNG0UpNSq4JThh
+4Q/33xUAewSyIHw6QvH9Rde3gsKX6nSEuMAK8y4UGPQEnWl4JFPS
+-----END RSA PRIVATE KEY-----
--- /dev/null
+-----BEGIN CERTIFICATE REQUEST-----
+MIICkDCCAXgCAQAwSzFJMEcGCSqGSIb3DQEJARY6dmluY2VudEBjdWJlZGVzaWdu
+ZXJzLmNvbSwgQ049VmluY2VudCBWYW53YWVsc2NhcHBlbCwgQz1GUjCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKWYY+C+mmZiLvjIAIQgkoF8L426k5rZ
+VsWqBBd1TAwCQzBE3ipmFpRc/6+wJRM/GXvij42PL2GwXop1GoAfnonzA8iHOWgT
+Anm9TZL+8aB5V1Que8MCXMVVrnM9rdWeRzPCpHejcWz/6lfYAbOStig4gPORla+a
+2lYVTVbyD7/OkgCDMTMaN2Ooh2jInBA775UxS0ihUQr9LB3Vkdf53OfnZGVWvTV8
+YZBo7rOB9tDMRrmCOpyLhIbpSa6xdfHrSo2XYrf/R8SqOyHds5tghzjyf7u7/rmi
++y5rGhQLPEUj8tTLoybs6kocVqEbaRuopPPktkIZgfUtDliwxDCh4EUCAwEAAaAA
+MA0GCSqGSIb3DQEBCwUAA4IBAQBMfQbjXEvqUemUVRuWxLCeykeMSkDKyZjaLpjQ
+G2CQ31umWHmlZkLcd9FZwokmKiqINDZV8xJt66QxD4I9/BQ2g7rJ68fyQRduJqiw
+TIxkiQZLiUtjdSjwfrJ1jEgFA9ismmBEHDgK0rCmbLnWzIWGYlKbptWGYCci1QwZ
+lpJqNLUOyCWXfjTC9gej7oB+dtaFJm8SKVAwj/BHXhTy/gQCgWhmMLGocV7gFDY0
+Brd6AVjb/BFQJ+Jkc6Jie15bNs1nrFmrWVvx0Wa5T35+VUfuhuC6H4AQ88XWZs9Y
+OJTU4wH7NKCGUXxedBYQX2Rn8J3o6IHYxxHHbmA54RTANolx
+-----END CERTIFICATE REQUEST-----
--- /dev/null
+Bag Attributes
+ localKeyID: CC 5E 0F 9A 6B 24 A2 6E FC 69 EF DC 4F 7A 54 DC DF DC 68 55
+subject=/UID=82TNE4UQ7A/CN=Developer ID Installer: Cubedesigners (82TNE4UQ7A)/OU=82TNE4UQ7A/O=Cubedesigners/C=US
+issuer=/CN=Developer ID Certification Authority/OU=Apple Certification Authority/O=Apple Inc./C=US
+-----BEGIN CERTIFICATE-----
+MIIFczCCBFugAwIBAgIIVHMQKyi5DP0wDQYJKoZIhvcNAQELBQAweTEtMCsGA1UE
+AwwkRGV2ZWxvcGVyIElEIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSYwJAYDVQQL
+DB1BcHBsZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTETMBEGA1UECgwKQXBwbGUg
+SW5jLjELMAkGA1UEBhMCVVMwHhcNMTgwMzA2MTExMTEyWhcNMjMwMzA3MTExMTEy
+WjCBkzEaMBgGCgmSJomT8ixkAQEMCjgyVE5FNFVRN0ExOzA5BgNVBAMMMkRldmVs
+b3BlciBJRCBJbnN0YWxsZXI6IEN1YmVkZXNpZ25lcnMgKDgyVE5FNFVRN0EpMRMw
+EQYDVQQLDAo4MlRORTRVUTdBMRYwFAYDVQQKDA1DdWJlZGVzaWduZXJzMQswCQYD
+VQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKWYY+C+mmZi
+LvjIAIQgkoF8L426k5rZVsWqBBd1TAwCQzBE3ipmFpRc/6+wJRM/GXvij42PL2Gw
+Xop1GoAfnonzA8iHOWgTAnm9TZL+8aB5V1Que8MCXMVVrnM9rdWeRzPCpHejcWz/
+6lfYAbOStig4gPORla+a2lYVTVbyD7/OkgCDMTMaN2Ooh2jInBA775UxS0ihUQr9
+LB3Vkdf53OfnZGVWvTV8YZBo7rOB9tDMRrmCOpyLhIbpSa6xdfHrSo2XYrf/R8Sq
+OyHds5tghzjyf7u7/rmi+y5rGhQLPEUj8tTLoybs6kocVqEbaRuopPPktkIZgfUt
+DliwxDCh4EUCAwEAAaOCAeIwggHeMD4GCCsGAQUFBwEBBDIwMDAuBggrBgEFBQcw
+AYYiaHR0cDovL29jc3AuYXBwbGUuY29tL29jc3AtZGV2aWQwMjAdBgNVHQ4EFgQU
+btWNIgYobf4neaFu1TkNIGJvk6AwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRX
+F+2iz9x8mKEQ4Py+hy0s8uMXVDCCAQ4GA1UdIASCAQUwggEBMIH+BgkqhkiG92Nk
+BQEwgfAwKAYIKwYBBQUHAgEWHGh0dHA6Ly93d3cuYXBwbGUuY29tL2FwcGxlY2Ew
+gcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBi
+eSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxp
+Y2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0
+aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVt
+ZW50cy4wDgYDVR0PAQH/BAQDAgeAMBcGA1UdJQEB/wQNMAsGCSqGSIb3Y2QEDTAT
+BgoqhkiG92NkBgEOAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAHqlpDhdZN+nr
+lhsfHzKiFGlC2l0Iyr1AZxNUBGrf+FqFt6JjjiO1aYkwPGUCuoetDE+L2wi7g/dv
+0TzbmGgx/ykfEhCWNmd5agCtnUyD0Fi7jrd4TBxYd3zqid4Jd+28qYeFwUCsaTAI
+5eawBKK74Gf4lbwU8VYWrudbgn+X5pStyKH7gBXNuUJTEiE5ksR9i2uzHik2pAuE
+VCPI9Bg6RgxAKZGQDkhFScddgts+/bLFbP1JOHql0agI5KUgxcIDWY3kcdaGS//M
+0hgAaiDt0B84KSXexkv3NkFdWQkQCoIZ00zDGpEtt/p+xMVcdPHWrk5utQlfAVyA
+GbSOCRw1Lg==
+-----END CERTIFICATE-----
+Bag Attributes
+ localKeyID: CC 5E 0F 9A 6B 24 A2 6E FC 69 EF DC 4F 7A 54 DC DF DC 68 55
+Key Attributes: <No Attributes>
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQClmGPgvppmYi74
+yACEIJKBfC+NupOa2VbFqgQXdUwMAkMwRN4qZhaUXP+vsCUTPxl74o+Njy9hsF6K
+dRqAH56J8wPIhzloEwJ5vU2S/vGgeVdULnvDAlzFVa5zPa3VnkczwqR3o3Fs/+pX
+2AGzkrYoOIDzkZWvmtpWFU1W8g+/zpIAgzEzGjdjqIdoyJwQO++VMUtIoVEK/Swd
+1ZHX+dzn52RlVr01fGGQaO6zgfbQzEa5gjqci4SG6UmusXXx60qNl2K3/0fEqjsh
+3bObYIc48n+7u/65ovsuaxoUCzxFI/LUy6Mm7OpKHFahG2kbqKTz5LZCGYH1LQ5Y
+sMQwoeBFAgMBAAECggEAQ9cvq+ZKWQGGXtOJKpgxjSy0SqsSR5EctHQXowih9BWF
+MyQzpEkYnQWQlohiWAU0yoUh7IupjKr1wGGDTtQlXjyZ4zBK+3E2RWuheURK90Re
+25UDjPvNx+Z3Rq0RJ3/libYHLSBfmpkph31uDQRg7g9f/Ok62qtlIXkuqx0WCKzO
+XAwG+Wk2RnE6Py8jpRGphY89GGKOrPrMrVisuteRn8rAL8xBm+X7HN/j7IjHDYGV
+4Un4y/DJQYqYWuGM1mSrQfzEdDk8LaaGUy20/Ew/2u/MtCtB6Yo8Sx7h8+M4xlN0
+1EEdb6VIfPJUgjGGA95l1X7Hs2xVU9en2mgfDRFVwQKBgQDWMyDaTy2rm+KPLeJZ
++Xr6RUOC8V8btgr+U/slGPMuViSDCAM85dl/RztM6sYChQgEDRKA/lJpnqJFuPxM
+4P4OnuUZFzu9k6jzgIiXCrtZTFTJoA9P1z2Up7yvJgdBKyGLwSKeqIE0NvlqKMeX
+3F0UQiTEoPAlOywt0KjOmlcrsQKBgQDF6RuP9iSrvoxh5A/yKokZBJi8Q4tA/080
+JZWQTlwoMSHHy+gY55Y7K7JUbJe52EtHdhR1BBZeMPtR03WkaK4i1w81qYUN7OaV
+JDdoup/vDMygQ6AxF/YS3UPk5rNgeG4sTphrn+P91N3IUY7/d97rP1X2buJb4FVg
+nxFCzFJm1QKBgQCimhF4Z97NhPqJolVP4/kc/3NudXizepAB3RKraLNCG5Z/+Zcr
+pXhkDFjR3O8PfplFKf8/+M/q6cdZkkHEwo9Z3fkgAOkS0oLQxmPp9PWfpjg/DshQ
+3Z4buPGdLAsZx3ohsy1qr5PVZV4U3nwVpezqsgNjWKC0QqUY6msa20MNIQKBgQCH
+j2Y7s6Pmp7xMiQSLIauKoWVk/vbxbG96Doxlrebd+Nlkmzy9YlO67/FUdpVuzMKz
+jiPxCv2vQunCYI9iL/mnD5vxa84hfbVrTsVNTRejjCbVV7zwI7N/tGN+9K7FU3hT
+jPpGLdzizt2jCopiXl8oz9c31zfhKsYQSqRuFroSiQKBgQCJHnpzPtVJq2MKyzNf
+kYwmllm7BgbT8VHcEWZqk8wZk+ehZ+thAncLnR16+DASYXMrAehiY/bUPzzYqo4f
+eY12r8xdl1i8bcJzzUSIS/J1Qds8nw/qcaSdo8GPP1bGUpBNgLipFW5I0lPvrcby
+lCQU64GPcvJa3TVm9yONWvZK/A==
+-----END PRIVATE KEY-----
--- /dev/null
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEApZhj4L6aZmIu+MgAhCCSgXwvjbqTmtlWxaoEF3VMDAJDMETe
+KmYWlFz/r7AlEz8Ze+KPjY8vYbBeinUagB+eifMDyIc5aBMCeb1Nkv7xoHlXVC57
+wwJcxVWucz2t1Z5HM8Kkd6NxbP/qV9gBs5K2KDiA85GVr5raVhVNVvIPv86SAIMx
+Mxo3Y6iHaMicEDvvlTFLSKFRCv0sHdWR1/nc5+dkZVa9NXxhkGjus4H20MxGuYI6
+nIuEhulJrrF18etKjZdit/9HxKo7Id2zm2CHOPJ/u7v+uaL7LmsaFAs8RSPy1Muj
+JuzqShxWoRtpG6ik8+S2QhmB9S0OWLDEMKHgRQIDAQABAoIBAEPXL6vmSlkBhl7T
+iSqYMY0stEqrEkeRHLR0F6MIofQVhTMkM6RJGJ0FkJaIYlgFNMqFIeyLqYyq9cBh
+g07UJV48meMwSvtxNkVroXlESvdEXtuVA4z7zcfmd0atESd/5Ym2By0gX5qZKYd9
+bg0EYO4PX/zpOtqrZSF5LqsdFgiszlwMBvlpNkZxOj8vI6URqYWPPRhijqz6zK1Y
+rLrXkZ/KwC/MQZvl+xzf4+yIxw2BleFJ+MvwyUGKmFrhjNZkq0H8xHQ5PC2mhlMt
+tPxMP9rvzLQrQemKPEse4fPjOMZTdNRBHW+lSHzyVIIxhgPeZdV+x7NsVVPXp9po
+Hw0RVcECgYEA1jMg2k8tq5vijy3iWfl6+kVDgvFfG7YK/lP7JRjzLlYkgwgDPOXZ
+f0c7TOrGAoUIBA0SgP5SaZ6iRbj8TOD+Dp7lGRc7vZOo84CIlwq7WUxUyaAPT9c9
+lKe8ryYHQSshi8EinqiBNDb5aijHl9xdFEIkxKDwJTssLdCozppXK7ECgYEAxekb
+j/Ykq76MYeQP8iqJGQSYvEOLQP9PNCWVkE5cKDEhx8voGOeWOyuyVGyXudhLR3YU
+dQQWXjD7UdN1pGiuItcPNamFDezmlSQ3aLqf7wzMoEOgMRf2Et1D5OazYHhuLE6Y
+a5/j/dTdyFGO/3fe6z9V9m7iW+BVYJ8RQsxSZtUCgYEAopoReGfezYT6iaJVT+P5
+HP9zbnV4s3qQAd0Sq2izQhuWf/mXK6V4ZAxY0dzvD36ZRSn/P/jP6unHWZJBxMKP
+Wd35IADpEtKC0MZj6fT1n6Y4Pw7IUN2eG7jxnSwLGcd6IbMtaq+T1WVeFN58FaXs
+6rIDY1igtEKlGOprGttDDSECgYEAh49mO7Oj5qe8TIkEiyGriqFlZP728Wxveg6M
+Za3m3fjZZJs8vWJTuu/xVHaVbszCs44j8Qr9r0LpwmCPYi/5pw+b8WvOIX21a07F
+TU0Xo4wm1Ve88COzf7RjfvSuxVN4U4z6Ri3c4s7dowqKYl5fKM/XN9c34SrGEEqk
+bha6EokCgYEAiR56cz7VSatjCsszX5GMJpZZuwYG0/FR3BFmapPMGZPnoWfrYQJ3
+C50devgwEmFzKwHoYmP21D882KqOH3mNdq/MXZdYvG3Cc81EiEvydUHbPJ8P6nGk
+naPBjz9WxlKQTYC4qRVuSNJT763G8pQkFOuBj3LyWt01ZvcjjVr2Svw=
+-----END RSA PRIVATE KEY-----
define('WS_COMPILE_ASSETS', WS_FILES . '/compile');
define('WS_SOUNDS', WS_FILES . '/sounds');
define('WS_TOOLS', WS_FILES . '/tools');
+define('WS_PACKAGER',WS_FILES.'/packager');
define('WORKER_PREFIX', 'worker.');
$__autoload['wsServices'] = dirname(__FILE__) . '/class.ws.services.php';\r
$__autoload['wsUsersTree'] = dirname(__FILE__) . '/class.ws.users.tree.php';\r
$__autoload['wsMaintenance'] = dirname(__FILE__) . '/class.ws.maintenance.php';\r
-\r
-?>
\ No newline at end of file
}
public static function cleanPackages() {
- $limit = TIME - (2 * 3600); // 4 heures avant maintenant*
+ $limit = TIME - (2 * 3600); // 2 heures avant maintenant*
//
$dirs = array(
WS_FILES . '/packager/'
continue;
}
$source = WS_DOCS . '/' . $d . '/';
- $dest = '/mnt/sshfs/batman' . WS_DOCS . '/' . $d . '/';
+ $dest = '/data/extranet/www/fluidbook/docs1/' . $d . '/';
if (!file_exists($dest)) {
mkdir($dest, 0777, true);
}
`rm -rf /home/stats/www/objects/$book*;/home/stats/www/FWStats.sh /home/stats/www redobook=$book`;
}
+
+ public static function nwbuild($args){
+ wsPackager::package(16200,'win-exe-html');
+ }
}
$pngFile = $this->themeRoot . '/' . $this->theme->parametres->favicon;
$icoFile = $this->themeRoot . '/favicon.ico';
- if (!file_exists($icoFile) || filemtime($icoFile) < filemtime($pngFile)) {
+ if (!file_exists($icoFile) || filemtime($icoFile) < filemtime($pngFile) || filemtime(__FILE__) > filemtime($icoFile)) {
+ $tmp = CubeIT_Files::tempnam() . '.png';
+ $convert = "convert $pngFile -resize 64x64^ -gravity center $tmp";
+ `$convert`;
+
$icotool = new cubeCommandLine('icotool');
$icotool->setArg('c');
$icotool->setArg('o', $icoFile);
- $icotool->setArg(null, $pngFile);
+ $icotool->setArg(null, $tmp);
$icotool->execute();
+
+ unlink($tmp);
}
$this->vdir->copy($pngFile, 'data/favicon.png');
$this->vdir->copy($icoFile, 'data/favicon.ico');
\r
$__autoload['wsPackager'] = dirname(__FILE__) . '/class.ws.packager.php';\r
$__autoload['wsPackagerHTML'] = dirname(__FILE__) . '/class.ws.packager.html.php';\r
+\r
$__autoload['wsPackagerWinEXE'] = dirname(__FILE__) . '/class.ws.packager.win.exe.php';\r
$__autoload['wsPackagerWinINST'] = dirname(__FILE__) . '/class.ws.packager.win.inst.php';\r
$__autoload['wsPackagerWinCD'] = dirname(__FILE__) . '/class.ws.packager.win.cd.php';\r
-$__autoload['wsPackagerWinHTML'] = dirname(__FILE__) . '/class.ws.packager.win.html.php';\r
$__autoload['wsPackagerMacEXE'] = dirname(__FILE__) . '/class.ws.packager.mac.exe.php';\r
+\r
+$__autoload['wsPackagerWinEXEHTML'] = dirname(__FILE__) . '/class.ws.packager.win.exe.html.php';\r
+$__autoload['wsPackagerWinINSTHTML'] = dirname(__FILE__) . '/class.ws.packager.win.inst.html.php';\r
+$__autoload['wsPackagerWinCDHTML'] = dirname(__FILE__) . '/class.ws.packager.win.cd.html.php';\r
+$__autoload['wsPackagerMacEXEHTML'] = dirname(__FILE__) . '/class.ws.packager.mac.exe.html.php';\r
+\r
+\r
+$__autoload['wsPackagerWinHTML'] = dirname(__FILE__) . '/class.ws.packager.win.html.php';\r
+\r
$__autoload['wsPackagerAIR'] = dirname(__FILE__) . '/class.ws.packager.air.php';\r
$__autoload['wsPackagerV1'] = dirname(__FILE__) . '/class.ws.packager.v1.php';\r
$__autoload['wsPackagerPhonegap'] = dirname(__FILE__) . '/class.ws.packager.phonegap.php';\r
$packager = new wsPackagerWinHTML($book_id);
} else if ($version == 'phonegap') {
$packager = new wsPackagerPhonegap($book_id);
+ } else if ($version == 'win-exe-html') {
+ $packager = new wsPackagerWinEXEHTML($book_id);
+ } else if ($version == 'mac-exe-html') {
+ $packager = new wsPackagerMacEXEHTML($book_id);
+ } else if ($version == 'win-ins-html') {
+ $packager = new wsPackagerWinINSTHTML($book_id);
+ } else if ($version == 'win-cd-html') {
+ $packager = new wsPackagerWinCDHTML($book_id);
}
$packager->cleanOnDestruct = $packager->cleanOnDestruct && $cleanOnDestruct;
--- /dev/null
+<?php\r
+\r
+class wsPackagerWinEXEHTML extends wsPackager {\r
+\r
+ protected $exeName;\r
+ protected $appName;\r
+ protected $buildPath;\r
+\r
+ public function __construct($book_id) {\r
+ parent::__construct($book_id, null, true, true);\r
+ $this->version = 'win-exe-html';\r
+ $this->book->parametres->alwaysHTML5 = true;\r
+ $this->appName = '';\r
+ $this->_clean = false;\r
+\r
+ if ($this->book->parametres->offlineTitle == "") {\r
+ $this->exeName = cubeText::str2URL(mb_substr($this->book->parametres->title, 0, 30));\r
+ $this->appName = $this->book->parametres->title;\r
+ } else {\r
+ $this->exeName = cubeText::str2URL($this->book->parametres->offlineTitle);\r
+ $this->appName = $this->book->parametres->offlineTitle;\r
+ }\r
+ }\r
+\r
+ protected function preparePackage() {\r
+ parent::preparePackage();\r
+ $this->copyFluidbookFiles();\r
+ //$this->copyOtherFiles(array('Fluidbook.exe' => $this->exeName));\r
+\r
+ $this->makeJSON();\r
+\r
+ $this->buildPath = WS_PACKAGER . '/nwbuild/' . $this->version . '/' . $this->book_id;\r
+ if (!file_exists($this->buildPath)) {\r
+ mkdir($this->buildPath, 0777, true);\r
+ }\r
+\r
+ $cl = new CubeIT_CommandLine('/data/extranet/node_modules/nw-builder/bin/nwbuild');\r
+ $cl->setPath(CONVERTER_PATH);\r
+ $cl->setArg('p', 'win32');\r
+ $cl->setArg('o', $this->buildPath);\r
+ $cl->setArg(null, $this->vdir);\r
+ $cl->execute();\r
+ }\r
+\r
+ function makeJSON() {\r
+ $data = ['app_name' => $this->appName, 'main' => 'index.html', 'name' => $this->exeName, 'version' => '1.0.' . time(),\r
+ 'webkit' => [],\r
+ 'window' => ['height' => 768, 'width' => 1024, 'title' => $this->appName, 'id' => 'main', 'icon' => 'icon.png', 'mac_icon' => 'icon.icns']\r
+ ];\r
+ file_put_contents($this->vdir . '/package.json', json_encode($data));\r
+ }\r
+\r
+ public function makePackage($zip) {\r
+ parent::makePackage($zip);\r
+ $res = $this->zip();\r
+ $this->postPackage();\r
+ return $res;\r
+ }\r
+\r
+ public function getFinalPackageDir() {\r
+ return $this->buildPath . '/' . $this->exeName . '/win32';\r
+ }\r
+\r
+ protected function compile() {\r
+ $this->daoBook->compile($this->book_id, 'html5', false, $this->book->parametres->forceCompileOnDownload);\r
+ }\r
+\r
+ protected function copyFluidbookFiles() {\r
+ // Copie du FB vers un répertoire temporaire\r
+ $cp = new cubeCommandLine('cp');\r
+ $cp->setArg('R');\r
+ $cp->setArg('p');\r
+ $cp->setArg(null, WS_BOOKS . '/html5/' . $this->book->book_id . '/*');\r
+ $cp->setArg(null, $this->vdir);\r
+ $cp->execute();\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+<?php\r
+\r
+class wsPackagerWinINSTHTML extends wsPackagerWinEXEHTML {\r
+\r
+ protected $nsi;\r
+\r
+ public function __construct($book_id) {\r
+ parent::__construct($book_id);\r
+ $this->version = 'win-ins-html';\r
+ }\r
+\r
+ protected function preparePackage() {\r
+ parent::preparePackage();\r
+\r
+ $this->makeNSI();\r
+ }\r
+\r
+ protected function makeNSI() {\r
+ global $core;\r
+\r
+ $winvdir = $this->getFinalPackageDir();\r
+\r
+ $daoLang = new wsDAOLang($core->con);\r
+ $lang = $daoLang->selectById($this->book->lang);\r
+\r
+ if ($lang->nsis == 'Arabic') {\r
+ $lang->nsis = 'English';\r
+ }\r
+\r
+ if (!file_exists(WS_FILES . '/packager/download')) {\r
+ mkdir(WS_FILES . '/packager/download', 0777, true);\r
+ }\r
+\r
+\r
+ $fname = $this->exeName;\r
+ $title = $this->appName;\r
+\r
+ $nsi = file_get_contents(WS_COMPILE_ASSETS . '/script.nsi');\r
+ $nsi = str_replace('$name', utf8_decode($title), $nsi);\r
+ $nsi = str_replace('$htmldir', utf8_decode(WS_COMPILE_ASSETS), $nsi);\r
+ $nsi = str_replace('$fname', $fname, $nsi);\r
+ $nsi = str_replace('$fdir', $winvdir, $nsi);\r
+ $nsi = str_replace('$titre', utf8_decode($title), $nsi);\r
+ $nsi = str_replace('$lang', utf8_decode($lang->nsis), $nsi);\r
+ $nsi = str_replace('$nsisdir', '/usr/share/nsis', $nsi);\r
+ $nsi = str_replace('$output', $this->getPathBase('exe'), $nsi);\r
+ $favicon = $this->vdir . 'data/favicon.ico';\r
+ if ($this->theme->parametres->favicon == '') {\r
+ $this->copy(WS_COMPILE_ASSETS . '/fluidbook.ico', $favicon);\r
+ }\r
+ $nsi = str_replace('$favicon', $favicon, $nsi);\r
+\r
+ $this->nsi = $nsi;\r
+ }\r
+\r
+ public function makePackage($zip) {\r
+ $this->preparePackage();\r
+\r
+ $tmp = cubeFiles::tempnam();\r
+ file_put_contents($tmp, $this->nsi);\r
+ $makensis = new CubeIT_CommandLine('makensis');\r
+ $makensis->setArg(null, $tmp);\r
+ $makensis->execute();\r
+\r
+ return $this->getURLBase('exe');\r
+ }\r
+\r
+ public function __destruct() {\r
+\r
+ }\r
+\r
+}
\ No newline at end of file