import sys, ntpath, pygame, pygame.mixer, launchpad
from PyQt4 import QtCore, QtGui
class Sampler():
def __init__(self):
self.changeLabel("Edit")
#Poll for MIDI input
while True:
pad = LP.ButtonStateRaw()
if pad != []:
self.padnumber = pad[0]
self.velocity = pad[1]
if self.padnumber == 200:
self.Trigger(ex.btn_a1.samplePath, 0, ex.btn_a1)
if self.padnumber == 201:
self.Trigger(ex.btn_a2.samplePath, 1, ex.btn_a2)
if self.padnumber == 202:
self.Trigger(ex.btn_a3.samplePath, 2, ex.btn_a3)
if self.padnumber == 203:
self.Trigger(ex.btn_a4.samplePath, 3, ex.btn_a4)
if self.padnumber == 204:
self.Trigger(ex.btn_a5.samplePath, 4, ex.btn_a5)
if self.padnumber == 205:
self.Trigger(ex.btn_a6.samplePath, 5, ex.btn_a6)
if self.padnumber == 206:
self.Trigger(ex.btn_a7.samplePath, 6, ex.btn_a7)
if self.padnumber == 207:
self.Trigger(ex.btn_a8.samplePath, 7, ex.btn_a8)
if self.padnumber == 0:
self.Trigger(ex.btn_b1.samplePath, 0, ex.btn_b1)
if self.padnumber == 1:
self.Trigger(ex.btn_b2.samplePath, 1, ex.btn_b2)
if self.padnumber == 2:
self.Trigger(ex.btn_b3.samplePath, 2, ex.btn_b3)
if self.padnumber == 3:
self.Trigger(ex.btn_b4.samplePath, 3, ex.btn_b4)
if self.padnumber == 4:
self.Trigger(ex.btn_b5.samplePath, 4, ex.btn_b5)
if self.padnumber == 5:
self.Trigger(ex.btn_b6.samplePath, 5, ex.btn_b6)
if self.padnumber == 6:
self.Trigger(ex.btn_b7.samplePath, 6, ex.btn_b7)
if self.padnumber == 7:
self.Trigger(ex.btn_b8.samplePath, 7, ex.btn_b8)
if self.padnumber == 8:
self.Trigger(ex.btn_b9.samplePath, 8, ex.btn_b9)
if self.padnumber == 16:
self.Trigger(ex.btn_c1.samplePath, 16, ex.btn_c1)
if self.padnumber == 17:
self.Trigger(ex.btn_c2.samplePath, 17, ex.btn_c2)
if self.padnumber == 18:
self.Trigger(ex.btn_c3.samplePath, 18, ex.btn_c3)
if self.padnumber == 19:
self.Trigger(ex.btn_c4.samplePath, 19, ex.btn_c4)
if self.padnumber == 20:
self.Trigger(ex.btn_c5.samplePath, 20, ex.btn_c5)
if self.padnumber == 21:
self.Trigger(ex.btn_c6.samplePath, 21, ex.btn_c6)
if self.padnumber == 22:
self.Trigger(ex.btn_c7.samplePath, 22, ex.btn_c7)
if self.padnumber == 23:
self.Trigger(ex.btn_c8.samplePath, 23, ex.btn_c8)
if self.padnumber == 24:
self.Trigger(ex.btn_c9.samplePath, 24, ex.btn_c9)
if self.padnumber == 32:
self.Trigger(ex.btn_d1.samplePath, 32, ex.btn_d1)
if self.padnumber == 33:
self.Trigger(ex.btn_d2.samplePath, 33, ex.btn_d2)
if self.padnumber == 34:
self.Trigger(ex.btn_d3.samplePath, 34, ex.btn_d3)
if self.padnumber == 35:
self.Trigger(ex.btn_d4.samplePath, 35, ex.btn_d4)
if self.padnumber == 36:
self.Trigger(ex.btn_d5.samplePath, 36, ex.btn_d5)
if self.padnumber == 37:
self.Trigger(ex.btn_d6.samplePath, 37, ex.btn_d6)
if self.padnumber == 38:
self.Trigger(ex.btn_d7.samplePath, 38, ex.btn_d7)
if self.padnumber == 39:
self.Trigger(ex.btn_d8.samplePath, 39, ex.btn_d8)
if self.padnumber == 40:
self.Trigger(ex.btn_d9.samplePath, 40, ex.btn_d9)
if self.padnumber == 48:
self.Trigger(ex.btn_e1.samplePath, 48, ex.btn_e1)
if self.padnumber == 49:
self.Trigger(ex.btn_e2.samplePath, 49, ex.btn_e2)
if self.padnumber == 50:
self.Trigger(ex.btn_e3.samplePath, 50, ex.btn_e3)
if self.padnumber == 51:
self.Trigger(ex.btn_e4.samplePath, 51, ex.btn_e4)
if self.padnumber == 52:
self.Trigger(ex.btn_e5.samplePath, 52, ex.btn_e5)
if self.padnumber == 53:
self.Trigger(ex.btn_e6.samplePath, 53, ex.btn_e6)
if self.padnumber == 54:
self.Trigger(ex.btn_e7.samplePath, 54, ex.btn_e7)
if self.padnumber == 55:
self.Trigger(ex.btn_e8.samplePath, 55, ex.btn_e8)
if self.padnumber == 56:
self.Trigger(ex.btn_e9.samplePath, 56, ex.btn_e9)
if self.padnumber == 64:
self.Trigger(ex.btn_f1.samplePath, 64, ex.btn_f1)
if self.padnumber == 65:
self.Trigger(ex.btn_f2.samplePath, 65, ex.btn_f2)
if self.padnumber == 66:
self.Trigger(ex.btn_f3.samplePath, 66, ex.btn_f3)
if self.padnumber == 67:
self.Trigger(ex.btn_f4.samplePath, 67, ex.btn_f4)
if self.padnumber == 68:
self.Trigger(ex.btn_f5.samplePath, 68, ex.btn_f5)
if self.padnumber == 69:
self.Trigger(ex.btn_f6.samplePath, 69, ex.btn_f6)
if self.padnumber == 70:
self.Trigger(ex.btn_f7.samplePath, 70, ex.btn_f7)
if self.padnumber == 71:
self.Trigger(ex.btn_f8.samplePath, 71, ex.btn_f8)
if self.padnumber == 72:
self.Trigger(ex.btn_f9.samplePath, 72, ex.btn_f9)
if self.padnumber == 80:
self.Trigger(ex.btn_g1.samplePath, 80, ex.btn_g1)
if self.padnumber == 81:
self.Trigger(ex.btn_g2.samplePath, 81, ex.btn_g2)
if self.padnumber == 82:
self.Trigger(ex.btn_g3.samplePath, 82, ex.btn_g3)
if self.padnumber == 83:
self.Trigger(ex.btn_g4.samplePath, 83, ex.btn_g4)
if self.padnumber == 84:
self.Trigger(ex.btn_g5.samplePath, 84, ex.btn_g5)
if self.padnumber == 85:
self.Trigger(ex.btn_g6.samplePath, 85, ex.btn_g6)
if self.padnumber == 86:
self.Trigger(ex.btn_g7.samplePath, 86, ex.btn_g7)
if self.padnumber == 87:
self.Trigger(ex.btn_g8.samplePath, 87, ex.btn_g8)
if self.padnumber == 88:
self.Trigger(ex.btn_g9.samplePath, 88, ex.btn_g9)
if self.padnumber == 96:
self.Trigger(ex.btn_h1.samplePath, 96, ex.btn_h1)
if self.padnumber == 97:
self.Trigger(ex.btn_h2.samplePath, 97, ex.btn_h2)
if self.padnumber == 98:
self.Trigger(ex.btn_h3.samplePath, 98, ex.btn_h3)
if self.padnumber == 99:
self.Trigger(ex.btn_h4.samplePath, 99, ex.btn_h4)
if self.padnumber == 100:
self.Trigger(ex.btn_h5.samplePath, 100, ex.btn_h5)
if self.padnumber == 101:
self.Trigger(ex.btn_h6.samplePath, 101, ex.btn_h6)
if self.padnumber == 102:
self.Trigger(ex.btn_h7.samplePath, 102, ex.btn_h7)
if self.padnumber == 103:
self.Trigger(ex.btn_h8.samplePath, 103, ex.btn_h8)
if self.padnumber == 104:
self.Trigger(ex.btn_h9.samplePath, 104, ex.btn_h9)
if self.padnumber == 112:
self.Trigger(ex.btn_i1.samplePath, 112, ex.btn_i1)
if self.padnumber == 113:
self.Trigger(ex.btn_i2.samplePath, 113, ex.btn_i2)
if self.padnumber == 114:
self.Trigger(ex.btn_i3.samplePath, 114, ex.btn_i3)
if self.padnumber == 115:
self.Trigger(ex.btn_i4.samplePath, 115, ex.btn_i4)
if self.padnumber == 116:
self.Trigger(ex.btn_i5.samplePath, 116, ex.btn_i5)
if self.padnumber == 117:
self.Trigger(ex.btn_i6.samplePath, 117, ex.btn_i6)
if self.padnumber == 118:
self.Trigger(ex.btn_i7.samplePath, 118, ex.btn_i7)
if self.padnumber == 119:
self.Trigger(ex.btn_i8.samplePath, 119, ex.btn_i8)
if self.padnumber == 120:
self.changeLabel("Play")
break
#Change text for the mode button and colour of corresponding Launchpad Pad
def changeLabel(self, currentMode):
if currentMode == "Play":
ex.lab_i9.setText(QtGui.QApplication.translate("Form", "<html><head/><body><p align=\"center\"><span style=\" color:#ffffff;\">Edit</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
QtGui.QApplication.processEvents()
LP.LedCtrlRaw(120, 0, 3)
return
if currentMode == "Edit":
ex.lab_i9.setText(QtGui.QApplication.translate("Form", "<html><head/><body><p align=\"center\"><span style=\" color:#ffffff;\">Play</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
QtGui.QApplication.processEvents()
LP.LedCtrlRaw(120, 3, 0)
return
#Determine if pad has a sample assigned. If so then play it, if not then ignore. Change pad LEDs and GUI icons for visual feedback.
def Trigger(self, sample, padnumber, button):
self.samplePath = sample
if self.samplePath == None:
pass
else:
if self.velocity < 1:
LP.LedCtrlRaw(padnumber, 0, 3)
button.icon.addPixmap(QtGui.QPixmap(button.iconPathAssigned), QtGui.QIcon.Normal, QtGui.QIcon.Off)
button.setIcon(button.icon)
QtGui.QApplication.processEvents()
else:
LP.LedCtrlRaw(padnumber, 3, 0)
button.icon.addPixmap(QtGui.QPixmap(button.iconPathPlaying), QtGui.QIcon.Normal, QtGui.QIcon.Off)
button.setIcon(button.icon)
QtGui.QApplication.processEvents()
sample = pygame.mixer.Sound(self.samplePath)
pygame.mixer.Sound.play(sample)
#Create the GUI. Inherits from the QT QWidget class.
class Ui_Form(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setupUi(self)
#Properly shut the Launchpad process and turn off all LEDs.
def closeEvent(self, event):
LP.Reset()
LP.Close()
#Create the buttons, labels and background. Define properties.
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(591, 591)
self.Background = QtGui.QLabel(Form)
self.Background.setGeometry(QtCore.QRect(0, 0, 631, 591))
self.Background.setPixmap(QtGui.QPixmap("Python/LP_Proj/LP_Background.png"))
self.Background.setObjectName("Background")
self.lab_a1 = Label("Unassigned", 20, 76, 61, 16, "lab_a1", self)
self.lab_a2 = Label("Unassigned", 80, 76, 61, 16, "lab_a2", self)
self.lab_a3 = Label("Unassigned", 140, 76, 61, 16, "lab_a3", self)
self.lab_a4 = Label("Unassigned", 200, 76, 61, 16, "lab_a4", self)
self.lab_a5 = Label("Unassigned", 260, 76, 61, 16, "lab_a5", self)
self.lab_a6 = Label("Unassigned", 320, 76, 61, 16, "lab_a6", self)
self.lab_a7 = Label("Unassigned", 380, 76, 61, 16, "lab_a7", self)
self.lab_a8 = Label("Unassigned", 440, 76, 61, 16, "lab_a8", self)
self.lab_b1 = Label("Unassigned", 20, 136, 61, 16, "lab_b1", self)
self.lab_b2 = Label("Unassigned", 80, 136, 61, 16, "lab_b2", self)
self.lab_b3 = Label("Unassigned", 140, 136, 61, 16, "lab_b3", self)
self.lab_b4 = Label("Unassigned", 200, 136, 61, 16, "lab_b4", self)
self.lab_b5 = Label("Unassigned", 260, 136, 61, 16, "lab_b5", self)
self.lab_b6 = Label("Unassigned", 320, 136, 61, 16, "lab_b6", self)
self.lab_b7 = Label("Unassigned", 380, 136, 61, 16, "lab_b7", self)
self.lab_b8 = Label("Unassigned", 440, 136, 61, 16, "lab_b8", self)
self.lab_b9 = Label("Unassigned", 500, 136, 61, 16, "lab_b9", self)
self.lab_c1 = Label("Unassigned", 20, 196, 61, 16, "lab_c1", self)
self.lab_c2 = Label("Unassigned", 80, 196, 61, 16, "lab_c2", self)
self.lab_c3 = Label("Unassigned", 140, 196, 61, 16, "lab_c3", self)
self.lab_c4 = Label("Unassigned", 200, 196, 61, 16, "lab_c4", self)
self.lab_c5 = Label("Unassigned", 260, 196, 61, 16, "lab_c5", self)
self.lab_c6 = Label("Unassigned", 320, 196, 61, 16, "lab_c6", self)
self.lab_c7 = Label("Unassigned", 380, 196, 61, 16, "lab_c7", self)
self.lab_c8 = Label("Unassigned", 440, 196, 61, 16, "lab_c8", self)
self.lab_c9 = Label("Unassigned", 500, 196, 61, 16, "lab_c9", self)
self.lab_d1 = Label("Unassigned", 20, 256, 61, 16, "lab_d1", self)
self.lab_d2 = Label("Unassigned", 80, 256, 61, 16, "lab_d2", self)
self.lab_d3 = Label("Unassigned", 140, 256, 61, 16, "lab_d3", self)
self.lab_d4 = Label("Unassigned", 200, 256, 61, 16, "lab_d4", self)
self.lab_d5 = Label("Unassigned", 260, 256, 61, 16, "lab_d5", self)
self.lab_d6 = Label("Unassigned", 320, 256, 61, 16, "lab_d6", self)
self.lab_d7 = Label("Unassigned", 380, 256, 61, 16, "lab_d7", self)
self.lab_d8 = Label("Unassigned", 440, 256, 61, 16, "lab_d8", self)
self.lab_d9 = Label("Unassigned", 500, 256, 61, 16, "lab_d9", self)
self.lab_e1 = Label("Unassigned", 20, 316, 61, 16, "lab_e1", self)
self.lab_e2 = Label("Unassigned", 80, 316, 61, 16, "lab_e2", self)
self.lab_e3 = Label("Unassigned", 140, 316, 61, 16, "lab_e3", self)
self.lab_e4 = Label("Unassigned", 200, 316, 61, 16, "lab_e4", self)
self.lab_e5 = Label("Unassigned", 260, 316, 61, 16, "lab_e5", self)
self.lab_e6 = Label("Unassigned", 320, 316, 61, 16, "lab_e6", self)
self.lab_e7 = Label("Unassigned", 380, 316, 61, 16, "lab_e7", self)
self.lab_e8 = Label("Unassigned", 440, 316, 61, 16, "lab_e8", self)
self.lab_e9 = Label("Unassigned", 500, 316, 61, 16, "lab_e9", self)
self.lab_f1 = Label("Unassigned", 20, 376, 61, 16, "lab_f1", self)
self.lab_f2 = Label("Unassigned", 80, 376, 61, 16, "lab_f2", self)
self.lab_f3 = Label("Unassigned", 140, 376, 61, 16, "lab_f3", self)
self.lab_f4 = Label("Unassigned", 200, 376, 61, 16, "lab_f4", self)
self.lab_f5 = Label("Unassigned", 260, 376, 61, 16, "lab_f5", self)
self.lab_f6 = Label("Unassigned", 320, 376, 61, 16, "lab_f6", self)
self.lab_f7 = Label("Unassigned", 380, 376, 61, 16, "lab_f7", self)
self.lab_f8 = Label("Unassigned", 440, 376, 61, 16, "lab_f8", self)
self.lab_f9 = Label("Unassigned", 500, 376, 61, 16, "lab_f9", self)
self.lab_g1 = Label("Unassigned", 20, 436, 61, 16, "lab_g1", self)
self.lab_g2 = Label("Unassigned", 80, 436, 61, 16, "lab_g2", self)
self.lab_g3 = Label("Unassigned", 140, 436, 61, 16, "lab_g3", self)
self.lab_g4 = Label("Unassigned", 200, 436, 61, 16, "lab_g4", self)
self.lab_g5 = Label("Unassigned", 260, 436, 61, 16, "lab_g5", self)
self.lab_g6 = Label("Unassigned", 320, 436, 61, 16, "lab_g6", self)
self.lab_g7 = Label("Unassigned", 380, 436, 61, 16, "lab_g7", self)
self.lab_g8 = Label("Unassigned", 440, 436, 61, 16, "lab_g8", self)
self.lab_g9 = Label("Unassigned", 500, 436, 61, 16, "lab_g9", self)
self.lab_h1 = Label("Unassigned", 20, 496, 61, 16, "lab_h1", self)
self.lab_h2 = Label("Unassigned", 80, 496, 61, 16, "lab_h2", self)
self.lab_h3 = Label("Unassigned", 140, 496, 61, 16, "lab_h3", self)
self.lab_h4 = Label("Unassigned", 200, 496, 61, 16, "lab_h4", self)
self.lab_h5 = Label("Unassigned", 260, 496, 61, 16, "lab_h5", self)
self.lab_h6 = Label("Unassigned", 320, 496, 61, 16, "lab_h6", self)
self.lab_h7 = Label("Unassigned", 380, 496, 61, 16, "lab_h7", self)
self.lab_h8 = Label("Unassigned", 440, 496, 61, 16, "lab_h8", self)
self.lab_h9 = Label("Unassigned", 500, 496, 61, 16, "lab_h9", self)
self.lab_i1 = Label("Unassigned", 20, 556, 61, 16, "lab_i1", self)
self.lab_i2 = Label("Unassigned", 80, 556, 61, 16, "lab_i2", self)
self.lab_i3 = Label("Unassigned", 140, 556, 61, 16, "lab_i3", self)
self.lab_i4 = Label("Unassigned", 200, 556, 61, 16, "lab_i4", self)
self.lab_i5 = Label("Unassigned", 260, 556, 61, 16, "lab_i5", self)
self.lab_i6 = Label("Unassigned", 320, 556, 61, 16, "lab_i6", self)
self.lab_i7 = Label("Unassigned", 380, 556, 61, 16, "lab_i7", self)
self.lab_i8 = Label("Unassigned", 440, 556, 61, 16, "lab_i8", self)
self.lab_i9 = Label("Edit", 500, 556, 61, 16, "lab_i9", self)
self.btn_a1 = Button("Python/LP_Proj/LP_Circle_Off.png", 49, 49, 30, 38, 41, 41, "btn_a1", self.lab_a1, "Python/LP_Proj/LP_Circle_Green.png", "Python/LP_Proj/LP_Circle_Red.png", 200, self)
self.btn_a2 = Button("Python/LP_Proj/LP_Circle_Off.png", 49, 49, 90, 38, 41, 41, "btn_a2", self.lab_a2, "Python/LP_Proj/LP_Circle_Green.png", "Python/LP_Proj/LP_Circle_Red.png", 201, self)
self.btn_a3 = Button("Python/LP_Proj/LP_Circle_Off.png", 49, 49, 150, 38, 41, 41, "btn_a3", self.lab_a3, "Python/LP_Proj/LP_Circle_Green.png", "Python/LP_Proj/LP_Circle_Red.png", 202, self)
self.btn_a4 = Button("Python/LP_Proj/LP_Circle_Off.png", 49, 49, 210, 38, 41, 41, "btn_a4", self.lab_a4, "Python/LP_Proj/LP_Circle_Green.png", "Python/LP_Proj/LP_Circle_Red.png", 203, self)
self.btn_a5 = Button("Python/LP_Proj/LP_Circle_Off.png", 49, 49, 270, 38, 41, 41, "btn_a5", self.lab_a5, "Python/LP_Proj/LP_Circle_Green.png", "Python/LP_Proj/LP_Circle_Red.png", 204, self)
self.btn_a6 = Button("Python/LP_Proj/LP_Circle_Off.png", 49, 49, 330, 38, 41, 41, "btn_a6", self.lab_a6, "Python/LP_Proj/LP_Circle_Green.png", "Python/LP_Proj/LP_Circle_Red.png", 205, self)
self.btn_a7 = Button("Python/LP_Proj/LP_Circle_Off.png", 49, 49, 390, 38, 41, 41, "btn_a7", self.lab_a7, "Python/LP_Proj/LP_Circle_Green.png", "Python/LP_Proj/LP_Circle_Red.png", 206, self)
self.btn_a8 = Button("Python/LP_Proj/LP_Circle_Off.png", 49, 49, 450, 38, 41, 41, "btn_a8", self.lab_a8, "Python/LP_Proj/LP_Circle_Green.png", "Python/LP_Proj/LP_Circle_Red.png", 207, self)
self.btn_b1 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 20, 90, 61, 51, "btn_b1", self.lab_b1, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 0, self)
self.btn_b2 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 80, 90, 61, 51, "btn_b2", self.lab_b2, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 1, self)
self.btn_b3 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 140, 90, 61, 51, "btn_b3", self.lab_b3, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 2, self)
self.btn_b4 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 200, 90, 61, 51, "btn_b4", self.lab_b4, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 3, self)
self.btn_b5 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 260, 90, 61, 51, "btn_b5", self.lab_b5, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 4, self)
self.btn_b6 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 320, 90, 61, 51, "btn_b6", self.lab_b6, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 5, self)
self.btn_b7 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 380, 90, 61, 51, "btn_b7", self.lab_b7, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 6, self)
self.btn_b8 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 440, 90, 61, 51, "btn_b8", self.lab_b8, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 7, self)
self.btn_b9 = Button("Python/LP_Proj/LP_Circle_Off.png", 49, 49, 510, 95, 41, 41, "btn_b9", self.lab_b9, "Python/LP_Proj/LP_Circle_Green.png", "Python/LP_Proj/LP_Circle_Red.png", 8, self)
self.btn_c1 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 20, 150, 61, 51, "btn_c1", self.lab_c1, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 16, self)
self.btn_c2 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 80, 150, 61, 51, "btn_c2", self.lab_c2, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 17, self)
self.btn_c3 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 140, 150, 61, 51, "btn_c3", self.lab_c3, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 18, self)
self.btn_c4 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 200, 150, 61, 51, "btn_c4", self.lab_c4, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 19, self)
self.btn_c5 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 260, 150, 61, 51, "btn_c5", self.lab_c5, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 20, self)
self.btn_c6 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 320, 150, 61, 51, "btn_c6", self.lab_c6, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 21, self)
self.btn_c7 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 380, 150, 61, 51, "btn_c7", self.lab_c7, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 22, self)
self.btn_c8 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 440, 150, 61, 51, "btn_c8", self.lab_c8, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 23, self)
self.btn_c9 = Button("Python/LP_Proj/LP_Circle_Off.png", 49, 49, 510, 155, 41, 41, "btn_c9", self.lab_c9, "Python/LP_Proj/LP_Circle_Green.png", "Python/LP_Proj/LP_Circle_Red.png", 24, self)
self.btn_d1 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 20, 210, 61, 51, "btn_d1", self.lab_d1, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 32, self)
self.btn_d2 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 80, 210, 61, 51, "btn_d2", self.lab_d2, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 33, self)
self.btn_d3 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 140, 210, 61, 51, "btn_d3", self.lab_d3, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 34, self)
self.btn_d4 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 200, 210, 61, 51, "btn_d4", self.lab_d4, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 35, self)
self.btn_d5 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 260, 210, 61, 51, "btn_d5", self.lab_d5, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 36, self)
self.btn_d6 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 320, 210, 61, 51, "btn_d6", self.lab_d6, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 37, self)
self.btn_d7 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 380, 210, 61, 51, "btn_d7", self.lab_d7, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 38, self)
self.btn_d8 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 440, 210, 61, 51, "btn_d8", self.lab_d8, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 39, self)
self.btn_d9 = Button("Python/LP_Proj/LP_Circle_Off.png", 49, 49, 510, 215, 41, 41, "btn_d9", self.lab_d9, "Python/LP_Proj/LP_Circle_Green.png", "Python/LP_Proj/LP_Circle_Red.png", 40, self)
self.btn_e1 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 20, 270, 61, 51, "btn_e1", self.lab_e1, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 48, self)
self.btn_e2 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 80, 270, 61, 51, "btn_e2", self.lab_e2, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 49, self)
self.btn_e3 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 140, 270, 61, 51, "btn_e3", self.lab_e3, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 50, self)
self.btn_e4 = Button("Python/LP_Proj/LP_MidTL_Off.png", 55, 55, 200, 270, 61, 51, "btn_e4", self.lab_e4, "Python/LP_Proj/LP_MidTL_Green.png", "Python/LP_Proj/LP_MidTL_Red.png", 51, self)
self.btn_e5 = Button("Python/LP_Proj/LP_MidTR_Off.png", 55, 55, 260, 270, 61, 51, "btn_e5", self.lab_e5, "Python/LP_Proj/LP_MidTR_Green.png", "Python/LP_Proj/LP_MidTR_Red.png", 52, self)
self.btn_e6 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 320, 270, 61, 51, "btn_e6", self.lab_e6, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 53, self)
self.btn_e7 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 380, 270, 61, 51, "btn_e7", self.lab_e7, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 54, self)
self.btn_e8 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 440, 270, 61, 51, "btn_e8", self.lab_e8, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 55, self)
self.btn_e9 = Button("Python/LP_Proj/LP_Circle_Off.png", 49, 49, 510, 275, 41, 41, "btn_e9", self.lab_e9, "Python/LP_Proj/LP_Circle_Green.png", "Python/LP_Proj/LP_Circle_Red.png", 56, self)
self.btn_f1 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 20, 330, 61, 51, "btn_f1", self.lab_f1, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 64, self)
self.btn_f2 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 80, 330, 61, 51, "btn_f2", self.lab_f2, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 65, self)
self.btn_f3 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 140, 330, 61, 51, "btn_f3", self.lab_f3, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 66, self)
self.btn_f4 = Button("Python/LP_Proj/LP_MidBL_Off.png", 55, 55, 200, 330, 61, 51, "btn_f4", self.lab_f4, "Python/LP_Proj/LP_MidBL_Green.png", "Python/LP_Proj/LP_MidBL_Red.png", 67, self)
self.btn_f5 = Button("Python/LP_Proj/LP_MidBR_Off.png", 55, 55, 260, 330, 61, 51, "btn_f5", self.lab_f5, "Python/LP_Proj/LP_MidBR_Green.png", "Python/LP_Proj/LP_MidBR_Red.png", 68, self)
self.btn_f6 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 320, 330, 61, 51, "btn_f6", self.lab_f6, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 69, self)
self.btn_f7 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 380, 330, 61, 51, "btn_f7", self.lab_f7, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 70, self)
self.btn_f8 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 440, 330, 61, 51, "btn_f8", self.lab_f8, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 71, self)
self.btn_f9 = Button("Python/LP_Proj/LP_Circle_Off.png", 49, 49, 510, 335, 41, 41, "btn_f9", self.lab_f9, "Python/LP_Proj/LP_Circle_Green.png", "Python/LP_Proj/LP_Circle_Red.png", 72, self)
self.btn_g1 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 20, 390, 61, 51, "btn_g1", self.lab_g1, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 80, self)
self.btn_g2 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 80, 390, 61, 51, "btn_g2", self.lab_g2, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 81, self)
self.btn_g3 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 140, 390, 61, 51, "btn_g3", self.lab_g3, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 82, self)
self.btn_g4 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 200, 390, 61, 51, "btn_g4", self.lab_g4, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 83, self)
self.btn_g5 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 260, 390, 61, 51, "btn_g5", self.lab_g5, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 84, self)
self.btn_g6 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 320, 390, 61, 51, "btn_g6", self.lab_g6, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 85, self)
self.btn_g7 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 380, 390, 61, 51, "btn_g7", self.lab_g7, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 86, self)
self.btn_g8 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 440, 390, 61, 51, "btn_g8", self.lab_g8, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 87, self)
self.btn_g9 = Button("Python/LP_Proj/LP_Circle_Off.png", 49, 49, 510, 395, 41, 41, "btn_g9", self.lab_g9, "Python/LP_Proj/LP_Circle_Green.png", "Python/LP_Proj/LP_Circle_Red.png", 88, self)
self.btn_h1 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 20, 450, 61, 51, "btn_h1", self.lab_h1, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 96, self)
self.btn_h2 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 80, 450, 61, 51, "btn_h2", self.lab_h2, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 97, self)
self.btn_h3 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 140, 450, 61, 51, "btn_h3", self.lab_h3, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 98, self)
self.btn_h4 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 200, 450, 61, 51, "btn_h4", self.lab_h4, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 99, self)
self.btn_h5 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 260, 450, 61, 51, "btn_h5", self.lab_h5, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 100, self)
self.btn_h6 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 320, 450, 61, 51, "btn_h6", self.lab_h6, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 101, self)
self.btn_h7 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 380, 450, 61, 51, "btn_h7", self.lab_h7, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 102, self)
self.btn_h8 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 440, 450, 61, 51, "btn_h8", self.lab_h8, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 103, self)
self.btn_h9 = Button("Python/LP_Proj/LP_Circle_Off.png", 49, 49, 510, 455, 41, 41, "btn_h9", self.lab_h9, "Python/LP_Proj/LP_Circle_Green.png", "Python/LP_Proj/LP_Circle_Red.png", 104, self)
self.btn_i1 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 20, 510, 61, 51, "btn_i1", self.lab_i1, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 112, self)
self.btn_i2 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 80, 510, 61, 51, "btn_i2", self.lab_i2, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 113, self)
self.btn_i3 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 140, 510, 61, 51, "btn_i3", self.lab_i3, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 114, self)
self.btn_i4 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 200, 510, 61, 51, "btn_i4", self.lab_i4, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 115, self)
self.btn_i5 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 260, 510, 61, 51, "btn_i5", self.lab_i5, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 116, self)
self.btn_i6 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 320, 510, 61, 51, "btn_i6", self.lab_i6, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 117, self)
self.btn_i7 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 380, 510, 61, 51, "btn_i7", self.lab_i7, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 118, self)
self.btn_i8 = Button("Python/LP_Proj/LP_Square_Off.png", 55, 55, 440, 510, 61, 51, "btn_i8", self.lab_i8, "Python/LP_Proj/LP_Square_Green.png", "Python/LP_Proj/LP_Square_Red.png", 119, self)
self.btn_i9 = ModeButton("Python/LP_Proj/LP_Circle_Mode.png", 49, 49, 510, 515, 41, 41, "btn_i9", self)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
#Allow buttons to function upon being clicked.
def retranslateUi(self, Form):
Form.setWindowTitle(QtGui.QApplication.translate("Form", "Launchpad Control", None, QtGui.QApplication.UnicodeUTF8))
self.btn_a1.clicked.connect(self.btn_a1.playSample)
self.btn_a2.clicked.connect(self.btn_a2.playSample)
self.btn_a3.clicked.connect(self.btn_a1.playSample)
self.btn_a4.clicked.connect(self.btn_a2.playSample)
self.btn_a5.clicked.connect(self.btn_a1.playSample)
self.btn_a6.clicked.connect(self.btn_a2.playSample)
self.btn_a7.clicked.connect(self.btn_a1.playSample)
self.btn_a8.clicked.connect(self.btn_a2.playSample)
self.btn_b1.clicked.connect(self.btn_b1.playSample)
self.btn_b2.clicked.connect(self.btn_b2.playSample)
self.btn_b3.clicked.connect(self.btn_b3.playSample)
self.btn_b4.clicked.connect(self.btn_b4.playSample)
self.btn_b5.clicked.connect(self.btn_b5.playSample)
self.btn_b6.clicked.connect(self.btn_b6.playSample)
self.btn_b7.clicked.connect(self.btn_b7.playSample)
self.btn_b8.clicked.connect(self.btn_b8.playSample)
self.btn_b9.clicked.connect(self.btn_b9.playSample)
self.btn_c1.clicked.connect(self.btn_c1.playSample)
self.btn_c2.clicked.connect(self.btn_c2.playSample)
self.btn_c3.clicked.connect(self.btn_c3.playSample)
self.btn_c4.clicked.connect(self.btn_c4.playSample)
self.btn_c5.clicked.connect(self.btn_c5.playSample)
self.btn_c6.clicked.connect(self.btn_c6.playSample)
self.btn_c7.clicked.connect(self.btn_c7.playSample)
self.btn_c8.clicked.connect(self.btn_c8.playSample)
self.btn_c9.clicked.connect(self.btn_c9.playSample)
self.btn_d1.clicked.connect(self.btn_d1.playSample)
self.btn_d2.clicked.connect(self.btn_d2.playSample)
self.btn_d3.clicked.connect(self.btn_d3.playSample)
self.btn_d4.clicked.connect(self.btn_d4.playSample)
self.btn_d5.clicked.connect(self.btn_d5.playSample)
self.btn_d6.clicked.connect(self.btn_d6.playSample)
self.btn_d7.clicked.connect(self.btn_d7.playSample)
self.btn_d8.clicked.connect(self.btn_d8.playSample)
self.btn_d9.clicked.connect(self.btn_d9.playSample)
self.btn_e1.clicked.connect(self.btn_e1.playSample)
self.btn_e2.clicked.connect(self.btn_e2.playSample)
self.btn_e3.clicked.connect(self.btn_e3.playSample)
self.btn_e4.clicked.connect(self.btn_e4.playSample)
self.btn_e5.clicked.connect(self.btn_e5.playSample)
self.btn_e6.clicked.connect(self.btn_e6.playSample)
self.btn_e7.clicked.connect(self.btn_e7.playSample)
self.btn_e8.clicked.connect(self.btn_e8.playSample)
self.btn_e9.clicked.connect(self.btn_e9.playSample)
self.btn_f1.clicked.connect(self.btn_f1.playSample)
self.btn_f2.clicked.connect(self.btn_f2.playSample)
self.btn_f3.clicked.connect(self.btn_f3.playSample)
self.btn_f4.clicked.connect(self.btn_f4.playSample)
self.btn_f5.clicked.connect(self.btn_f5.playSample)
self.btn_f6.clicked.connect(self.btn_f6.playSample)
self.btn_f7.clicked.connect(self.btn_f7.playSample)
self.btn_f8.clicked.connect(self.btn_f8.playSample)
self.btn_f9.clicked.connect(self.btn_f9.playSample)
self.btn_g1.clicked.connect(self.btn_g1.playSample)
self.btn_g2.clicked.connect(self.btn_g2.playSample)
self.btn_g3.clicked.connect(self.btn_g3.playSample)
self.btn_g4.clicked.connect(self.btn_g4.playSample)
self.btn_g5.clicked.connect(self.btn_g5.playSample)
self.btn_g6.clicked.connect(self.btn_g6.playSample)
self.btn_g7.clicked.connect(self.btn_g7.playSample)
self.btn_g8.clicked.connect(self.btn_g8.playSample)
self.btn_g9.clicked.connect(self.btn_g9.playSample)
self.btn_h1.clicked.connect(self.btn_h1.playSample)
self.btn_h2.clicked.connect(self.btn_h2.playSample)
self.btn_h3.clicked.connect(self.btn_h3.playSample)
self.btn_h4.clicked.connect(self.btn_h4.playSample)
self.btn_h5.clicked.connect(self.btn_h5.playSample)
self.btn_h6.clicked.connect(self.btn_h6.playSample)
self.btn_h7.clicked.connect(self.btn_h7.playSample)
self.btn_h8.clicked.connect(self.btn_h8.playSample)
self.btn_h9.clicked.connect(self.btn_h9.playSample)
self.btn_i1.clicked.connect(self.btn_i1.playSample)
self.btn_i2.clicked.connect(self.btn_i2.playSample)
self.btn_i3.clicked.connect(self.btn_i3.playSample)
self.btn_i4.clicked.connect(self.btn_i4.playSample)
self.btn_i5.clicked.connect(self.btn_i5.playSample)
self.btn_i6.clicked.connect(self.btn_i6.playSample)
self.btn_i7.clicked.connect(self.btn_i7.playSample)
self.btn_i8.clicked.connect(self.btn_i8.playSample)
self.btn_i9.clicked.connect(launchSampler)
#Custom label class, inheriting from QT QLabel.
class Label(QtGui.QLabel):
def __init__(self, text, posX, posY, posA, posB, objName, parent=None):
super(Label, self).__init__(parent=parent)
self.setGeometry(QtCore.QRect(posX, posY, posA, posB))
self.font = QtGui.QFont()
self.font.setPointSize(10)
self.setFont(self.font)
self.setObjectName(objName)
self.text = text
self.setText(QtGui.QApplication.translate("Form", "<html><head/><body><p align=\"center\"><span style=\" color:#ffffff;\">"+ self.text +"</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
#Custom button class without drag and drop functionality.
class ModeButton(QtGui.QPushButton):
def __init__(self, iconPathUnassigned, iconX, iconY, posX, posY, posA, posB, objName, parent=None):
super(ModeButton, self).__init__(parent=parent)
self.icon = QtGui.QIcon()
self.icon.addPixmap(QtGui.QPixmap(iconPathUnassigned), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.setIcon(self.icon)
self.setIconSize(QtCore.QSize(iconX, iconY))
self.setGeometry(QtCore.QRect(posX, posY, posA, posB))
self.setObjectName(objName)
LP.LedCtrlRaw(120, 0, 3)
#Custom button class with drag and drop functionality.
class Button(QtGui.QPushButton):
def __init__(self, iconPathUnassigned, iconX, iconY, posX, posY, posA, posB, objName, labEdit, iconPathAssigned, iconPathPlaying, padnumber, parent=None):
super(Button, self).__init__(parent=parent)
self.setAcceptDrops(True)
self.iconPathAssigned = iconPathAssigned
self.iconPathPlaying = iconPathPlaying
self.icon = QtGui.QIcon()
self.icon.addPixmap(QtGui.QPixmap(iconPathUnassigned), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.setIcon(self.icon)
self.setIconSize(QtCore.QSize(iconX, iconY))
self.setGeometry(QtCore.QRect(posX, posY, posA, posB))
self.setObjectName(objName)
self.samplePath = None
self.label = labEdit
self.padnumber = padnumber
#If dragged item has a filepath then accept it, otherwise do not (i.e if it were text that had been dragged straight onto the button)
def dragEnterEvent(self, event):
if event.mimeData().hasUrls():
event.acceptProposedAction()
else:
super(Button, self).dragEnterEvent(event)
def dragMoveEvent(self, event):
super(Button, self).dragMoveEvent(event)
#If dragged item has a filepath then accept it, otherwise do not (i.e if it were text that had been dragged straight onto the button)
def dropEvent(self, event):
if event.mimeData().hasUrls():
for url in event.mimeData().urls():
self.samplePath = str(url.toLocalFile())
self.editLabel()
self.iconAssigned()
event.acceptProposedAction()
else:
super(Button,self).dropEvent(event)
def iconAssigned(self):
self.icon.addPixmap(QtGui.QPixmap(self.iconPathAssigned), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.setIcon(self.icon)
LP.LedCtrlRaw(self.padnumber, 0, 3)
def iconPlaying(self):
self.icon.addPixmap(QtGui.QPixmap(self.iconPathPlaying), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.setIcon(self.icon)
def playSample(self):
if self.samplePath == None:
self.sample = None
else:
self.sample = pygame.mixer.Sound(self.samplePath)
pygame.mixer.Sound.play(self.sample)
def editLabel(self):
self.fileName = ntpath.basename(self.samplePath)
self.label.setText(QtGui.QApplication.translate("Form", "<html><head/><body><p align=\"center\"><span style=\" color:#ffffff;\">"+ self.fileName +"</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
def launchSampler():
playmode = Sampler()
if __name__=='__main__':
pygame.mixer.init(frequency=44100, size=-16, buffer=1024)
pygame.init()
app = QtGui.QApplication(sys.argv)
LP = launchpad.Launchpad()
LP.Open()
LP.Reset()
ex = Ui_Form()
ex.show()
sys.exit(app.exec_())
aW1wb3J0IHN5cywgbnRwYXRoLCBweWdhbWUsIHB5Z2FtZS5taXhlciwgbGF1bmNocGFkCmZyb20gUHlRdDQgaW1wb3J0IFF0Q29yZSwgUXRHdWkKCmNsYXNzIFNhbXBsZXIoKToKCWRlZiBfX2luaXRfXyhzZWxmKToKCQlzZWxmLmNoYW5nZUxhYmVsKCJFZGl0IikKCQkjUG9sbCBmb3IgTUlESSBpbnB1dAoJCXdoaWxlIFRydWU6CgkJCXBhZCA9IExQLkJ1dHRvblN0YXRlUmF3KCkKCQkJaWYgcGFkICE9IFtdOgoJCQkJc2VsZi5wYWRudW1iZXIgPSBwYWRbMF0KCQkJCXNlbGYudmVsb2NpdHkgPSBwYWRbMV0KCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDIwMDoKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2ExLnNhbXBsZVBhdGgsIDAsIGV4LmJ0bl9hMSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDIwMToKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2EyLnNhbXBsZVBhdGgsIDEsIGV4LmJ0bl9hMikKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDIwMjoKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2EzLnNhbXBsZVBhdGgsIDIsIGV4LmJ0bl9hMykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDIwMzoKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2E0LnNhbXBsZVBhdGgsIDMsIGV4LmJ0bl9hNCkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDIwNDoKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2E1LnNhbXBsZVBhdGgsIDQsIGV4LmJ0bl9hNSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDIwNToKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2E2LnNhbXBsZVBhdGgsIDUsIGV4LmJ0bl9hNikKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDIwNjoKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2E3LnNhbXBsZVBhdGgsIDYsIGV4LmJ0bl9hNykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDIwNzoKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2E4LnNhbXBsZVBhdGgsIDcsIGV4LmJ0bl9hOCkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDA6CgkJCQkJc2VsZi5UcmlnZ2VyKGV4LmJ0bl9iMS5zYW1wbGVQYXRoLCAwLCBleC5idG5fYjEpCgkJCQlpZiBzZWxmLnBhZG51bWJlciA9PSAxOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fYjIuc2FtcGxlUGF0aCwgMSwgZXguYnRuX2IyKQoJCQkJaWYgc2VsZi5wYWRudW1iZXIgPT0gMjoKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2IzLnNhbXBsZVBhdGgsIDIsIGV4LmJ0bl9iMykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDM6CgkJCQkJc2VsZi5UcmlnZ2VyKGV4LmJ0bl9iNC5zYW1wbGVQYXRoLCAzLCBleC5idG5fYjQpCgkJCQlpZiBzZWxmLnBhZG51bWJlciA9PSA0OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fYjUuc2FtcGxlUGF0aCwgNCwgZXguYnRuX2I1KQoJCQkJaWYgc2VsZi5wYWRudW1iZXIgPT0gNToKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2I2LnNhbXBsZVBhdGgsIDUsIGV4LmJ0bl9iNikKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDY6CgkJCQkJc2VsZi5UcmlnZ2VyKGV4LmJ0bl9iNy5zYW1wbGVQYXRoLCA2LCBleC5idG5fYjcpCgkJCQlpZiBzZWxmLnBhZG51bWJlciA9PSA3OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fYjguc2FtcGxlUGF0aCwgNywgZXguYnRuX2I4KQoJCQkJaWYgc2VsZi5wYWRudW1iZXIgPT0gODoKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2I5LnNhbXBsZVBhdGgsIDgsIGV4LmJ0bl9iOSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDE2OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fYzEuc2FtcGxlUGF0aCwgMTYsIGV4LmJ0bl9jMSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDE3OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fYzIuc2FtcGxlUGF0aCwgMTcsIGV4LmJ0bl9jMikKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDE4OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fYzMuc2FtcGxlUGF0aCwgMTgsIGV4LmJ0bl9jMykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDE5OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fYzQuc2FtcGxlUGF0aCwgMTksIGV4LmJ0bl9jNCkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDIwOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fYzUuc2FtcGxlUGF0aCwgMjAsIGV4LmJ0bl9jNSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDIxOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fYzYuc2FtcGxlUGF0aCwgMjEsIGV4LmJ0bl9jNikKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDIyOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fYzcuc2FtcGxlUGF0aCwgMjIsIGV4LmJ0bl9jNykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDIzOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fYzguc2FtcGxlUGF0aCwgMjMsIGV4LmJ0bl9jOCkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDI0OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fYzkuc2FtcGxlUGF0aCwgMjQsIGV4LmJ0bl9jOSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDMyOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZDEuc2FtcGxlUGF0aCwgMzIsIGV4LmJ0bl9kMSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDMzOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZDIuc2FtcGxlUGF0aCwgMzMsIGV4LmJ0bl9kMikKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDM0OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZDMuc2FtcGxlUGF0aCwgMzQsIGV4LmJ0bl9kMykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDM1OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZDQuc2FtcGxlUGF0aCwgMzUsIGV4LmJ0bl9kNCkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDM2OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZDUuc2FtcGxlUGF0aCwgMzYsIGV4LmJ0bl9kNSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDM3OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZDYuc2FtcGxlUGF0aCwgMzcsIGV4LmJ0bl9kNikKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDM4OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZDcuc2FtcGxlUGF0aCwgMzgsIGV4LmJ0bl9kNykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDM5OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZDguc2FtcGxlUGF0aCwgMzksIGV4LmJ0bl9kOCkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDQwOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZDkuc2FtcGxlUGF0aCwgNDAsIGV4LmJ0bl9kOSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDQ4OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZTEuc2FtcGxlUGF0aCwgNDgsIGV4LmJ0bl9lMSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDQ5OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZTIuc2FtcGxlUGF0aCwgNDksIGV4LmJ0bl9lMikKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDUwOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZTMuc2FtcGxlUGF0aCwgNTAsIGV4LmJ0bl9lMykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDUxOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZTQuc2FtcGxlUGF0aCwgNTEsIGV4LmJ0bl9lNCkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDUyOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZTUuc2FtcGxlUGF0aCwgNTIsIGV4LmJ0bl9lNSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDUzOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZTYuc2FtcGxlUGF0aCwgNTMsIGV4LmJ0bl9lNikKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDU0OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZTcuc2FtcGxlUGF0aCwgNTQsIGV4LmJ0bl9lNykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDU1OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZTguc2FtcGxlUGF0aCwgNTUsIGV4LmJ0bl9lOCkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDU2OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZTkuc2FtcGxlUGF0aCwgNTYsIGV4LmJ0bl9lOSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDY0OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZjEuc2FtcGxlUGF0aCwgNjQsIGV4LmJ0bl9mMSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDY1OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZjIuc2FtcGxlUGF0aCwgNjUsIGV4LmJ0bl9mMikKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDY2OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZjMuc2FtcGxlUGF0aCwgNjYsIGV4LmJ0bl9mMykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDY3OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZjQuc2FtcGxlUGF0aCwgNjcsIGV4LmJ0bl9mNCkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDY4OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZjUuc2FtcGxlUGF0aCwgNjgsIGV4LmJ0bl9mNSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDY5OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZjYuc2FtcGxlUGF0aCwgNjksIGV4LmJ0bl9mNikKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDcwOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZjcuc2FtcGxlUGF0aCwgNzAsIGV4LmJ0bl9mNykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDcxOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZjguc2FtcGxlUGF0aCwgNzEsIGV4LmJ0bl9mOCkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDcyOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZjkuc2FtcGxlUGF0aCwgNzIsIGV4LmJ0bl9mOSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDgwOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZzEuc2FtcGxlUGF0aCwgODAsIGV4LmJ0bl9nMSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDgxOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZzIuc2FtcGxlUGF0aCwgODEsIGV4LmJ0bl9nMikKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDgyOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZzMuc2FtcGxlUGF0aCwgODIsIGV4LmJ0bl9nMykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDgzOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZzQuc2FtcGxlUGF0aCwgODMsIGV4LmJ0bl9nNCkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDg0OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZzUuc2FtcGxlUGF0aCwgODQsIGV4LmJ0bl9nNSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDg1OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZzYuc2FtcGxlUGF0aCwgODUsIGV4LmJ0bl9nNikKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDg2OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZzcuc2FtcGxlUGF0aCwgODYsIGV4LmJ0bl9nNykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDg3OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZzguc2FtcGxlUGF0aCwgODcsIGV4LmJ0bl9nOCkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDg4OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5fZzkuc2FtcGxlUGF0aCwgODgsIGV4LmJ0bl9nOSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDk2OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5faDEuc2FtcGxlUGF0aCwgOTYsIGV4LmJ0bl9oMSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDk3OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5faDIuc2FtcGxlUGF0aCwgOTcsIGV4LmJ0bl9oMikKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDk4OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5faDMuc2FtcGxlUGF0aCwgOTgsIGV4LmJ0bl9oMykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDk5OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5faDQuc2FtcGxlUGF0aCwgOTksIGV4LmJ0bl9oNCkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDEwMDoKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2g1LnNhbXBsZVBhdGgsIDEwMCwgZXguYnRuX2g1KQoJCQkJaWYgc2VsZi5wYWRudW1iZXIgPT0gMTAxOgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5faDYuc2FtcGxlUGF0aCwgMTAxLCBleC5idG5faDYpCgkJCQlpZiBzZWxmLnBhZG51bWJlciA9PSAxMDI6CgkJCQkJc2VsZi5UcmlnZ2VyKGV4LmJ0bl9oNy5zYW1wbGVQYXRoLCAxMDIsIGV4LmJ0bl9oNykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDEwMzoKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2g4LnNhbXBsZVBhdGgsIDEwMywgZXguYnRuX2g4KQoJCQkJaWYgc2VsZi5wYWRudW1iZXIgPT0gMTA0OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5faDkuc2FtcGxlUGF0aCwgMTA0LCBleC5idG5faDkpCgkJCQlpZiBzZWxmLnBhZG51bWJlciA9PSAxMTI6CgkJCQkJc2VsZi5UcmlnZ2VyKGV4LmJ0bl9pMS5zYW1wbGVQYXRoLCAxMTIsIGV4LmJ0bl9pMSkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDExMzoKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2kyLnNhbXBsZVBhdGgsIDExMywgZXguYnRuX2kyKQoJCQkJaWYgc2VsZi5wYWRudW1iZXIgPT0gMTE0OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5faTMuc2FtcGxlUGF0aCwgMTE0LCBleC5idG5faTMpCgkJCQlpZiBzZWxmLnBhZG51bWJlciA9PSAxMTU6CgkJCQkJc2VsZi5UcmlnZ2VyKGV4LmJ0bl9pNC5zYW1wbGVQYXRoLCAxMTUsIGV4LmJ0bl9pNCkKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDExNjoKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2k1LnNhbXBsZVBhdGgsIDExNiwgZXguYnRuX2k1KQoJCQkJaWYgc2VsZi5wYWRudW1iZXIgPT0gMTE3OgoJCQkJCXNlbGYuVHJpZ2dlcihleC5idG5faTYuc2FtcGxlUGF0aCwgMTE3LCBleC5idG5faTYpCgkJCQlpZiBzZWxmLnBhZG51bWJlciA9PSAxMTg6CgkJCQkJc2VsZi5UcmlnZ2VyKGV4LmJ0bl9pNy5zYW1wbGVQYXRoLCAxMTgsIGV4LmJ0bl9pNykKCQkJCWlmIHNlbGYucGFkbnVtYmVyID09IDExOToKCQkJCQlzZWxmLlRyaWdnZXIoZXguYnRuX2k4LnNhbXBsZVBhdGgsIDExOSwgZXguYnRuX2k4KQkJCQkJCQkJCQoJCQkJaWYgc2VsZi5wYWRudW1iZXIgPT0gMTIwOgoJCQkJCXNlbGYuY2hhbmdlTGFiZWwoIlBsYXkiKQoJCQkJCWJyZWFrCgojQ2hhbmdlIHRleHQgZm9yIHRoZSBtb2RlIGJ1dHRvbiBhbmQgY29sb3VyIG9mIGNvcnJlc3BvbmRpbmcgTGF1bmNocGFkIFBhZAoJZGVmIGNoYW5nZUxhYmVsKHNlbGYsIGN1cnJlbnRNb2RlKToKCQlpZiBjdXJyZW50TW9kZSA9PSAiUGxheSI6CgkJCWV4LmxhYl9pOS5zZXRUZXh0KFF0R3VpLlFBcHBsaWNhdGlvbi50cmFuc2xhdGUoIkZvcm0iLCAiPGh0bWw+PGhlYWQvPjxib2R5PjxwIGFsaWduPVwiY2VudGVyXCI+PHNwYW4gc3R5bGU9XCIgY29sb3I6I2ZmZmZmZjtcIj5FZGl0PC9zcGFuPjwvcD48L2JvZHk+PC9odG1sPiIsIE5vbmUsIFF0R3VpLlFBcHBsaWNhdGlvbi5Vbmljb2RlVVRGOCkpCgkJCVF0R3VpLlFBcHBsaWNhdGlvbi5wcm9jZXNzRXZlbnRzKCkKCQkJTFAuTGVkQ3RybFJhdygxMjAsIDAsIDMpCgkJCXJldHVybgoJCWlmIGN1cnJlbnRNb2RlID09ICJFZGl0IjoKCQkJZXgubGFiX2k5LnNldFRleHQoUXRHdWkuUUFwcGxpY2F0aW9uLnRyYW5zbGF0ZSgiRm9ybSIsICI8aHRtbD48aGVhZC8+PGJvZHk+PHAgYWxpZ249XCJjZW50ZXJcIj48c3BhbiBzdHlsZT1cIiBjb2xvcjojZmZmZmZmO1wiPlBsYXk8L3NwYW4+PC9wPjwvYm9keT48L2h0bWw+IiwgTm9uZSwgUXRHdWkuUUFwcGxpY2F0aW9uLlVuaWNvZGVVVEY4KSkKCQkJUXRHdWkuUUFwcGxpY2F0aW9uLnByb2Nlc3NFdmVudHMoKQoJCQlMUC5MZWRDdHJsUmF3KDEyMCwgMywgMCkKCQkJcmV0dXJuCgojRGV0ZXJtaW5lIGlmIHBhZCBoYXMgYSBzYW1wbGUgYXNzaWduZWQuIElmIHNvIHRoZW4gcGxheSBpdCwgaWYgbm90IHRoZW4gaWdub3JlLiBDaGFuZ2UgcGFkIExFRHMgYW5kIEdVSSBpY29ucyBmb3IgdmlzdWFsIGZlZWRiYWNrLgkKCWRlZiBUcmlnZ2VyKHNlbGYsIHNhbXBsZSwgcGFkbnVtYmVyLCBidXR0b24pOgoJCXNlbGYuc2FtcGxlUGF0aCA9IHNhbXBsZQoJCWlmIHNlbGYuc2FtcGxlUGF0aCA9PSBOb25lOgoJCQlwYXNzCgkJZWxzZToKCQkJaWYgc2VsZi52ZWxvY2l0eSA8IDE6IAoJCQkJTFAuTGVkQ3RybFJhdyhwYWRudW1iZXIsIDAsIDMpCgkJCQlidXR0b24uaWNvbi5hZGRQaXhtYXAoUXRHdWkuUVBpeG1hcChidXR0b24uaWNvblBhdGhBc3NpZ25lZCksIFF0R3VpLlFJY29uLk5vcm1hbCwgUXRHdWkuUUljb24uT2ZmKQoJCQkJYnV0dG9uLnNldEljb24oYnV0dG9uLmljb24pCgkJCQlRdEd1aS5RQXBwbGljYXRpb24ucHJvY2Vzc0V2ZW50cygpCgkJCWVsc2U6CgkJCQlMUC5MZWRDdHJsUmF3KHBhZG51bWJlciwgMywgMCkKCQkJCWJ1dHRvbi5pY29uLmFkZFBpeG1hcChRdEd1aS5RUGl4bWFwKGJ1dHRvbi5pY29uUGF0aFBsYXlpbmcpLCBRdEd1aS5RSWNvbi5Ob3JtYWwsIFF0R3VpLlFJY29uLk9mZikKCQkJCWJ1dHRvbi5zZXRJY29uKGJ1dHRvbi5pY29uKQoJCQkJUXRHdWkuUUFwcGxpY2F0aW9uLnByb2Nlc3NFdmVudHMoKQoJCQkJc2FtcGxlID0gcHlnYW1lLm1peGVyLlNvdW5kKHNlbGYuc2FtcGxlUGF0aCkKCQkJCXB5Z2FtZS5taXhlci5Tb3VuZC5wbGF5KHNhbXBsZSkKCiNDcmVhdGUgdGhlIEdVSS4gSW5oZXJpdHMgZnJvbSB0aGUgUVQgUVdpZGdldCBjbGFzcy4JCQpjbGFzcyBVaV9Gb3JtKFF0R3VpLlFXaWRnZXQpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCVF0R3VpLlFXaWRnZXQuX19pbml0X18oc2VsZikKCQlzZWxmLnNldHVwVWkoc2VsZikKCiNQcm9wZXJseSBzaHV0IHRoZSBMYXVuY2hwYWQgcHJvY2VzcyBhbmQgdHVybiBvZmYgYWxsIExFRHMuCQkKCWRlZiBjbG9zZUV2ZW50KHNlbGYsIGV2ZW50KToKCQlMUC5SZXNldCgpCgkJTFAuQ2xvc2UoKQoKI0NyZWF0ZSB0aGUgYnV0dG9ucywgbGFiZWxzIGFuZCBiYWNrZ3JvdW5kLiBEZWZpbmUgcHJvcGVydGllcy4JCQoJZGVmIHNldHVwVWkoc2VsZiwgRm9ybSk6CgkJRm9ybS5zZXRPYmplY3ROYW1lKCJGb3JtIikKCQlGb3JtLnJlc2l6ZSg1OTEsIDU5MSkKCQkKCQlzZWxmLkJhY2tncm91bmQgPSBRdEd1aS5RTGFiZWwoRm9ybSkKCQlzZWxmLkJhY2tncm91bmQuc2V0R2VvbWV0cnkoUXRDb3JlLlFSZWN0KDAsIDAsIDYzMSwgNTkxKSkKCQlzZWxmLkJhY2tncm91bmQuc2V0UGl4bWFwKFF0R3VpLlFQaXhtYXAoIlB5dGhvbi9MUF9Qcm9qL0xQX0JhY2tncm91bmQucG5nIikpCgkJc2VsZi5CYWNrZ3JvdW5kLnNldE9iamVjdE5hbWUoIkJhY2tncm91bmQiKQoJCQoJCXNlbGYubGFiX2ExID0gTGFiZWwoIlVuYXNzaWduZWQiLCAyMCwgNzYsIDYxLCAxNiwgImxhYl9hMSIsIHNlbGYpCgkJc2VsZi5sYWJfYTIgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDgwLCA3NiwgNjEsIDE2LCAibGFiX2EyIiwgc2VsZikKCQlzZWxmLmxhYl9hMyA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMTQwLCA3NiwgNjEsIDE2LCAibGFiX2EzIiwgc2VsZikKCQlzZWxmLmxhYl9hNCA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMjAwLCA3NiwgNjEsIDE2LCAibGFiX2E0Iiwgc2VsZikKCQlzZWxmLmxhYl9hNSA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMjYwLCA3NiwgNjEsIDE2LCAibGFiX2E1Iiwgc2VsZikKCQlzZWxmLmxhYl9hNiA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMzIwLCA3NiwgNjEsIDE2LCAibGFiX2E2Iiwgc2VsZikKCQlzZWxmLmxhYl9hNyA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMzgwLCA3NiwgNjEsIDE2LCAibGFiX2E3Iiwgc2VsZikKCQlzZWxmLmxhYl9hOCA9IExhYmVsKCJVbmFzc2lnbmVkIiwgNDQwLCA3NiwgNjEsIDE2LCAibGFiX2E4Iiwgc2VsZikKCQkKCQlzZWxmLmxhYl9iMSA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMjAsIDEzNiwgNjEsIDE2LCAibGFiX2IxIiwgc2VsZikKCQlzZWxmLmxhYl9iMiA9IExhYmVsKCJVbmFzc2lnbmVkIiwgODAsIDEzNiwgNjEsIDE2LCAibGFiX2IyIiwgc2VsZikKCQlzZWxmLmxhYl9iMyA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMTQwLCAxMzYsIDYxLCAxNiwgImxhYl9iMyIsIHNlbGYpCgkJc2VsZi5sYWJfYjQgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDIwMCwgMTM2LCA2MSwgMTYsICJsYWJfYjQiLCBzZWxmKQoJCXNlbGYubGFiX2I1ID0gTGFiZWwoIlVuYXNzaWduZWQiLCAyNjAsIDEzNiwgNjEsIDE2LCAibGFiX2I1Iiwgc2VsZikKCQlzZWxmLmxhYl9iNiA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMzIwLCAxMzYsIDYxLCAxNiwgImxhYl9iNiIsIHNlbGYpCgkJc2VsZi5sYWJfYjcgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDM4MCwgMTM2LCA2MSwgMTYsICJsYWJfYjciLCBzZWxmKQoJCXNlbGYubGFiX2I4ID0gTGFiZWwoIlVuYXNzaWduZWQiLCA0NDAsIDEzNiwgNjEsIDE2LCAibGFiX2I4Iiwgc2VsZikKCQlzZWxmLmxhYl9iOSA9IExhYmVsKCJVbmFzc2lnbmVkIiwgNTAwLCAxMzYsIDYxLCAxNiwgImxhYl9iOSIsIHNlbGYpCgkJCgkJc2VsZi5sYWJfYzEgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDIwLCAxOTYsIDYxLCAxNiwgImxhYl9jMSIsIHNlbGYpCgkJc2VsZi5sYWJfYzIgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDgwLCAxOTYsIDYxLCAxNiwgImxhYl9jMiIsIHNlbGYpCgkJc2VsZi5sYWJfYzMgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDE0MCwgMTk2LCA2MSwgMTYsICJsYWJfYzMiLCBzZWxmKQoJCXNlbGYubGFiX2M0ID0gTGFiZWwoIlVuYXNzaWduZWQiLCAyMDAsIDE5NiwgNjEsIDE2LCAibGFiX2M0Iiwgc2VsZikKCQlzZWxmLmxhYl9jNSA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMjYwLCAxOTYsIDYxLCAxNiwgImxhYl9jNSIsIHNlbGYpCgkJc2VsZi5sYWJfYzYgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDMyMCwgMTk2LCA2MSwgMTYsICJsYWJfYzYiLCBzZWxmKQoJCXNlbGYubGFiX2M3ID0gTGFiZWwoIlVuYXNzaWduZWQiLCAzODAsIDE5NiwgNjEsIDE2LCAibGFiX2M3Iiwgc2VsZikKCQlzZWxmLmxhYl9jOCA9IExhYmVsKCJVbmFzc2lnbmVkIiwgNDQwLCAxOTYsIDYxLCAxNiwgImxhYl9jOCIsIHNlbGYpCgkJc2VsZi5sYWJfYzkgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDUwMCwgMTk2LCA2MSwgMTYsICJsYWJfYzkiLCBzZWxmKQoJCQoJCXNlbGYubGFiX2QxID0gTGFiZWwoIlVuYXNzaWduZWQiLCAyMCwgMjU2LCA2MSwgMTYsICJsYWJfZDEiLCBzZWxmKQoJCXNlbGYubGFiX2QyID0gTGFiZWwoIlVuYXNzaWduZWQiLCA4MCwgMjU2LCA2MSwgMTYsICJsYWJfZDIiLCBzZWxmKQoJCXNlbGYubGFiX2QzID0gTGFiZWwoIlVuYXNzaWduZWQiLCAxNDAsIDI1NiwgNjEsIDE2LCAibGFiX2QzIiwgc2VsZikKCQlzZWxmLmxhYl9kNCA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMjAwLCAyNTYsIDYxLCAxNiwgImxhYl9kNCIsIHNlbGYpCgkJc2VsZi5sYWJfZDUgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDI2MCwgMjU2LCA2MSwgMTYsICJsYWJfZDUiLCBzZWxmKQoJCXNlbGYubGFiX2Q2ID0gTGFiZWwoIlVuYXNzaWduZWQiLCAzMjAsIDI1NiwgNjEsIDE2LCAibGFiX2Q2Iiwgc2VsZikKCQlzZWxmLmxhYl9kNyA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMzgwLCAyNTYsIDYxLCAxNiwgImxhYl9kNyIsIHNlbGYpCgkJc2VsZi5sYWJfZDggPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDQ0MCwgMjU2LCA2MSwgMTYsICJsYWJfZDgiLCBzZWxmKQoJCXNlbGYubGFiX2Q5ID0gTGFiZWwoIlVuYXNzaWduZWQiLCA1MDAsIDI1NiwgNjEsIDE2LCAibGFiX2Q5Iiwgc2VsZikKCQkKCQlzZWxmLmxhYl9lMSA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMjAsIDMxNiwgNjEsIDE2LCAibGFiX2UxIiwgc2VsZikKCQlzZWxmLmxhYl9lMiA9IExhYmVsKCJVbmFzc2lnbmVkIiwgODAsIDMxNiwgNjEsIDE2LCAibGFiX2UyIiwgc2VsZikKCQlzZWxmLmxhYl9lMyA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMTQwLCAzMTYsIDYxLCAxNiwgImxhYl9lMyIsIHNlbGYpCgkJc2VsZi5sYWJfZTQgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDIwMCwgMzE2LCA2MSwgMTYsICJsYWJfZTQiLCBzZWxmKQoJCXNlbGYubGFiX2U1ID0gTGFiZWwoIlVuYXNzaWduZWQiLCAyNjAsIDMxNiwgNjEsIDE2LCAibGFiX2U1Iiwgc2VsZikKCQlzZWxmLmxhYl9lNiA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMzIwLCAzMTYsIDYxLCAxNiwgImxhYl9lNiIsIHNlbGYpCgkJc2VsZi5sYWJfZTcgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDM4MCwgMzE2LCA2MSwgMTYsICJsYWJfZTciLCBzZWxmKQoJCXNlbGYubGFiX2U4ID0gTGFiZWwoIlVuYXNzaWduZWQiLCA0NDAsIDMxNiwgNjEsIDE2LCAibGFiX2U4Iiwgc2VsZikKCQlzZWxmLmxhYl9lOSA9IExhYmVsKCJVbmFzc2lnbmVkIiwgNTAwLCAzMTYsIDYxLCAxNiwgImxhYl9lOSIsIHNlbGYpCgkJCgkJc2VsZi5sYWJfZjEgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDIwLCAzNzYsIDYxLCAxNiwgImxhYl9mMSIsIHNlbGYpCgkJc2VsZi5sYWJfZjIgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDgwLCAzNzYsIDYxLCAxNiwgImxhYl9mMiIsIHNlbGYpCgkJc2VsZi5sYWJfZjMgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDE0MCwgMzc2LCA2MSwgMTYsICJsYWJfZjMiLCBzZWxmKQoJCXNlbGYubGFiX2Y0ID0gTGFiZWwoIlVuYXNzaWduZWQiLCAyMDAsIDM3NiwgNjEsIDE2LCAibGFiX2Y0Iiwgc2VsZikKCQlzZWxmLmxhYl9mNSA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMjYwLCAzNzYsIDYxLCAxNiwgImxhYl9mNSIsIHNlbGYpCgkJc2VsZi5sYWJfZjYgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDMyMCwgMzc2LCA2MSwgMTYsICJsYWJfZjYiLCBzZWxmKQoJCXNlbGYubGFiX2Y3ID0gTGFiZWwoIlVuYXNzaWduZWQiLCAzODAsIDM3NiwgNjEsIDE2LCAibGFiX2Y3Iiwgc2VsZikKCQlzZWxmLmxhYl9mOCA9IExhYmVsKCJVbmFzc2lnbmVkIiwgNDQwLCAzNzYsIDYxLCAxNiwgImxhYl9mOCIsIHNlbGYpCgkJc2VsZi5sYWJfZjkgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDUwMCwgMzc2LCA2MSwgMTYsICJsYWJfZjkiLCBzZWxmKQoJCQoJCXNlbGYubGFiX2cxID0gTGFiZWwoIlVuYXNzaWduZWQiLCAyMCwgNDM2LCA2MSwgMTYsICJsYWJfZzEiLCBzZWxmKQoJCXNlbGYubGFiX2cyID0gTGFiZWwoIlVuYXNzaWduZWQiLCA4MCwgNDM2LCA2MSwgMTYsICJsYWJfZzIiLCBzZWxmKQoJCXNlbGYubGFiX2czID0gTGFiZWwoIlVuYXNzaWduZWQiLCAxNDAsIDQzNiwgNjEsIDE2LCAibGFiX2czIiwgc2VsZikKCQlzZWxmLmxhYl9nNCA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMjAwLCA0MzYsIDYxLCAxNiwgImxhYl9nNCIsIHNlbGYpCgkJc2VsZi5sYWJfZzUgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDI2MCwgNDM2LCA2MSwgMTYsICJsYWJfZzUiLCBzZWxmKQoJCXNlbGYubGFiX2c2ID0gTGFiZWwoIlVuYXNzaWduZWQiLCAzMjAsIDQzNiwgNjEsIDE2LCAibGFiX2c2Iiwgc2VsZikKCQlzZWxmLmxhYl9nNyA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMzgwLCA0MzYsIDYxLCAxNiwgImxhYl9nNyIsIHNlbGYpCgkJc2VsZi5sYWJfZzggPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDQ0MCwgNDM2LCA2MSwgMTYsICJsYWJfZzgiLCBzZWxmKQoJCXNlbGYubGFiX2c5ID0gTGFiZWwoIlVuYXNzaWduZWQiLCA1MDAsIDQzNiwgNjEsIDE2LCAibGFiX2c5Iiwgc2VsZikKCQkKCQlzZWxmLmxhYl9oMSA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMjAsIDQ5NiwgNjEsIDE2LCAibGFiX2gxIiwgc2VsZikKCQlzZWxmLmxhYl9oMiA9IExhYmVsKCJVbmFzc2lnbmVkIiwgODAsIDQ5NiwgNjEsIDE2LCAibGFiX2gyIiwgc2VsZikKCQlzZWxmLmxhYl9oMyA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMTQwLCA0OTYsIDYxLCAxNiwgImxhYl9oMyIsIHNlbGYpCgkJc2VsZi5sYWJfaDQgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDIwMCwgNDk2LCA2MSwgMTYsICJsYWJfaDQiLCBzZWxmKQoJCXNlbGYubGFiX2g1ID0gTGFiZWwoIlVuYXNzaWduZWQiLCAyNjAsIDQ5NiwgNjEsIDE2LCAibGFiX2g1Iiwgc2VsZikKCQlzZWxmLmxhYl9oNiA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMzIwLCA0OTYsIDYxLCAxNiwgImxhYl9oNiIsIHNlbGYpCgkJc2VsZi5sYWJfaDcgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDM4MCwgNDk2LCA2MSwgMTYsICJsYWJfaDciLCBzZWxmKQoJCXNlbGYubGFiX2g4ID0gTGFiZWwoIlVuYXNzaWduZWQiLCA0NDAsIDQ5NiwgNjEsIDE2LCAibGFiX2g4Iiwgc2VsZikKCQlzZWxmLmxhYl9oOSA9IExhYmVsKCJVbmFzc2lnbmVkIiwgNTAwLCA0OTYsIDYxLCAxNiwgImxhYl9oOSIsIHNlbGYpCgkJCgkJc2VsZi5sYWJfaTEgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDIwLCA1NTYsIDYxLCAxNiwgImxhYl9pMSIsIHNlbGYpCgkJc2VsZi5sYWJfaTIgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDgwLCA1NTYsIDYxLCAxNiwgImxhYl9pMiIsIHNlbGYpCgkJc2VsZi5sYWJfaTMgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDE0MCwgNTU2LCA2MSwgMTYsICJsYWJfaTMiLCBzZWxmKQoJCXNlbGYubGFiX2k0ID0gTGFiZWwoIlVuYXNzaWduZWQiLCAyMDAsIDU1NiwgNjEsIDE2LCAibGFiX2k0Iiwgc2VsZikKCQlzZWxmLmxhYl9pNSA9IExhYmVsKCJVbmFzc2lnbmVkIiwgMjYwLCA1NTYsIDYxLCAxNiwgImxhYl9pNSIsIHNlbGYpCgkJc2VsZi5sYWJfaTYgPSBMYWJlbCgiVW5hc3NpZ25lZCIsIDMyMCwgNTU2LCA2MSwgMTYsICJsYWJfaTYiLCBzZWxmKQoJCXNlbGYubGFiX2k3ID0gTGFiZWwoIlVuYXNzaWduZWQiLCAzODAsIDU1NiwgNjEsIDE2LCAibGFiX2k3Iiwgc2VsZikKCQlzZWxmLmxhYl9pOCA9IExhYmVsKCJVbmFzc2lnbmVkIiwgNDQwLCA1NTYsIDYxLCAxNiwgImxhYl9pOCIsIHNlbGYpCgkJc2VsZi5sYWJfaTkgPSBMYWJlbCgiRWRpdCIsIDUwMCwgNTU2LCA2MSwgMTYsICJsYWJfaTkiLCBzZWxmKQoJCQoJCXNlbGYuYnRuX2ExID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfT2ZmLnBuZyIsIDQ5LCA0OSwgMzAsIDM4LCA0MSwgNDEsICJidG5fYTEiLCBzZWxmLmxhYl9hMSwgIlB5dGhvbi9MUF9Qcm9qL0xQX0NpcmNsZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX1JlZC5wbmciLCAyMDAsIHNlbGYpCgkJc2VsZi5idG5fYTIgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX0NpcmNsZV9PZmYucG5nIiwgNDksIDQ5LCA5MCwgMzgsIDQxLCA0MSwgImJ0bl9hMiIsIHNlbGYubGFiX2EyLCAiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfUmVkLnBuZyIsIDIwMSwgc2VsZikKCQlzZWxmLmJ0bl9hMyA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX09mZi5wbmciLCA0OSwgNDksIDE1MCwgMzgsIDQxLCA0MSwgImJ0bl9hMyIsIHNlbGYubGFiX2EzLCAiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfUmVkLnBuZyIsIDIwMiwgc2VsZikKCQlzZWxmLmJ0bl9hNCA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX09mZi5wbmciLCA0OSwgNDksIDIxMCwgMzgsIDQxLCA0MSwgImJ0bl9hNCIsIHNlbGYubGFiX2E0LCAiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfUmVkLnBuZyIsIDIwMywgc2VsZikKCQlzZWxmLmJ0bl9hNSA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX09mZi5wbmciLCA0OSwgNDksIDI3MCwgMzgsIDQxLCA0MSwgImJ0bl9hNSIsIHNlbGYubGFiX2E1LCAiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfUmVkLnBuZyIsIDIwNCwgc2VsZikKCQlzZWxmLmJ0bl9hNiA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX09mZi5wbmciLCA0OSwgNDksIDMzMCwgMzgsIDQxLCA0MSwgImJ0bl9hNiIsIHNlbGYubGFiX2E2LCAiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfUmVkLnBuZyIsIDIwNSwgc2VsZikKCQlzZWxmLmJ0bl9hNyA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX09mZi5wbmciLCA0OSwgNDksIDM5MCwgMzgsIDQxLCA0MSwgImJ0bl9hNyIsIHNlbGYubGFiX2E3LCAiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfUmVkLnBuZyIsIDIwNiwgc2VsZikKCQlzZWxmLmJ0bl9hOCA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX09mZi5wbmciLCA0OSwgNDksIDQ1MCwgMzgsIDQxLCA0MSwgImJ0bl9hOCIsIHNlbGYubGFiX2E4LCAiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfUmVkLnBuZyIsIDIwNywgc2VsZikKCQkKCQlzZWxmLmJ0bl9iMSA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDIwLCA5MCwgNjEsIDUxLCAiYnRuX2IxIiwgc2VsZi5sYWJfYjEsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgMCwgc2VsZikKCQlzZWxmLmJ0bl9iMiA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDgwLCA5MCwgNjEsIDUxLCAiYnRuX2IyIiwgc2VsZi5sYWJfYjIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgMSwgc2VsZikKCQlzZWxmLmJ0bl9iMyA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDE0MCwgOTAsIDYxLCA1MSwgImJ0bl9iMyIsIHNlbGYubGFiX2IzLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDIsIHNlbGYpCgkJc2VsZi5idG5fYjQgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCAyMDAsIDkwLCA2MSwgNTEsICJidG5fYjQiLCBzZWxmLmxhYl9iNCwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCAzLCBzZWxmKQoJCXNlbGYuYnRuX2I1ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgMjYwLCA5MCwgNjEsIDUxLCAiYnRuX2I1Iiwgc2VsZi5sYWJfYjUsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgNCwgc2VsZikKCQlzZWxmLmJ0bl9iNiA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDMyMCwgOTAsIDYxLCA1MSwgImJ0bl9iNiIsIHNlbGYubGFiX2I2LCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDUsIHNlbGYpCgkJc2VsZi5idG5fYjcgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCAzODAsIDkwLCA2MSwgNTEsICJidG5fYjciLCBzZWxmLmxhYl9iNywgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCA2LCBzZWxmKQoJCXNlbGYuYnRuX2I4ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgNDQwLCA5MCwgNjEsIDUxLCAiYnRuX2I4Iiwgc2VsZi5sYWJfYjgsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgNywgc2VsZikKCQlzZWxmLmJ0bl9iOSA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX09mZi5wbmciLCA0OSwgNDksIDUxMCwgOTUsIDQxLCA0MSwgImJ0bl9iOSIsIHNlbGYubGFiX2I5LCAiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfUmVkLnBuZyIsIDgsIHNlbGYpCgkJCgkJc2VsZi5idG5fYzEgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCAyMCwgMTUwLCA2MSwgNTEsICJidG5fYzEiLCBzZWxmLmxhYl9jMSwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCAxNiwgc2VsZikKCQlzZWxmLmJ0bl9jMiA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDgwLCAxNTAsIDYxLCA1MSwgImJ0bl9jMiIsIHNlbGYubGFiX2MyLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDE3LCBzZWxmKQoJCXNlbGYuYnRuX2MzID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgMTQwLCAxNTAsIDYxLCA1MSwgImJ0bl9jMyIsIHNlbGYubGFiX2MzLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDE4LCBzZWxmKQoJCXNlbGYuYnRuX2M0ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgMjAwLCAxNTAsIDYxLCA1MSwgImJ0bl9jNCIsIHNlbGYubGFiX2M0LCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDE5LCBzZWxmKQoJCXNlbGYuYnRuX2M1ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgMjYwLCAxNTAsIDYxLCA1MSwgImJ0bl9jNSIsIHNlbGYubGFiX2M1LCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDIwLCBzZWxmKQoJCXNlbGYuYnRuX2M2ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgMzIwLCAxNTAsIDYxLCA1MSwgImJ0bl9jNiIsIHNlbGYubGFiX2M2LCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDIxLCBzZWxmKQoJCXNlbGYuYnRuX2M3ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgMzgwLCAxNTAsIDYxLCA1MSwgImJ0bl9jNyIsIHNlbGYubGFiX2M3LCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDIyLCBzZWxmKQoJCXNlbGYuYnRuX2M4ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgNDQwLCAxNTAsIDYxLCA1MSwgImJ0bl9jOCIsIHNlbGYubGFiX2M4LCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDIzLCBzZWxmKQoJCXNlbGYuYnRuX2M5ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfT2ZmLnBuZyIsIDQ5LCA0OSwgNTEwLCAxNTUsIDQxLCA0MSwgImJ0bl9jOSIsIHNlbGYubGFiX2M5LCAiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfUmVkLnBuZyIsIDI0LCBzZWxmKQoJCQoJCXNlbGYuYnRuX2QxID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgMjAsIDIxMCwgNjEsIDUxLCAiYnRuX2QxIiwgc2VsZi5sYWJfZDEsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgMzIsIHNlbGYpCgkJc2VsZi5idG5fZDIgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCA4MCwgMjEwLCA2MSwgNTEsICJidG5fZDIiLCBzZWxmLmxhYl9kMiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCAzMywgc2VsZikKCQlzZWxmLmJ0bl9kMyA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDE0MCwgMjEwLCA2MSwgNTEsICJidG5fZDMiLCBzZWxmLmxhYl9kMywgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCAzNCwgc2VsZikKCQlzZWxmLmJ0bl9kNCA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDIwMCwgMjEwLCA2MSwgNTEsICJidG5fZDQiLCBzZWxmLmxhYl9kNCwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCAzNSwgc2VsZikKCQlzZWxmLmJ0bl9kNSA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDI2MCwgMjEwLCA2MSwgNTEsICJidG5fZDUiLCBzZWxmLmxhYl9kNSwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCAzNiwgc2VsZikKCQlzZWxmLmJ0bl9kNiA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDMyMCwgMjEwLCA2MSwgNTEsICJidG5fZDYiLCBzZWxmLmxhYl9kNiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCAzNywgc2VsZikKCQlzZWxmLmJ0bl9kNyA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDM4MCwgMjEwLCA2MSwgNTEsICJidG5fZDciLCBzZWxmLmxhYl9kNywgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCAzOCwgc2VsZikKCQlzZWxmLmJ0bl9kOCA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDQ0MCwgMjEwLCA2MSwgNTEsICJidG5fZDgiLCBzZWxmLmxhYl9kOCwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCAzOSwgc2VsZikKCQlzZWxmLmJ0bl9kOSA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX09mZi5wbmciLCA0OSwgNDksIDUxMCwgMjE1LCA0MSwgNDEsICJidG5fZDkiLCBzZWxmLmxhYl9kOSwgIlB5dGhvbi9MUF9Qcm9qL0xQX0NpcmNsZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX1JlZC5wbmciLCA0MCwgc2VsZikKCQkKCQlzZWxmLmJ0bl9lMSA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDIwLCAyNzAsIDYxLCA1MSwgImJ0bl9lMSIsIHNlbGYubGFiX2UxLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDQ4LCBzZWxmKQoJCXNlbGYuYnRuX2UyID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgODAsIDI3MCwgNjEsIDUxLCAiYnRuX2UyIiwgc2VsZi5sYWJfZTIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgNDksIHNlbGYpCgkJc2VsZi5idG5fZTMgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCAxNDAsIDI3MCwgNjEsIDUxLCAiYnRuX2UzIiwgc2VsZi5sYWJfZTMsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgNTAsIHNlbGYpCgkJc2VsZi5idG5fZTQgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX01pZFRMX09mZi5wbmciLCA1NSwgNTUsIDIwMCwgMjcwLCA2MSwgNTEsICJidG5fZTQiLCBzZWxmLmxhYl9lNCwgIlB5dGhvbi9MUF9Qcm9qL0xQX01pZFRMX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9NaWRUTF9SZWQucG5nIiwgNTEsIHNlbGYpCgkJc2VsZi5idG5fZTUgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX01pZFRSX09mZi5wbmciLCA1NSwgNTUsIDI2MCwgMjcwLCA2MSwgNTEsICJidG5fZTUiLCBzZWxmLmxhYl9lNSwgIlB5dGhvbi9MUF9Qcm9qL0xQX01pZFRSX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9NaWRUUl9SZWQucG5nIiwgNTIsIHNlbGYpCgkJc2VsZi5idG5fZTYgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCAzMjAsIDI3MCwgNjEsIDUxLCAiYnRuX2U2Iiwgc2VsZi5sYWJfZTYsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgNTMsIHNlbGYpCgkJc2VsZi5idG5fZTcgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCAzODAsIDI3MCwgNjEsIDUxLCAiYnRuX2U3Iiwgc2VsZi5sYWJfZTcsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgNTQsIHNlbGYpCgkJc2VsZi5idG5fZTggPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCA0NDAsIDI3MCwgNjEsIDUxLCAiYnRuX2U4Iiwgc2VsZi5sYWJfZTgsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgNTUsIHNlbGYpCgkJc2VsZi5idG5fZTkgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX0NpcmNsZV9PZmYucG5nIiwgNDksIDQ5LCA1MTAsIDI3NSwgNDEsIDQxLCAiYnRuX2U5Iiwgc2VsZi5sYWJfZTksICJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX0NpcmNsZV9SZWQucG5nIiwgNTYsIHNlbGYpCgkJCgkJc2VsZi5idG5fZjEgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCAyMCwgMzMwLCA2MSwgNTEsICJidG5fZjEiLCBzZWxmLmxhYl9mMSwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCA2NCwgc2VsZikKCQlzZWxmLmJ0bl9mMiA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDgwLCAzMzAsIDYxLCA1MSwgImJ0bl9mMiIsIHNlbGYubGFiX2YyLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDY1LCBzZWxmKQoJCXNlbGYuYnRuX2YzID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgMTQwLCAzMzAsIDYxLCA1MSwgImJ0bl9mMyIsIHNlbGYubGFiX2YzLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDY2LCBzZWxmKQoJCXNlbGYuYnRuX2Y0ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9NaWRCTF9PZmYucG5nIiwgNTUsIDU1LCAyMDAsIDMzMCwgNjEsIDUxLCAiYnRuX2Y0Iiwgc2VsZi5sYWJfZjQsICJQeXRob24vTFBfUHJvai9MUF9NaWRCTF9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfTWlkQkxfUmVkLnBuZyIsIDY3LCBzZWxmKQoJCXNlbGYuYnRuX2Y1ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9NaWRCUl9PZmYucG5nIiwgNTUsIDU1LCAyNjAsIDMzMCwgNjEsIDUxLCAiYnRuX2Y1Iiwgc2VsZi5sYWJfZjUsICJQeXRob24vTFBfUHJvai9MUF9NaWRCUl9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfTWlkQlJfUmVkLnBuZyIsIDY4LCBzZWxmKQoJCXNlbGYuYnRuX2Y2ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgMzIwLCAzMzAsIDYxLCA1MSwgImJ0bl9mNiIsIHNlbGYubGFiX2Y2LCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDY5LCBzZWxmKQoJCXNlbGYuYnRuX2Y3ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgMzgwLCAzMzAsIDYxLCA1MSwgImJ0bl9mNyIsIHNlbGYubGFiX2Y3LCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDcwLCBzZWxmKQoJCXNlbGYuYnRuX2Y4ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgNDQwLCAzMzAsIDYxLCA1MSwgImJ0bl9mOCIsIHNlbGYubGFiX2Y4LCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDcxLCBzZWxmKQoJCXNlbGYuYnRuX2Y5ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfT2ZmLnBuZyIsIDQ5LCA0OSwgNTEwLCAzMzUsIDQxLCA0MSwgImJ0bl9mOSIsIHNlbGYubGFiX2Y5LCAiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfUmVkLnBuZyIsIDcyLCBzZWxmKQoJCQoJCXNlbGYuYnRuX2cxID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgMjAsIDM5MCwgNjEsIDUxLCAiYnRuX2cxIiwgc2VsZi5sYWJfZzEsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgODAsIHNlbGYpCgkJc2VsZi5idG5fZzIgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCA4MCwgMzkwLCA2MSwgNTEsICJidG5fZzIiLCBzZWxmLmxhYl9nMiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCA4MSwgc2VsZikKCQlzZWxmLmJ0bl9nMyA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDE0MCwgMzkwLCA2MSwgNTEsICJidG5fZzMiLCBzZWxmLmxhYl9nMywgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCA4Miwgc2VsZikKCQlzZWxmLmJ0bl9nNCA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDIwMCwgMzkwLCA2MSwgNTEsICJidG5fZzQiLCBzZWxmLmxhYl9nNCwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCA4Mywgc2VsZikKCQlzZWxmLmJ0bl9nNSA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDI2MCwgMzkwLCA2MSwgNTEsICJidG5fZzUiLCBzZWxmLmxhYl9nNSwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCA4NCwgc2VsZikKCQlzZWxmLmJ0bl9nNiA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDMyMCwgMzkwLCA2MSwgNTEsICJidG5fZzYiLCBzZWxmLmxhYl9nNiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCA4NSwgc2VsZikKCQlzZWxmLmJ0bl9nNyA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDM4MCwgMzkwLCA2MSwgNTEsICJidG5fZzciLCBzZWxmLmxhYl9nNywgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCA4Niwgc2VsZikKCQlzZWxmLmJ0bl9nOCA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDQ0MCwgMzkwLCA2MSwgNTEsICJidG5fZzgiLCBzZWxmLmxhYl9nOCwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCA4Nywgc2VsZikKCQlzZWxmLmJ0bl9nOSA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX09mZi5wbmciLCA0OSwgNDksIDUxMCwgMzk1LCA0MSwgNDEsICJidG5fZzkiLCBzZWxmLmxhYl9nOSwgIlB5dGhvbi9MUF9Qcm9qL0xQX0NpcmNsZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX1JlZC5wbmciLCA4OCwgc2VsZikKCQkKCQlzZWxmLmJ0bl9oMSA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDIwLCA0NTAsIDYxLCA1MSwgImJ0bl9oMSIsIHNlbGYubGFiX2gxLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDk2LCBzZWxmKQoJCXNlbGYuYnRuX2gyID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgODAsIDQ1MCwgNjEsIDUxLCAiYnRuX2gyIiwgc2VsZi5sYWJfaDIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgOTcsIHNlbGYpCgkJc2VsZi5idG5faDMgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCAxNDAsIDQ1MCwgNjEsIDUxLCAiYnRuX2gzIiwgc2VsZi5sYWJfaDMsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgOTgsIHNlbGYpCgkJc2VsZi5idG5faDQgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCAyMDAsIDQ1MCwgNjEsIDUxLCAiYnRuX2g0Iiwgc2VsZi5sYWJfaDQsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgOTksIHNlbGYpCgkJc2VsZi5idG5faDUgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCAyNjAsIDQ1MCwgNjEsIDUxLCAiYnRuX2g1Iiwgc2VsZi5sYWJfaDUsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgMTAwLCBzZWxmKQoJCXNlbGYuYnRuX2g2ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgMzIwLCA0NTAsIDYxLCA1MSwgImJ0bl9oNiIsIHNlbGYubGFiX2g2LCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDEwMSwgc2VsZikKCQlzZWxmLmJ0bl9oNyA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDM4MCwgNDUwLCA2MSwgNTEsICJidG5faDciLCBzZWxmLmxhYl9oNywgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCAxMDIsIHNlbGYpCgkJc2VsZi5idG5faDggPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCA0NDAsIDQ1MCwgNjEsIDUxLCAiYnRuX2g4Iiwgc2VsZi5sYWJfaDgsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgMTAzLCBzZWxmKQoJCXNlbGYuYnRuX2g5ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfT2ZmLnBuZyIsIDQ5LCA0OSwgNTEwLCA0NTUsIDQxLCA0MSwgImJ0bl9oOSIsIHNlbGYubGFiX2g5LCAiUHl0aG9uL0xQX1Byb2ovTFBfQ2lyY2xlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9DaXJjbGVfUmVkLnBuZyIsIDEwNCwgc2VsZikKCQkKCQlzZWxmLmJ0bl9pMSA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDIwLCA1MTAsIDYxLCA1MSwgImJ0bl9pMSIsIHNlbGYubGFiX2kxLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDExMiwgc2VsZikKCQlzZWxmLmJ0bl9pMiA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDgwLCA1MTAsIDYxLCA1MSwgImJ0bl9pMiIsIHNlbGYubGFiX2kyLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDExMywgc2VsZikKCQlzZWxmLmJ0bl9pMyA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDE0MCwgNTEwLCA2MSwgNTEsICJidG5faTMiLCBzZWxmLmxhYl9pMywgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCAxMTQsIHNlbGYpCgkJc2VsZi5idG5faTQgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCAyMDAsIDUxMCwgNjEsIDUxLCAiYnRuX2k0Iiwgc2VsZi5sYWJfaTQsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgMTE1LCBzZWxmKQoJCXNlbGYuYnRuX2k1ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgMjYwLCA1MTAsIDYxLCA1MSwgImJ0bl9pNSIsIHNlbGYubGFiX2k1LCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDExNiwgc2VsZikKCQlzZWxmLmJ0bl9pNiA9IEJ1dHRvbigiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX09mZi5wbmciLCA1NSwgNTUsIDMyMCwgNTEwLCA2MSwgNTEsICJidG5faTYiLCBzZWxmLmxhYl9pNiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9HcmVlbi5wbmciLCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX1JlZC5wbmciLCAxMTcsIHNlbGYpCgkJc2VsZi5idG5faTcgPSBCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9PZmYucG5nIiwgNTUsIDU1LCAzODAsIDUxMCwgNjEsIDUxLCAiYnRuX2k3Iiwgc2VsZi5sYWJfaTcsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfR3JlZW4ucG5nIiwgIlB5dGhvbi9MUF9Qcm9qL0xQX1NxdWFyZV9SZWQucG5nIiwgMTE4LCBzZWxmKQoJCXNlbGYuYnRuX2k4ID0gQnV0dG9uKCJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfT2ZmLnBuZyIsIDU1LCA1NSwgNDQwLCA1MTAsIDYxLCA1MSwgImJ0bl9pOCIsIHNlbGYubGFiX2k4LCAiUHl0aG9uL0xQX1Byb2ovTFBfU3F1YXJlX0dyZWVuLnBuZyIsICJQeXRob24vTFBfUHJvai9MUF9TcXVhcmVfUmVkLnBuZyIsIDExOSwgc2VsZikKCQlzZWxmLmJ0bl9pOSA9IE1vZGVCdXR0b24oIlB5dGhvbi9MUF9Qcm9qL0xQX0NpcmNsZV9Nb2RlLnBuZyIsIDQ5LCA0OSwgNTEwLCA1MTUsIDQxLCA0MSwgImJ0bl9pOSIsIHNlbGYpCgoJCXNlbGYucmV0cmFuc2xhdGVVaShGb3JtKQoJCVF0Q29yZS5RTWV0YU9iamVjdC5jb25uZWN0U2xvdHNCeU5hbWUoRm9ybSkKCiNBbGxvdyBidXR0b25zIHRvIGZ1bmN0aW9uIHVwb24gYmVpbmcgY2xpY2tlZC4KCWRlZiByZXRyYW5zbGF0ZVVpKHNlbGYsIEZvcm0pOgoJCUZvcm0uc2V0V2luZG93VGl0bGUoUXRHdWkuUUFwcGxpY2F0aW9uLnRyYW5zbGF0ZSgiRm9ybSIsICJMYXVuY2hwYWQgQ29udHJvbCIsIE5vbmUsIFF0R3VpLlFBcHBsaWNhdGlvbi5Vbmljb2RlVVRGOCkpCgkJCgkJc2VsZi5idG5fYTEuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2ExLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYTIuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2EyLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYTMuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2ExLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYTQuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2EyLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYTUuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2ExLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYTYuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2EyLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYTcuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2ExLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYTguY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2EyLnBsYXlTYW1wbGUpCgkJCgkJc2VsZi5idG5fYjEuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2IxLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYjIuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2IyLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYjMuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2IzLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYjQuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2I0LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYjUuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2I1LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYjYuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2I2LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYjcuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2I3LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYjguY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2I4LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYjkuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2I5LnBsYXlTYW1wbGUpCgkJCgkJc2VsZi5idG5fYzEuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2MxLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYzIuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2MyLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYzMuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2MzLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYzQuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2M0LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYzUuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2M1LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYzYuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2M2LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYzcuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2M3LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYzguY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2M4LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fYzkuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2M5LnBsYXlTYW1wbGUpCgkJCgkJc2VsZi5idG5fZDEuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2QxLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZDIuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2QyLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZDMuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2QzLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZDQuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2Q0LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZDUuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2Q1LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZDYuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2Q2LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZDcuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2Q3LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZDguY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2Q4LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZDkuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2Q5LnBsYXlTYW1wbGUpCgkJCgkJc2VsZi5idG5fZTEuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2UxLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZTIuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2UyLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZTMuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2UzLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZTQuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2U0LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZTUuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2U1LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZTYuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2U2LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZTcuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2U3LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZTguY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2U4LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZTkuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2U5LnBsYXlTYW1wbGUpCgkJCgkJc2VsZi5idG5fZjEuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2YxLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZjIuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2YyLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZjMuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2YzLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZjQuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2Y0LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZjUuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2Y1LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZjYuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2Y2LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZjcuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2Y3LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZjguY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2Y4LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZjkuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2Y5LnBsYXlTYW1wbGUpCgkJCgkJc2VsZi5idG5fZzEuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2cxLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZzIuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2cyLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZzMuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2czLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZzQuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2c0LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZzUuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2c1LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZzYuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2c2LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZzcuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2c3LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZzguY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2c4LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5fZzkuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2c5LnBsYXlTYW1wbGUpCgkJCgkJc2VsZi5idG5faDEuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2gxLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faDIuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2gyLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faDMuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2gzLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faDQuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2g0LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faDUuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2g1LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faDYuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2g2LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faDcuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2g3LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faDguY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2g4LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faDkuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2g5LnBsYXlTYW1wbGUpCgkJCgkJc2VsZi5idG5faTEuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2kxLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faTIuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2kyLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faTMuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2kzLnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faTQuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2k0LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faTUuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2k1LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faTYuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2k2LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faTcuY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2k3LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faTguY2xpY2tlZC5jb25uZWN0KHNlbGYuYnRuX2k4LnBsYXlTYW1wbGUpCgkJc2VsZi5idG5faTkuY2xpY2tlZC5jb25uZWN0KGxhdW5jaFNhbXBsZXIpCgojQ3VzdG9tIGxhYmVsIGNsYXNzLCBpbmhlcml0aW5nIGZyb20gUVQgUUxhYmVsLgpjbGFzcyBMYWJlbChRdEd1aS5RTGFiZWwpOgoJZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIHBvc1gsIHBvc1ksIHBvc0EsIHBvc0IsIG9iak5hbWUsIHBhcmVudD1Ob25lKToKCQlzdXBlcihMYWJlbCwgc2VsZikuX19pbml0X18ocGFyZW50PXBhcmVudCkKCQkKCQlzZWxmLnNldEdlb21ldHJ5KFF0Q29yZS5RUmVjdChwb3NYLCBwb3NZLCBwb3NBLCBwb3NCKSkKCQlzZWxmLmZvbnQgPSBRdEd1aS5RRm9udCgpCgkJc2VsZi5mb250LnNldFBvaW50U2l6ZSgxMCkKCQlzZWxmLnNldEZvbnQoc2VsZi5mb250KQoJCXNlbGYuc2V0T2JqZWN0TmFtZShvYmpOYW1lKQoJCXNlbGYudGV4dCA9IHRleHQKCQlzZWxmLnNldFRleHQoUXRHdWkuUUFwcGxpY2F0aW9uLnRyYW5zbGF0ZSgiRm9ybSIsICI8aHRtbD48aGVhZC8+PGJvZHk+PHAgYWxpZ249XCJjZW50ZXJcIj48c3BhbiBzdHlsZT1cIiBjb2xvcjojZmZmZmZmO1wiPiIrIHNlbGYudGV4dCArIjwvc3Bhbj48L3A+PC9ib2R5PjwvaHRtbD4iLCBOb25lLCBRdEd1aS5RQXBwbGljYXRpb24uVW5pY29kZVVURjgpKQoKI0N1c3RvbSBidXR0b24gY2xhc3Mgd2l0aG91dCBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHkuIApjbGFzcyBNb2RlQnV0dG9uKFF0R3VpLlFQdXNoQnV0dG9uKToKCWRlZiBfX2luaXRfXyhzZWxmLCBpY29uUGF0aFVuYXNzaWduZWQsIGljb25YLCBpY29uWSwgcG9zWCwgcG9zWSwgcG9zQSwgcG9zQiwgb2JqTmFtZSwgcGFyZW50PU5vbmUpOgoJCXN1cGVyKE1vZGVCdXR0b24sIHNlbGYpLl9faW5pdF9fKHBhcmVudD1wYXJlbnQpIAoKCQlzZWxmLmljb24gPSBRdEd1aS5RSWNvbigpCgkJc2VsZi5pY29uLmFkZFBpeG1hcChRdEd1aS5RUGl4bWFwKGljb25QYXRoVW5hc3NpZ25lZCksIFF0R3VpLlFJY29uLk5vcm1hbCwgUXRHdWkuUUljb24uT2ZmKQoJCXNlbGYuc2V0SWNvbihzZWxmLmljb24pCgkJc2VsZi5zZXRJY29uU2l6ZShRdENvcmUuUVNpemUoaWNvblgsIGljb25ZKSkKCQlzZWxmLnNldEdlb21ldHJ5KFF0Q29yZS5RUmVjdChwb3NYLCBwb3NZLCBwb3NBLCBwb3NCKSkKCQlzZWxmLnNldE9iamVjdE5hbWUob2JqTmFtZSkJCgkJTFAuTGVkQ3RybFJhdygxMjAsIDAsIDMpCgojQ3VzdG9tIGJ1dHRvbiBjbGFzcyB3aXRoIGRyYWcgYW5kIGRyb3AgZnVuY3Rpb25hbGl0eS4KY2xhc3MgQnV0dG9uKFF0R3VpLlFQdXNoQnV0dG9uKToKCWRlZiBfX2luaXRfXyhzZWxmLCBpY29uUGF0aFVuYXNzaWduZWQsIGljb25YLCBpY29uWSwgcG9zWCwgcG9zWSwgcG9zQSwgcG9zQiwgb2JqTmFtZSwgbGFiRWRpdCwgaWNvblBhdGhBc3NpZ25lZCwgaWNvblBhdGhQbGF5aW5nLCBwYWRudW1iZXIsIHBhcmVudD1Ob25lKToKCQlzdXBlcihCdXR0b24sIHNlbGYpLl9faW5pdF9fKHBhcmVudD1wYXJlbnQpIAoJCQoJCXNlbGYuc2V0QWNjZXB0RHJvcHMoVHJ1ZSkKICAgICAgICAKCQlzZWxmLmljb25QYXRoQXNzaWduZWQgPSBpY29uUGF0aEFzc2lnbmVkCgkJc2VsZi5pY29uUGF0aFBsYXlpbmcgPSBpY29uUGF0aFBsYXlpbmcKCQlzZWxmLmljb24gPSBRdEd1aS5RSWNvbigpCgkJc2VsZi5pY29uLmFkZFBpeG1hcChRdEd1aS5RUGl4bWFwKGljb25QYXRoVW5hc3NpZ25lZCksIFF0R3VpLlFJY29uLk5vcm1hbCwgUXRHdWkuUUljb24uT2ZmKQoJCXNlbGYuc2V0SWNvbihzZWxmLmljb24pCgkJc2VsZi5zZXRJY29uU2l6ZShRdENvcmUuUVNpemUoaWNvblgsIGljb25ZKSkKCQlzZWxmLnNldEdlb21ldHJ5KFF0Q29yZS5RUmVjdChwb3NYLCBwb3NZLCBwb3NBLCBwb3NCKSkKCQlzZWxmLnNldE9iamVjdE5hbWUob2JqTmFtZSkKCQlzZWxmLnNhbXBsZVBhdGggPSBOb25lCgkJc2VsZi5sYWJlbCA9IGxhYkVkaXQJCgkJc2VsZi5wYWRudW1iZXIgPSBwYWRudW1iZXIKCiNJZiBkcmFnZ2VkIGl0ZW0gaGFzIGEgZmlsZXBhdGggdGhlbiBhY2NlcHQgaXQsIG90aGVyd2lzZSBkbyBub3QgKGkuZSBpZiBpdCB3ZXJlIHRleHQgdGhhdCBoYWQgYmVlbiBkcmFnZ2VkIHN0cmFpZ2h0IG9udG8gdGhlIGJ1dHRvbikKCWRlZiBkcmFnRW50ZXJFdmVudChzZWxmLCBldmVudCk6CgkJaWYgZXZlbnQubWltZURhdGEoKS5oYXNVcmxzKCk6CgkJCWV2ZW50LmFjY2VwdFByb3Bvc2VkQWN0aW9uKCkKCQllbHNlOgoJCQlzdXBlcihCdXR0b24sIHNlbGYpLmRyYWdFbnRlckV2ZW50KGV2ZW50KQoKCWRlZiBkcmFnTW92ZUV2ZW50KHNlbGYsIGV2ZW50KToKCQlzdXBlcihCdXR0b24sIHNlbGYpLmRyYWdNb3ZlRXZlbnQoZXZlbnQpCgojSWYgZHJhZ2dlZCBpdGVtIGhhcyBhIGZpbGVwYXRoIHRoZW4gYWNjZXB0IGl0LCBvdGhlcndpc2UgZG8gbm90IChpLmUgaWYgaXQgd2VyZSB0ZXh0IHRoYXQgaGFkIGJlZW4gZHJhZ2dlZCBzdHJhaWdodCBvbnRvIHRoZSBidXR0b24pCglkZWYgZHJvcEV2ZW50KHNlbGYsIGV2ZW50KToKCQlpZiBldmVudC5taW1lRGF0YSgpLmhhc1VybHMoKToKCQkJZm9yIHVybCBpbiBldmVudC5taW1lRGF0YSgpLnVybHMoKToKCQkJCXNlbGYuc2FtcGxlUGF0aCA9IHN0cih1cmwudG9Mb2NhbEZpbGUoKSkKCQkJCXNlbGYuZWRpdExhYmVsKCkKCQkJCXNlbGYuaWNvbkFzc2lnbmVkKCkKCQkJZXZlbnQuYWNjZXB0UHJvcG9zZWRBY3Rpb24oKQoJCWVsc2U6CgkJCXN1cGVyKEJ1dHRvbixzZWxmKS5kcm9wRXZlbnQoZXZlbnQpCgkJCQoJZGVmIGljb25Bc3NpZ25lZChzZWxmKToKCQlzZWxmLmljb24uYWRkUGl4bWFwKFF0R3VpLlFQaXhtYXAoc2VsZi5pY29uUGF0aEFzc2lnbmVkKSwgUXRHdWkuUUljb24uTm9ybWFsLCBRdEd1aS5RSWNvbi5PZmYpCgkJc2VsZi5zZXRJY29uKHNlbGYuaWNvbikKCQlMUC5MZWRDdHJsUmF3KHNlbGYucGFkbnVtYmVyLCAwLCAzKQoJCQoJZGVmIGljb25QbGF5aW5nKHNlbGYpOgoJCXNlbGYuaWNvbi5hZGRQaXhtYXAoUXRHdWkuUVBpeG1hcChzZWxmLmljb25QYXRoUGxheWluZyksIFF0R3VpLlFJY29uLk5vcm1hbCwgUXRHdWkuUUljb24uT2ZmKQoJCXNlbGYuc2V0SWNvbihzZWxmLmljb24pCgkKCWRlZiBwbGF5U2FtcGxlKHNlbGYpOgoJCWlmIHNlbGYuc2FtcGxlUGF0aCA9PSBOb25lOgoJCQlzZWxmLnNhbXBsZSA9IE5vbmUKCQllbHNlOgoJCQlzZWxmLnNhbXBsZSA9IHB5Z2FtZS5taXhlci5Tb3VuZChzZWxmLnNhbXBsZVBhdGgpCgkJCXB5Z2FtZS5taXhlci5Tb3VuZC5wbGF5KHNlbGYuc2FtcGxlKQoJCQkKCWRlZiBlZGl0TGFiZWwoc2VsZik6CgkJc2VsZi5maWxlTmFtZSA9IG50cGF0aC5iYXNlbmFtZShzZWxmLnNhbXBsZVBhdGgpCgkJc2VsZi5sYWJlbC5zZXRUZXh0KFF0R3VpLlFBcHBsaWNhdGlvbi50cmFuc2xhdGUoIkZvcm0iLCAiPGh0bWw+PGhlYWQvPjxib2R5PjxwIGFsaWduPVwiY2VudGVyXCI+PHNwYW4gc3R5bGU9XCIgY29sb3I6I2ZmZmZmZjtcIj4iKyBzZWxmLmZpbGVOYW1lICsiPC9zcGFuPjwvcD48L2JvZHk+PC9odG1sPiIsIE5vbmUsIFF0R3VpLlFBcHBsaWNhdGlvbi5Vbmljb2RlVVRGOCkpCgpkZWYgbGF1bmNoU2FtcGxlcigpOgoJcGxheW1vZGUgPSBTYW1wbGVyKCkKCQkJCmlmIF9fbmFtZV9fPT0nX19tYWluX18nOgoJcHlnYW1lLm1peGVyLmluaXQoZnJlcXVlbmN5PTQ0MTAwLCBzaXplPS0xNiwgYnVmZmVyPTEwMjQpCglweWdhbWUuaW5pdCgpCglhcHAgPSBRdEd1aS5RQXBwbGljYXRpb24oc3lzLmFyZ3YpCglMUCA9IGxhdW5jaHBhZC5MYXVuY2hwYWQoKQoJTFAuT3BlbigpCglMUC5SZXNldCgpCglleCA9IFVpX0Zvcm0oKQoJZXguc2hvdygpCglzeXMuZXhpdChhcHAuZXhlY18oKSk=